本文通过分析总结几篇文章来看目前工业界可能偏好的ClickHouse解决方案。学习目的是:大致知道其应用领域,技术特点和未来方向,看看目前工作中是否可以用到,或者当以后选型时候能够做到心里有数。
ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。
目前国内社区火热,各个大厂纷纷跟进大规模使用:
产品需求
开源MPP OLAP引擎 - (性能、特点、优质)
ClickHouse从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等丰富功能。以上功能共同为ClickHouse极速的分析性能奠定了基础。
从用户角度来说 ,ClickHouse就是实现了“多快好省,独立”。
下面我们逐一介绍。
“多”这个特点具体是由如下具体技术实现来完成的。
ClickHouse支持单机模式,也支持分布式集群模式。在分布式模式下,ClickHouse会将数据分为多个分片,并且分布到不同节点上。不同的分片策略在应对不同的SQL Pattern时,各有优势。ClickHouse提供了丰富的sharding策略,让业务可以根据实际需求选用。
sharding机制使得ClickHouse可以横向线性拓展,构建大规模分布式集群,从而具备处理海量数据的能力。
ClickHouse支持PARTITION BY子句,在建表时可以指定按照任意合法表达式进行数据分区操作。
ClickHouse采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类LSM tree的结构,ClickHouse在数据导入时全部是顺序append写,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在HDD上也有着优异的写入性能。
ClickHouse 使用异步的多主复制技术。当数据被写入到任何一个可用副本后,系统在后台将数据分发给其他副本。
“ 快”这个特点具体是由如下具体技术实现来完成的。
ClickHouse支持主键索引。通过对主键索引进行二分查找,能够直接定位到对应的index granularity,避免了全表扫描从而加速查询。ClickHouse的主键索引并不用于去重,即便primary key相同的行,也可以同时存在于数据库中。
ClickHouse支持对任意列创建任意数量的稀疏索引。之所以叫稀疏索引,是因为它本质上是对一个完整index granularity(默认8192行)的统计信息,并不会具体记录每一行在文件中的位置。
ClcikHouse 数据是以增量的方式有序的存储在 MergeTree 中。因此,数据可以持续不断高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
ClickHouse 提供各种各样在允许牺牲精度的情况下对查询进行加速的方法
ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity,然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条Query就能利用整机所有CPU。极致的并行处理能力,极大的降低了查询延时。
ClickHouse不仅将数据按列存储,而且按列进行计算。ClickHouse实现了向量执行引擎(Vectorized execution engine),对内存中的列式数据,一个batch调用一次SIMD指令(而非每一行调用一次),不仅减少了函数调用次数、降低了cache miss,而且可以充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。向量执行引擎,通常能够带来数倍的性能提升。
除了优秀的单机并行处理能力,ClickHouse还提供了可线性拓展的分布式计算能力。ClickHouse会自动将查询拆解为多个task下发到集群中,然后进行多机并行处理,最后把结果汇聚到一起。
数据分片,让ClickHouse可以充分利用整个集群的大规模并行计算能力,快速返回查询结果。
“ 好”这个特点具体是由如下具体技术实现来完成的。
ClickHouse还提供了array、json、tuple、set等复合数据类型,支持业务schema的灵活变更。
ClickHouse通过主备复制提供了高可用能力,主备架构下支持无缝升级等运维操作。而且相比于其他系统它的实现有着自己的特色:
1)默认配置下,任何副本都处于active模式,可以对外提供查询服务;
2)可以任意配置副本个数,副本数量可以从0个到任意多个;
3)不同shard可以配置不提供副本个数,用于解决单个shard的查询热点问题;
ClickHouse 使用异步的多住复制技术。当数据被写入到任何一个可用副本后,系统在后台将数据分发给其他副本。
- 支持类SQL查询,比ES的DSL更加简单,学习成本更低。
- 支持繁多库函数(例如IP转化,URL分析等,预估计算/HyperLoglog等)
- 支持数据库异地复制部署
相比ES,ClickHouse稳定性更高,运维成本更低。
“ 省”这个特点具体是由如下具体技术实现来完成的。
在分析场景中,数据的价值随着时间流逝而不断降低,多数业务出于成本考虑只会保留最近几个月的数据,ClickHouse通过TTL提供了数据生命周期管理的能力。
在分析场景中,删除、更新操作并不是核心需求。ClickHouse没有直接支持delete、update操作,而是变相支持了mutation操作。目前主要限制为删除、更新操作为异步操作,需要后台compation之后才能生效。
ClickHouse实现了Expression级别的runtime codegen,动态地根据当前SQL直接生成代码,然后编译执行。不仅消除了大量的虚函数调用(即图中多个function pointer的调用),而且由于在运行时表达式的参数类型、个数等都是已知的,也消除了不必要的if-else分支判断。
基于Hadoop而衍生的Hive、Pig、Spark、Presto、Impala等一系列组件共同构成了Hadoop生态体系。Hadoop生态为今天的大数据领域提供着稳定可靠的数据服务。
Hadoop生态体系解决了大数据界的大部分问题,当然其也存在缺点。Hadoop体系的最大短板在于数据处理时效性。基于Hadoop生态的数据处理场景大部分对时效要求不高,按照传统的做法一般是 T + 1 的数据时效。即 Trade + 1,数据产出在交易日 + 1 天。
ClickHouse的产生就是为了解决大数据量处理的时效性。完全独立于Hadoop生态。
ClickHouse会向两个方向发展。
1 云计算数据库:
Yandex希望通过ClickHouse促进公司云计算数据库的发展,包括用户可以通过云服务的方式,使用ClickHouse,开源是走向市场的第一步。
2. 加强SQL兼容性。
为了支持更多的企业用户,目前的查询虽然采用非常近似的SQL语言,但是还有很多地方需要改进,包括和一些商业软件(例如Tableau,Pentaho)的集成无缝使用。
ClickHouse 详解
最快开源 OLAP 引擎! ClickHouse 在头条的技术演进
彪悍开源的分析数据库-ClickHouse
ClickHouse深度揭秘
干货 | 每天十亿级数据更新,秒出查询结果,ClickHouse在携程酒店的应用
从携程性能测试case中重新认识clickhouse
干货 | 携程ClickHouse日志分析实践
★★★★★★关于生活和技术的思考★★★★★★
微信公众账号:罗西的思考
如果您想及时得到个人撰写文章的消息推送,或者想看看个人推荐的技术资料,可以扫描下面二维码(或者长按识别二维码)关注个人公众号)。