作为这几年热度颇高的一款开源产品,ClickHouse在国内的互联网大厂也陆续有被使用。在大数据开发学习阶段,也不妨多了解一下ClickHouse,下面我们主要来对ClickHouse架构做个简单的介绍。
ClickHouse技术背景
ClickHouse是基于MPP架构的分布式ROLAP(Relational OLAP)分析引擎。采用C++编写,自成一套体系,对第三方工具依赖少。支持较完整的DDL和DML,大部分操作可以通过命令行结合SQL就可以完成;分布式集群依赖Zookeper管理,单节点不用依赖Zookeper,大部分配置需要通过修改配置文件完成。
ClickHouse各节点职责对等,各自负责一部分数据的处理(shared nothing),开发了向量化执行引擎,利用日志合并树、稀疏索引与CPU的SIMD(单指令多数据,Single Instruction Multiple Data)等特性,充分发挥硬件优势,达到高效计算的目的。因此当ClickHouse面对大数据量计算的场景,通常能达到CPU性能的极限。
ClickHouse的存储结构
ClickHouse在创建表结构的时候一般要求用户指定分区列。采用数据压缩和纯粹的列式存储技术,使用Mergetree对每一列单独存储并压缩分块。
同时数据总会以片段的形式写入磁盘,当满足一定条件后ClickHouse会通过后台线程定期合并这些数据片段。
当数据量持续增大,ClickHouse,会针对分区目录的数据进行合并,提高数据扫描的效率。
同时ClickHouse针对每个数据块,提供稀疏索引。在处理查询请求的时候,就能够利用稀疏索引,减少数据扫描起到加速作用。
ClickHouse优化方法
MPP架构的系统最常见的优化方式就是分库分表,类似的,ClickHouse最常见的优化方式包括设置分区和分片,此外ClickHouse也包括一些特有的引擎。总结归纳下来,主要优化方法包括:
用平表结构,代替多表Join,避免昂贵的Join操作和数据混洗;
设置合理的分区键,排序键,二级索引,减少数据扫描;
搭建ClickHouse分布式集群增加分片和副本,添加计算资源;
结合物化视图,适当采用SummingMergetree,AggregateMergetree等以预计算为核心的引擎。
随着后面性能和并发的要求越来越高,对机器的资源消耗也越来越大。在ClickHouse的官方网站文档中建议ClickHouse的并发数不超过100,当并发要求高,为减少ClickHouse的资源消耗,可以结合ClickHouse的一些特殊引擎进行优化。
特殊引擎中最常用的是SummingMergetree和AggregateMergetree,这两种数据结构是从Mergetree中派生而来,本质是通过预计算将需要查询的数据提前算出来,保存在ClickHouse中,这样查询的时候就能进一步减少资源消耗。
ClickHouse优势场景
ClickHouse因为采用MPP架构现场计算能力很强,当查询请求比较灵活,或者有明细查询需求,并发量不大的时候比较适用。
具体场景包括:非常多列且where条件随意组合的用户标签筛选,并发量不大的复杂即席查询等。如果数据量和访问量较大,需要部署分布式ClickHouse集群,这时候对运维的挑战会比较高。
关于大数据开发,OLAP分析引擎ClickHouse架构解析,以上就为大家做了简单的介绍了。ClickHouse作为一款比较新的OLAP引擎,根基不算深厚,但是性能强劲还是没话说的。