ClickHouse-特性
1 完美的列式数据库存储系统
ClickHouse是一个真真正正的列式数据库,同时也是一个完美的数据库管理系统;因为它允许在运行的时候创建数据库和表,同时加载数据和运行查询,而且无需重新配置和重启服务。
一个真正的列式存储数据库是不应该存储数据本身以外的数据的
,目前市面上的列式存储数据库也有很多,比如Hbase、HrperTable、BigTable、Cassandra等,拿Hbase来说,Hbase存储数据的同时,每个Cell都存储了一份rowkey、columnFamily、timestamp的数据,导致了吞吐量的显著差异:
ClickHouse | Hbase | |
---|---|---|
吞吐量 | 几亿行/s | 数十万行/s |
2 数据压缩性能完美
在一些列式数据库管理系统中(例如:InfiniDB CE 和 MonetDB) 并没有使用数据压缩。但是, 若想达到比较优异的性能,数据压缩确实起到了至关重要的作用;
3 数据的磁盘存储
很多列式数据库只支持在内存中工作,如Google PowerDrill、SAP HANA等,但是ClickHouse支持廉价的传统磁盘存储(TIDB只对SSD固态硬盘比较友好),
在底层磁盘物理存储的方式上按照primary-key进行排序
,可以实现ms级别的按照特定的范围或者单个primarykey进行快速查询,而且提供了每GB更低的存储成本,如果可以使用SSD和内存,那么它也会很好的利用资源,实现更好的服务效果。
4 MPP架构
市面上MPP架构的数据分析产品很多,TIDB、GreenPlum等等,MPP属于多核心并行处理架构,可以利用服务器上所有可用的资源,以最自然的方式处理大规模的查询。
5 多服务器分布式处理
ClickHouse可以将数据存储在不同的shard上,每一个shard都由一组容错的replica组成,这个其实GreenPlum也可以做到,TIDB也可以做到,
查询操作可以被分布到每个shard中进行处理,对用户来说是透明的,就好像Hbase的查询实际上是被分布到了不同的region中通过regionscanner进行处理。
6 完美的SQL支持
Hbase原生不支持SQL,需要借助Kylin或者Pheonix,有点LJ,因为系统组件越多稳定性越低,维护成本越高;
ClickHouse支持SQL查询,GROUP BY,JOIN ,IN,ORDER BY等;
ClickHouse不支持窗口函数和相关的子查询,所以一些逻辑需要开发者另想办法;
7 向量引擎
ClickHouse不仅支持列存储,支持向量引擎,当查询大量row的时候,按列的存储顺序往下查找,大量减少了CPU的等待时间,从而高效实用CPU资源;
8 主键索引支持(primary key)
ClickHouse支持创建主键primarykey,这将帮助ClickHouse在几十ms的情况下对特定的数据范围进行查询并展示到页面;
9 支持实时更新数据
ClickHouse在使用
Merge tree
引擎的时候,插入数据的时候按照数据的primary-key进行递增排序进行磁盘存储,所以数据能被持续的添加到表中,而且在插入新数据的时候是没有lock的,减少了sycn校验的时间。
9 二级索引(secondary-indexes)
Clickhouse与Hbase一样支持
二级索引
,同样是倒排索引,构建索引映射,但是与Hbase刚好实现的效果相反;Hbase: 二级索引 -> rowkey[range],便于找到指定或者限定范围的rows;
ClickHouse: 二级索引 -> 指向不需要查询的数据集,让数据库在查询之前就知道需要跳跃哪些数据,所以clickhouse的二级索引又叫做 data-skip-index,当查询的时候直接跳过无关的数据集,大大提升查询效率,特别是列式存储时查询大量的行的时候,省去了全表扫描
10 支持近似计算
ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法:
- 用于近似计算的各类聚合函数,如:distinct values, medians, quantiles
- 基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。
- 不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。
11 支持数据的复制和数据完整性
ClickHouse实用async的多主复制技术,当数据被写入任何一个可用的副本后,系统会在后台将数据分发给其它的副本,以保证系统在不同副本上保持相同的数据;
并且在大多数情况下ClickHouse能够在故障之后自动回复,在少数情况复杂情况下需要手动恢复。