Klin、Druid、ClickHouse核心技术对比
点击上方蓝色字体,选择“设为星标”
回复”资源“获取更多资源
大数据技术与架构
点击右侧关注,大数据开发领域最强公众号!
大数据真好玩
点击右侧关注,大数据真好玩!
KYLIN、DRUID、CLICKHOUSE是目前主流的OLAP引擎,本文尝试从数据模型和索引结构两个角度,分析这几个引擎的核心技术,并做简单对比。在阅读本文之前希望能对KYLIN、DRUID、CLICKHOUSE有所理解。
1. KYLIN数据模型
Kylin的数据模型本质上是将二维表(Hive表)转换为Cube,然后将Cube存储到HBase表中,也就是两次转换。
第一次转换,其实就是传统数据库的Cube化,Cube由CuboId组成,下图每个节点都被称为一个CuboId,CuboId表示固定列的数据数据集合,比如“ AB” 两个维度组成的CuboId的数据集合等价于以下SQL的数据集合:
select A, B, sum(M), sum(N) from table group by A, B
第二次转换,是将Cube中的数据存储到HBase中,转换的时候CuboId和维度信息序列化到rowkey,度量列组成列簇。在转换的时候数据进行了预聚合。下图展示了Cube数据在HBase中的存储方式。
2. KYLIN索引结构
因为Kylin将数据存储到HBase中,所以kylin的数据索引就是HBase的索引。HBase的索引是简化版本的B+树,相比于B+树,HFile没有对数据文件的更新操作。
HFile的索引是按照rowkey排序的聚簇索引,索引树一般为二层或者三层,索引节点比MySQL的B+树大,默认是64KB。数据查找的时候通过树形结构定位到节点,节点内部数据是按照rowkey有序的,可以通过二分查找快速定位到目标。
KYLIN小结:适用于聚合查询场景;因为数据预聚合,Kylin可以说是最快的查询引擎(group-by查询这样的复杂查询,可能只需要扫描1条数据);kylin查询效率取决于是否命中CuboId,查询波动较大;HBase索引有点类似MySQL中的联合索引,维度在rowkey中的排序和查询维度组合对查询效率影响巨大;所以Kylin建表需要业务专家参与。
4. DRUID数据模型
Druid数据模型比较简单,它将数据进行预聚合,只不过预聚合的方式与Kylin不同,kylin是Cube化,Druid的预聚合方式是将所有维度进行Group-by,可以参考下图:
5. DRUID索引结构
Druid索引结构使用自定义的数据结构,整体上它是一种列式存储结构,每个列独立一个逻辑文件(实际上是一个物理文件,在物理文件内部标记了每个列的start和offset)。对于维度列设计了索引,它的索引以Bitmap为核心。下图为“city”列的索引结构:
首先将该列所有的唯一值排序,并生成一个字典,然后对于每个唯一值生成一个Bitmap,Bitmap的长度为数据集的总行数,每个bit代表对应的行的数据是否是该值。Bitmap的下标位置和行号是一一对应的,所以可以定位到度量列,Bitmap可以说是反向索引。同时数据结构中保留了字典编码后的所有列值,其为正向的索引。
那么查询如何使用索引呢?以以下查询为例:
select site, sum(pv) from xx where date=2020-01-01 and city='bj' group by site
city列中二分查找dictionary并找到’bj’对应的bitmap
遍历city列,对于每一个字典值对应的bitmap与‘bj’的bitmap做与操作
每个相与后的bitmap即为city=’bj’查询条件下的site的一个group的pv的索引
通过索引在pv列中查找到相应的行,并做agg
后续计算
DRUID小结:Druid适用于聚合查询场景但是不适合有超高基维度的场景;存储全维度group-by后的数据,相当于只存储了KYLIN Cube的Base-CuboID;每个维度都有创建索引,所以每个查询都很快,并且没有类似KYLIN的巨大的查询效率波动。
7. CLICKHOUSE索引结构(只讨论MergeTree引擎)
因为Clickhouse数据模型就是普通二维表,这里不做介绍,只讨论索引结构。整体上Clickhouse的索引也是列式索引结构,每个列一个文件。Clickhouse索引的大致思路是:
首先选取部分列作为索引列,整个数据文件的数据按照索引列有序,这点类似MySQL的联合索引;
其次将排序后的数据每隔8194行选取出一行,记录其索引值和序号,注意这里的序号不是行号,序号是从零开始并递增的,Clickhouse中序号被称作Mark’s number;
然后对于每个列(索引列和非索引列),记录Mark’s number与对应行的数据的offset。
下图中以一个二维表(date, city, action)为例介绍了整个索引结构,其中(date,city)是索引列。
那么查询如何使用索引呢?以以下查询为例:
select count(distinct action) where date=toDate(2020-01-01) and city=’bj’
二分查找primary.idx并找到对应的mark’s number集合(即数据block集合)
在上一步骤中的 block中,在date和city列中查找对应的值的行号集合,并做交集,确认行号集合
将行号转换为mark’s number 和 offset in block(注意这里的offset以行为单位而不是byte)
在action列中,根据mark’s number和.mark文件确认数据block在bin文件中的offset,然后根据offset in block定位到具体的列值。
后续计算
该实例中包含了对于列的正反两个方向的查找过程。反向:查找date=toDate(2020-01-01) and city=’bj’数据的行号;正向:根据行号查找action列的值。对于反向查找,只有在查找条件匹配最左前缀的时候,才能剪枝掉大量数据,其它时候并不高效。
Clickhouse小结:MergeTree Family作为主要引擎系列,其中包含适合明细数据的场景和适合聚合数据的场景;Clickhouse的索引有点类似MySQL的联合索引,当查询前缀元组能命中的时候效率最高,可是一旦不能命中,几乎会扫描整个表,效率波动巨大;所以建表需要业务专家,这一点跟kylin类似。
小结
KYLIN、DRUID只适合聚合场景,CLICKHOUSE适合明细和聚合场景
聚合场景,查询效率排序:KYLIN > DRUID > CLICKHOUSE
KYLIN、CLICKHOUSE建表都需要业务专家参与
KYLIN、CLICKHOUSE查询效率都可能产生巨大差异
CLICKHOUSE在向量化方面做得的最好,DRUID少量算子支持向量化、KYLIN目前还不支持向量化计算。
版权声明:
本文为大数据技术与架构整理,原作者独家授权。未经原作者允许转载追究侵权责任。
微信公众号|import_bigdata
编辑 《大数据技术与架构》
插画 《大数据技术与架构》
文章链接 http://www.jackywoo.cn/kylin-druid-clickhouse-comparing/
欢迎点赞+收藏+转发朋友圈素质三连
文章不错?点个【在看】吧! ????
Klin、Druid、ClickHouse核心技术对比相关推荐
- 大数据druid查询不支持分页_Klin、Druid、ClickHouse核心技术对比
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 大数据真好玩点击右侧关注,大数据真好玩! ...
- Kylin、Druid、ClickHouse核心技术对比
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取个gui 来源:jackywoo.cn 导读:Kylin.Druid.Cli ...
- Apache Kylin 与 ClickHouse 的对比
正文 Apache Kylin 和 ClickHouse 都是目前市场流行的大数据 OLAP 引擎:Kylin 最初由 eBay 中国研发中心开发,2014 年开源并贡献给 Apache 软件基金会, ...
- Hbase、Kudu和ClickHouse横向对比
好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受. 目录 1 前言 2 安装部署方式对比 3 组成架构对比 4 基本操作对比 4.1 数据读写操作 4.2 数据查询操作 ...
- 阿里云数据库ClickHouse核心技术解析
分享嘉宾:和君 阿里云 编辑整理:猫哥 出品平台:大数据猫 导读:2020年ClickHouse就是一批黑马,成功脱颖而出,在各大互联网都受到青睐,头条.腾讯.快手.阿里都在使用ClickHouse, ...
- springboot2.0 默认数据连接池HikariPool(java平台最快的,替换druid)性能对比
背景 对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 . NOTE: 本文所有测试均是MySQL库 测试结论 1:性能方面 hikariCP> ...
- 数据库连接池 (DBCP、c3p0、Druid) 配置说明和对比
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出. 对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据 ...
- ClickHouse大数据领域企业级应用实践和探索总结
ClickHouse简介 2020年下半年在OLAP领域有一匹黑马以席卷之势进入大数据开发者的领域,它就是ClickHouse.在2019年小编也曾介绍过ClickHouse,大家可以参考这里进行入门 ...
- 大话 Druid 存储结构
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多惊喜 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好 ...
最新文章
- Excel、Exchange和C#
- WPF 触发器Triggers
- 使用DOSBox编译汇编代码
- 再用Udp--聊天工具
- 在EA中画ER图和数据模型图
- Android:学习笔记(一)
- ArrayList实现
- 本地读取服务器Xml文件及本地读本地的xml
- python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)
- git clone加速(github加速)
- 作为一个部门 Leader,居然不如一个实习生
- python装饰器 练习
- 用什么计算机演奏音乐,用这个你可以用自己的电脑弹奏美妙的音乐.
- java商品销售管理系统_基于SSM框架下的JAVA商场销售管理系统
- Essay-编程语言排行榜2013年10月:Groovy首次闯入前二十
- 设随机过程{X(t)=Acos(ωt+Θ),t∈(一∞,+∞)},其中A,ω,Θ为相互独立的实随机变量,其中A的均值为2,方差为4,且Θ~U(-π,π),ω~U(-5,5),试问X(t)是否为平稳过程
- java猜数字游戏界面_传统猜数字游戏的java简易实现
- 设置BottomSheetDialogFragment不可拖拽
- win10:dos调用ffmpeg批量转换视频格式
- linux查看已挂载目录,Linux查看目录挂载点
热门文章
- golang计算任意两点间的方位角
- 猿创征文 | 【STM32】ESP8266 wifi模块创建阿里云产品
- 计算机网络:网络安全
- 游戏运营必须知道的知识(二),入行必备!!
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第六节)
- 翰林学院python_为什么入门大数据选择Python而不是Java?
- OSS: cURL error: Empty reply from server (52)
- allowMultiQueries 设置为true不生效问题
- 计算机网络—IP头部结构,TCP头部结构,UDP头部结构
- Ubuntu 安装make