列式存储
如果想查询的更快,最有效的方式就是减少数据的扫描范围和数据传输时的大小。
数据压缩
ClickHouse默认使用LZ4压缩算法,数据总体的压缩比可以达到8:1。
向量化执行引擎
向量化执行可以简单理解成,一项消除程序中循环的优化。比如为了割N田稻子,非向量化执行的方式是用一台割稻机割N次稻子,而向量化执行是用N台割稻机割一次,为了实现向量化执行,需要利用CPU的SIMD指令。
关系模型
ClickHouse使用关系模型描述数据,并提供了数据库、表、视图和函数,在SQL解析方面,大小写敏感的。
表引擎
ClickHouse支持MergeTree、内存、文件等20多种表引擎,但是通常使用MergeTree。
多线程和分布式
分布式领域中,计算移动比数据移动更加划算。ClickHouse在数据存储方面,既支持分区也支持分片。
多主架构
传统的像HBase、ElasticSearch都是基于Master-Slave架构,而ClickHouse则是采用Multi-Master多主架构,集群中各节点是对等的,天然规避了单点故障的问题。
在线查询
SparkSQL和Hive无法保证90%的查询能在1s返回,而商用的Vertica价格太昂贵,ElasticSearch搜索引擎在亿级数据聚合查询时则跟不上。
数据分片和查询
数据分片是将数据横向切分,根据数据Hash到不同的节点存储,ClickHouse提供了本地表和分布式表的概念,一张本地表就是一份数据的分片,分布式表不存储任何数据,只是本地表的访问代理,类似于分库的中间件,借助于分布式表,客户端能够代理访问多个分片,而不需要关心各个本地分片的细节。
优化实现
根据不同的应用场景,使用不同的实现方式,如去重计数函数uniqCombined(),根据不同的数据量选择不同的实现,当数据量小时使用Array存储,当数据量中等时使用HashSet存储,当数据量很大时使用HyperLogLog算法实现。
数据的删除和修改
ClickHouse提供了delete和update操作,这类操作被称为Mutation操作,本质上是Alter的变种,这类操作不是常规意义上的update和delete,mutation操作是一个异步的后台过程,提交之后会立即返回,但是具体逻辑是在后续进行执行的。
ALTER TABLE TEST1 DELETE WHERE ID = “111”
ClickHouse原理解析与应用实践