ClickHouse的显著特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshouzhuang/article/details/80256899

ClickHouse的显著特性

1.  真正的面向列的DBMS

在一个真正的面向列的DBMS中,没有任何“垃圾”存储在值中。例如,必须支持定长数值,以避免在数值旁边存储它们的长度“数字”。例如,十亿个UInt8类型的值实际上应该消耗大约1GB的未压缩磁盘空间,否则这将强烈影响CPU的使用。由于解压缩的速度(CPU使用率)主要取决于未压缩的数据量,所以即使在未压缩的情况下,紧凑地存储数据(没有任何“垃圾”)也是非常重要的。

因为有些系统可以单独存储单独列的值,但由于其他场景的优化,无法有效处理分析查询,例如HBase,BigTable,Cassandra和HyperTable。在这些系统中,每秒钟可以获得大约十万行的吞吐量,但是每秒不会达到数亿行。

另外,ClickHouse是一个DBMS,而不是一个单一的数据库。ClickHouse允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器。

 

2.  数据压缩

一些面向列的DBMS(InfiniDBCE和MonetDB)不使用数据压缩。但是,数据压缩确实提高了性能。

 

3.  磁盘存储的数据

许多面向列的DBMS(SAPHANA和GooglePowerDrill)只能在内存中工作。但即使在数千台服务器上,内存也太小,无法在Yandex.Metrica中存储所有浏览量和会话。

 

4.  多核并行处理

多核多节点并行化大型查询。

 

5.  在多个服务器上分布式处理

上面列出的列式DBMS几乎都不支持分布式处理。在ClickHouse中,数据可以驻留在不同的分片上。每个分片可以是用于容错的一组副本。查询在所有分片上并行处理。这对用户来说是透明的。

 

6.  SQL支持

如果你熟悉标准的SQL,那么我们就不能真正谈论SQL的支持了。所有的函数都有不同的名称。但是,这是一种基于SQL的声明性查询语言,在许多情况下不能与SQL区分开来。支持JOINs。在FROM、IN和JOIN子句中支持子查询,以及标量子查询。不支持从属子查询。不支持关联子查询。

 

7.  向量化引擎

数据不仅按列存储,而且由矢量(列的部分)进行处理。这使我们能够实现高的CPU性能。

 

8.  实时数据更新

ClickHouse支持主键表。为了快速执行对主键范围的查询,数据使用合并树(MergeTree)进行递增排序。由于这个原因,数据可以不断地添加到表中。添加数据时无锁处理。

 

9.  索引

带有主键可以在特定的时间范围内为特定客户端(比如Yandex.Metrica跟踪标签)抽取数据,并且延迟时间小于几十毫秒。

 

10.   支持在线查询

这让我们使用该系统作为Web界面的后端。低延迟意味着可以无延迟地实时处理查询,而Yandex.Metrica界面页面加载使用此功能(在线模式)。

11.         支持近似计算

1. 系统包含用于近似计算各种值,中位数和分位数的聚合函数。

2. 支持基于部分(样本)数据运行查询并获得近似结果。在这种情况下,从磁盘检比较少的数据。

3. 支持为有限数量的随机keys(而不是所有keys)运行聚合。在数据中key分发的特定条件下,这提供了相对准确的结果,同时使用较少的资源。

 

12.         数据复制和对数据完整性的支持

使用异步多主复制。写入任何可用的副本后,数据将分发到所有剩余的副本。系统在不同的副本上保持相同的数据。数据在失败后自动恢复,或对复杂情况使用“按钮”。有关数据复制,后续抽个专题给大家介绍。


没有更多推荐了,返回首页