ClickHouse 的独特功能
真正的面向列的数据库管理系统
在一个真正的面向列的 DBMS 中,值不存储额外的元数据。这意味着必须支持定长值,以避免在值旁边存储它们的长度“数字”。例如,十亿个 UInt8 类型的值应消耗大约 1 GB 的未压缩空间,否则会严重影响 CPU 使用率。即使在未压缩的情况下,紧凑地存储数据(没有任何“垃圾”)也是至关重要的,因为解压缩速度(CPU 使用率)主要取决于未压缩数据的量。
这与可以单独存储不同列的值的系统形成对比,但由于它们针对其他场景(例如 HBase、Bigtable、Cassandra 和 Hypertable)进行了优化,因此无法有效地处理分析查询。在这些系统中,您将获得大约每秒十万行的吞吐量,而不是每秒数亿行。
最后,ClickHouse 是一个数据库管理系统,而不是单个数据库。它允许在运行时创建表和数据库,加载数据,以及运行查询,而无需重新配置和重启服务器。
数据压缩
一些面向列的 DBMS 不使用数据压缩。但是,数据压缩在实现卓越性能方面起着关键作用。
除了在磁盘空间和 CPU 消耗之间具有不同权衡的有效通用压缩编解码器之外,ClickHouse 还为特定类型的数据提供了专用编解码器,这使 ClickHouse 能够与更小众的数据库(如时间序列数据库)竞争并超越它们。
数据磁盘存储
按主键物理排序数据使得可以以低延迟(少于几十毫秒)提取基于特定值或值范围的数据。一些面向列的 DBMS,例如 SAP HANA 和 Google PowerDrill,只能在 RAM 中工作。这种方法需要比实时分析所需的硬件预算更大。
ClickHouse 旨在在普通硬盘驱动器上工作,这意味着每 GB 数据存储的成本很低,但如果可用,SSD 和额外的 RAM 也将得到充分利用。
多核并行处理
大型查询自然地并行化,利用当前服务器上可用的所有必要资源。
多服务器分布式处理
上面提到的大多数列式 DBMS 都不支持分布式查询处理。
在 ClickHouse 中,数据可以驻留在不同的分片上。每个分片可以是一组用于容错的副本。所有分片都用于并行运行查询,这对用户是透明的。
SQL 支持
ClickHouse 支持SQL 语言,该语言主要与 ANSI SQL 标准兼容。
支持的查询包括 GROUP BY、ORDER BY、FROM 中的子查询、JOIN 子句、IN 运算符、窗口函数和标量子查询。
在编写本文时,尚不支持相关(依赖)子查询,但将来可能会可用。
向量计算引擎
数据不仅按列存储,而且还按向量(列的一部分)处理,这可以实现高 CPU 效率。
实时数据插入
ClickHouse 支持带有主键的表。为了快速执行主键范围的查询,使用合并树增量地对数据进行排序。因此,可以不断地将数据添加到表中。摄取新数据时不会占用锁。
主索引
按主键物理排序数据使得可以以低延迟(少于几十毫秒)提取基于特定值或值范围的数据。
二级索引
与其他数据库管理系统不同,ClickHouse 中的二级索引不指向特定的行或行范围。相反,它们使数据库可以预先知道某些数据部分中的所有行都不符合查询过滤条件,并且根本不读取它们,因此它们被称为数据跳过索引。
适用于在线查询
大多数 OLAP 数据库管理系统不以亚秒级延迟的在线查询为目标。在其他系统中,几十秒甚至几分钟的报表构建时间通常被认为是可接受的。有时甚至需要更长的时间,这迫使系统离线准备报表(提前或通过响应“稍后回来”)。
在 ClickHouse 中,“低延迟”意味着可以在没有延迟的情况下处理查询,并且无需尝试提前准备答案,就在用户界面页面加载的同一时刻。换句话说,在线。
支持近似计算
ClickHouse 提供了多种方法来权衡精度以换取性能
- 用于近似计算不同值的数量、中位数和分位数的聚合函数。
- 基于部分数据 (SAMPLE) 运行查询并获得近似结果。在这种情况下,从磁盘检索的数据量成比例地减少。
- 为有限数量的随机键而不是所有键运行聚合。在数据中键分布的某些条件下,这可以在使用更少资源的同时提供相当准确的结果。
自适应 Join 算法
ClickHouse 自适应地选择如何 JOIN 多个表,优先选择哈希连接算法,并在有多个大型表时回退到合并连接算法。
数据复制和数据完整性支持
ClickHouse 使用异步多主复制。在写入任何可用副本后,所有剩余的副本都会在后台检索其副本。系统在不同的副本上维护相同的数据。大多数故障后的恢复是自动执行的,或者在复杂情况下是半自动执行的。
有关更多信息,请参阅数据复制部分。
基于角色的访问控制
ClickHouse 使用 SQL 查询实现用户帐户管理,并允许基于角色的访问控制配置,类似于在 ANSI SQL 标准和流行的关系数据库管理系统中可以找到的配置。
可以被认为是缺点的功能
- 没有成熟的事务。
- 缺乏以高速率和低延迟修改或删除已插入数据的能力。可以使用批量删除和更新来清理或修改数据,例如,为了遵守 GDPR。
- 稀疏索引使 ClickHouse 对于通过键检索单行的点查询效率不高。