ClickHouse是一个真真正正的列式数据库,同时也是一个完美的数据库管理系统;因为它允许在运行的时候创建数据库和表,同时加载数据和运行查询,而且无需重新配置和重启服务。
(资料图片仅供参考)
目前市面上的列式存储数据库也有很多,比如Hbase、BigTable、Cassandra等,拿Hbase来说,Hbase存储数据的同时,每个Cell都存储了一份rowkey、columnFamily、timestamp的数据,导致了吞吐量的显著差异:
ClickHouse | Hbase | |
---|---|---|
吞吐量 | 几亿行/s | 数十万行/s |
在一些列式数据库管理系统中(例如:InfiniDB CE 和 MonetDB) 并没有使用数据压缩。但是, 若想达到比较优异的性能,数据压缩确实起到了至关重要的作用;
支持普通硬盘存储很多列式数据库只支持在内存中工作,如Google PowerDrill、SAP HANA等,但是ClickHouse支持廉价的传统磁盘存储(TIDB只对SSD固态硬盘比较友好),在底层磁盘物理存储的方式上按照primary-key进行排序,可以实现ms级别的按照特定的范围或者单个primarykey进行快速查询,而且提供了每GB更低的存储成本,如果可以使用SSD和内存,那么它也会很好的利用资源,实现更好的服务效果。
支持多核并行处理ClickHouse可以将数据存储在不同的shard(分片)上,每一个shard都由一组容错的replica组成,这个其实GreenPlum也可以做到,TIDB也可以做到,查询操作可以被分布到每个shard中进行处理,对用户来说是透明的,就好像Hbase的查询实际上是被分布到了不同的region中通过regionscanner进行处理。
支持SQLHbase原生不支持SQL,需要借助Kylin或者Pheonix,因为系统组件越多稳定性越低,维护成本越高;
ClickHouse支持SQL查询,GROUP BY,JOIN ,IN,ORDER BY等;
ClickHouse不支持窗口函数和相关的子查询,所以一些逻辑需要开发者另想办法;
支持矢量引擎ClickHouse不仅支持列存储,支持向量引擎,当查询大量row的时候,按列的存储顺序往下查找,大量减少了CPU的等待时间,从而高效实用CPU资源;
支持实时数据更新ClickHouse在使用Merge tree引擎的时候,插入数据的时候按照数据的primary-key进行递增排序进行磁盘存储,所以数据能被持续的添加到表中,而且在插入新数据的时候是没有lock的,减少了sycn校验的时间。
支持索引ClickHouse支持创建主键primarykey,这将帮助ClickHouse在几十ms的情况下对特定的数据范围进行查询并展示到页面;
支持在线查询支持近似计算ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法:
用于近似计算的各类聚合函数,如:distinct values, medians, quantiles基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。支持数据辅助和数据完整性ClickHouse实用async的多主复制技术,当数据被写入任何一个可用的副本后,系统会在后台将数据分发给其它的副本,以保证系统在不同副本上保持相同的数据;
ClickHouse提供了一个与其他列式数据库的基准测试,这个基准测试大多数是在单台服务器进行测试,该服务器的配置是:
双CPU(Intel(R) Xeon(R) CPU E5-2650 v2@2.60GHZ)内存128GB在8个6TB SATA硬盘上安装MD RAID-5文件系统为Ext4这个测试中,有些结果可能是过时的,如图:
X 关闭