网上有很多讲大数据的文章会告诉你,Clickhouse是来自俄罗斯的“大数据”查询引擎。这个由Yandex主导的大数据引擎,非常的牛逼,速度超级快。然后这个传说就在不断的传播中越传越遥远。

我本来对Clickhouse知道的非常少,记忆中有两件事情能扯上关系。第一件事是2015年VLDB在印度开。开完会以后我报了个团,慕名去泰姬陵。那天一辆小巴车接了我,又在半路接了另外一个酒店接了几个俄罗斯人。

去泰姬陵要开3个半小时的车,路上几个俄罗斯人就介绍说,我们正在开发一个大数据系统,叫Clickhouse。后面其中有个俄罗斯人就经常在各种Clickhouse的meetup里面频频出现了。当时我也就一听,呵呵了。后面就忘记了这回事。直到后来别人再提起Clickhouse

另外一件事情是2020年VLDB的时候,TiDB的HTAP论文,里面提到了它们的AP部分,是拿Clickhouse的代码来魔改得到的。

最近因为一些原因,需要了解一下Clickhouse到底是个什么东西,但是没什么文章能把这事情说清楚的,所以就自己去看源代码了。打开一看,吓我一跳,好大一坨屎。

当然,哪里都有屎,HIVE里面就有很多屎。不能仅仅因为屎代码,就直接否认了一个系统。问题吧,Clickhouse的屎,和别的系统还不太一样,很有特点。

看Clickhouse的代码,最重要的不要把这个系统当成是个大数据的系统。把它当成一个单机数据库来看,就比较好理解。一个单机数据库,怎么变成了大数据系统,这就是我觉得屎的别样的地方。

下面的东西比较技术一点,会涉及数据库系统的比较核心的东西。讲真,我很久没有那么干巴巴的聊纯技术的东西了。可能90%我的读者不一定看得懂了。见谅。

数据库系统来说,除去外围的东西,我们一般会注意Compiler, Optimizer, Runtime, Storage有时候也要看一下Catalog,或者叫Metadata service。我习惯了用英文,就不一一翻译成中文了,大家自行翻译吧。我本人对Compiler Optimizer,Runtime都还比较熟,Runtime经常也叫做query execution,metadata service也还行,storage相对来说差点。

Clickhouse的compiler和optimizer有种一塌糊涂的感觉。在一个正规的数据库产品里,Compiler一般是Parse, Syntax check, Binding, Semantic check.

Parse会用Parser generator比如说YACC或者ANTLR来通过文法产生,得到一棵AST(Abstract Syntax Tree),之后的Syntax check检查语法,Binding解决每个词到底是什么,是column name, table name 还是function name等等。Semantic Check会做语义检查,最后AST被转化成Logical Operator Tree。

我说了那么多,算科普了。Clickhouse的compiler,Parser是手写的,Parser干了很多活,后面接一个Interpreter。后者干了一半Compiler一半Optimizer的活。

Optimizer在一个数据库系统里面是大头,一般要么是SystemR那样自底向上的要么是Volcano那样自顶向下的。前者以DB2为代表,后者SQL Server为代表。比较新一点的Optimizer都自称自己是Volcano style,但是每个还是有点不一样。

Clickhouse这种鼻子眉毛胡子一起的,倒是真的吓着我了,见过差的,没见过这样离谱的,连Parser generator都不用的。

Rumtime是亮点。Clickhouse的Runtime有种熟悉感。仔细看看是Vectorwise的做法。关于这个可以去看Marcin Zukowski的博士论文。这篇论文绝对是值得一读的,上百页满满的干货。

链接给出来了在下面。

https://dare.uva.nl/search?identifier=5ccbb60a-38b8-4eeb-858a-e7735dd37487

这位叫Marcin的人,毕业后就开了公司Vectowise,做的是MonetDB里面这个vectorization引擎的创业,擅长跑TPCH。2010年公司卖给Ingres以后跑美国来二次创业,开了一家叫Snowflake的公司。现在当然已经是亿万富翁了。Snowflake的故事可以看这篇文章Snowflake:价值200亿美元的云端数据库厂商

Clickhouse的Runtime就很有这篇论文里面讲述的风格了。我看过几个抄vectorwise代码的查询引擎,总是有种说不出来的感觉。

Clickhouse的代码里面还有一个很不舒服的地方,什么东西都给你搞一堆,Hash Table也有几十种做法。往好了说,是为了提高性能,极致。往不好了说,脑袋有点被驴踢了。是不是需要这样优化,值得商榷,起码在compiler和optimizer一坨屎的情况下,是不是要这样优化。

最神奇的地方来了,这个系统是怎么样实现分布式查询的呢?它的存储层是通过IStorage这个接口来做的。所以它搞了一个Distributed Table来硬生生的扩展出一片天地来。

Distributed Table是为了在单机引擎上实现分布式处理的一种Hack,堂而皇之的就越做越大,最后把自己吹成了一个分布式引擎。

Distributed Table你可以认为是在不同节点上的单机Table的一个UNION ALL。对这样一个表如果做单表查询的话,相当于我可以对每个表单独先查询,再把结果UNION ALL起来。

如果说再扩展一下的话,我还可以把Aggregte做push down,采用local aggregate和global aggregate两层。我知道说到这里,大概撑死了1%读我这篇文章的人能看懂我说什么。

这当然不是真的分布式引擎。最多只能处理一下单表查询,要是给它塞两张distributed table做个join,这个系统就原形毕露了。

科普一下,分布式系统,在数据库里面是通过exchange opertor来实现对数据的shuffle的,这需要从optimizer到runtime都有支持。有一些投机取巧的地方可以做,但整体来说,是个大活。

没有exchange operator,不能够做data shuffling的东西,没资格自称是大数据系统。

这其实解释了一个最本质的问题:Clickhouse建议大家把数据做成一张又大又长的单表来存。为什么啊,它就没办法处理两张分布式的表,只能让大家存成一张表了。

我不是说存成一张表就是问题,某些应用,比如说日志查询,一张表也就够了。但是李鬼,哪怕是个很快的李鬼,你不能把自己硬吹成李逵。没有exchange operator,不能做data shuffle的系统好意思叫自己是个大数据系统?

除了这个分布式查询的设计很扯淡以外,Clickhouse的replication也很扯淡。Replication的办法是建立一张新的表,名字完全不一样,然后和老的表共享同一个ZooKeeper的path。这样你们两张表以后就同生共死,是兄弟了。对我的操作一定会复制给你,对你的操作也反之亦然。问题是,我如果是个新用户的话,我鬼知道原来李逵就是李鬼,李鬼也是李逵。这产品经理要在我手下干活,早就领盒饭了。

扯了这么多,我就觉得很扯淡的,有那么多的人在吹Clickhouse这个大数据系统。我也不否认在特定应用场景下,Clickhouse可以跑的很快,但是一个连分布式join都做不了的东西,真的有资格叫大数据系统吗?

这坨屎有够清新脱俗的。

大数据东风下,Clickhouse这坨屎是怎么上天的相关推荐

  1. 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)...

    二.Work Queues(using the Java Client) 走起 在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工作者 ...

  2. 大数据时代下的新生态、新洞察、新趋势 | 神策 2019 数据驱动大会

    10 月 22 日,以"矩•变"为主题的神策 2019 数据驱动大会在北京维景国际大酒店顺利举行,来自全球大数据各大行业的领袖人物聚首北京,融合国际前沿技术与行业实践,深入探讨大数 ...

  3. 在目前大数据时代下,怎么能成为一名合格的数据分析师

    "21世纪什么最贵,人才",在目前大数据时代下,什么最难找,什么最贵,实现数据价值的人,数据分析师. 但是对于数据分析师的认识,比较极端,但对数据分析师价值的认识正在回归理性.很多 ...

  4. 独家 | Michael I.Jordan:大数据时代下的安全实时决策堆栈与增强学习(视频+精华笔记)

    金秋九月,2017国际大数据产业技术创新高峰论坛暨大数据系统软件国家工程实验室第一次会议盛大开幕,大数据系统软件国家工程实验室作为大数据系统软件技术研发与工程化的国家级创新平台,将通过大数据系统软件技 ...

  5. 大数据技术下 分布式数据库何去何从?

    转自:安华信达的文章 链接地址:http://www.sohu.com/a/133784835_481676 一.大数据技术的发展 大数据技术从诞生到现在,已历经了十几个年头,市场上也早已有公司或机构 ...

  6. 大数据架构详解_【数据如何驱动增长】(3)大数据背景下的数仓建设 amp; 数据分层架构设计...

    背景 了解数据仓库.数据流架构的搭建原理对于合格的数据分析师或者数据科学家来说是一项必不可少的能力.它不仅能够帮助分析人员更高效的开展分析任务,帮助公司或者业务线搭建一套高效的数据处理架构,更是能够从 ...

  7. 一招教你解决大数据量下的各种报表使用问题

    在我们日常制作报表分析过程中,总会遇到各种问题.比如,报表底层数据日益增多.报表加载超慢,这些情况该怎么解决? 数据库是最常见的能处理大数据的计算方案,而永洪能利用数据库来完成数据计算.但是,有些报表 ...

  8. 大数据的下一站是什么?服务/分析一体化(HSAP)

    简介: 大数据的下一站是什么?服务/分析一体化(HSAP) 作者:蒋晓伟(量仔) 阿里巴巴研究员 因为侧重点的不同,传统的数据库可以分为交易型的 OLTP 系统和分析型的 OLAP 系统.随着互联网的 ...

  9. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)...

    柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...

最新文章

  1. mac图标包_Mac 生产力配置手册,从 Homebrew 说开去
  2. 【PAT乙级】1078 字符串压缩与解压 (20 分)
  3. 【转】窗口之间的主从关系与Z-Order
  4. HP 3055 恢复出厂
  5. 论“前置测试模型”-1 概念篇
  6. 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结
  7. 关于onload的事件权柄以及踩过的坑
  8. c语言中空格算空行吗,1、程序中空格与空行使用规范
  9. 小博老师精选Java十大CMS ——建站神器
  10. paip兼容windows与linux的java类根目录路径的方法
  11. tlac100怎么添加ap_如何设置AC功能管理无线AP
  12. 分享 Android 识音识别 挺有想法的。
  13. 有道智云 php,调用有道智云API,自动翻译WORDPRESS标题为英文
  14. Ubuntu 18.04 安装微信wechat
  15. window10怎么设置共享计算机,Win10系统网络共享功能怎么用?Windows10网络共享功能使用方法...
  16. 蘑菇街商家登录php源码,蘑菇街
  17. 公网远程访问连接Minecraft我的世界服务器 - MCSM控制面板
  18. PHP版本升级了旧代码怎么办?编程语言PHP还有未来吗?[图]
  19. MSRA-TD5000数据集使用
  20. Oracle的表简单介绍

热门文章

  1. python自动给数字前面补0的方法
  2. cad抛物线曲线lisp_CAD画缓和曲线lisp程序精编版
  3. codeblocks配置glut
  4. C#winform 经典小游戏贪吃蛇V1.0(一)
  5. 零售药店计算机操作内容培训,零售药店gsp培训计划.doc
  6. 【Leetcode】444. Sequence Reconstruction
  7. 全球经济寒冬将至?且看顶级资本大鳄的大数据分析预测
  8. python 最新 毕业设计 选题推荐
  9. 「常見程式題目」第三版
  10. 数据挖掘系列(1)_Excel的数据挖掘插件安装(SQL Server 2012 office )