前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系

正文

在这里插入图片描述

ClickHouse 是什么?

在这里插入图片描述

ClickHouse 是一个面向列的数据库管理系统(DBMS),用于查询的在线分析处理(OLAP)。

ClickHouse 简写是 CK。

由号称“俄罗斯Google”的Yandex开发而来,在2016年开源。

ClickHouse 和 Apache Kylin 可以称为 OLAP 领域的双子星。
ClickHouse 是 ROLAP 的 NO.1,而 Apache Kylin 是 MOLAP 的 NO.1。

ClickHouse 有哪些特性?

官方版(参考 ClickHouse 官方文档

1. 数据压缩

一些面向列的数据库管理系统不使用数据压缩。然而,数据压缩确实在实现卓越性能方面发挥着关键作用。

除了在磁盘空间和CPU消耗之间做出不同权衡的高效通用压缩编解码器外,ClickHouse还为特定类型的数据提供专门的编解码器,这使得ClickHouse能够与时间序列数据库等更利基数据库竞争并优于它们。

ClickHouse 是列存数据库,故天然支持面向列的数据压缩,不同列针对不同的数据类型可以采取不同的压缩算法,这都是常规的操作~ 其他 OLAP 引擎都是这么干的

关于列式存储请参考我的博客——列式存储和行式存储有什么区别?

2. 磁盘存储数据

按主键对数据进行物理排序,可以以不到几十毫秒的延迟提取其特定值或值范围的数据。一些面向列的数据库管理系统(如SAP HANA和Google PowerDrill)只能在RAM中工作。这种方法鼓励分配比实时分析所需的更大的硬件预算。

ClickHouse旨在用于常规硬盘驱动器,这意味着每GB的数据存储成本较低,但如果可用,SSD和额外的RAM也得到充分使用。

简单来说就是内存不够磁盘来凑,这个也不新鲜,Spark SQL 也属于 OLAP 引擎,也支持内存磁盘的弹性存储。

3. 多核并行处理

大型查询自然并行化,占用当前服务器上可用的所有必要资源。

ClickHouse 本质上属于 MPP 架构,MPP 架构是基于 SMP 架构的,SMP 架构决定了多核并行处理的能力。

关于 SMP 和 MPP 请参考我的博客从系统架构角度出发,服务器该如何分类?MPP 是什么?

4. 多台服务器上的分布式处理

在ClickHouse中,数据可以驻留在不同的分片上。每个分片可以是一组用于容错的复制品。所有分片都用于并行运行查询,对用户透明。

ClickHouse 是 MPP 架构,故天然支持大规模数据的并行分布式处理。

5. SQL 支持

ClickHouse支持基于SQL的声明式查询语言,在许多情况下与ANSI SQL标准相同。

支持的查询包括GROUP BY、ORDER BY、FROM中的子查询、JOIN子句、IN运算符和标量子查询。

编写时不支持相关(依赖)子查询和窗口函数,但将来可能会可用。

基本上所有的 OLAP 引擎都支持 SQL,这没啥新鲜的。

6. 向量化计算引擎

数据不仅由列存储,还由向量(列的一部分)处理,从而实现较高的CPU效率。

建议看看我的这篇博客——即时编译器的向量化优化是什么?SIMD 到底是什么?

7. 实时数据更新

ClickHouse支持带有主键的表。为了快速对主键的范围执行查询,使用 Merge Tree 对数据进行增量排序。因此,数据可以不断添加到表中。摄入新数据时是无锁。

MergeTree 来源于 MySQL 里面的 MyISAM,专栏后面会重点介绍 CK 中 MergeTree 的实现原理。

8. 主要索引

通过主键物理排序数据可以以低延迟(不到几十毫秒)为其特定值或值范围提取数据。

类似 MySQL 里面的主键,这个要习惯,因为 CK 就起源于 MySQL 中的 MyISAM,早期的很多特性都比较类似于 MySQL。

9. 次要索引

与其他数据库管理系统不同,ClickHouse中的辅助索引不指向特定的行或行范围。相反,它们允许数据库提前知道某些数据部分的所有行与查询过滤条件不匹配,并且根本不读取它们,因此它们被称为数据跳过索引。

10. 适合在线查询

大多数OLAP数据库管理系统不针对具有亚秒延迟的在线查询。在替代系统中,报告构建时间为数十秒甚至几分钟,通常被认为是可以接受的。有时,离线编写报告需要更多(提前或以“稍后回来”回应)。

在ClickHouse中,低延迟意味着可以在用户界面页面加载的同时,立即处理查询,而无需尝试提前准备答案。换句话说,在线查询。

类似功能的 OLAP 引擎还是挺多的,不过 CK 还是 ROLAP 中的 NO.1

11. 支持近似计算

ClickHouse提供了各种以准确性换取性能的方法用于近似计算不同值、中位数和分位数的聚合函数。
根据数据的一部分(样本)运行查询并获得近似结果。在这种情况下,从磁盘检索的数据比例较低。
为数量有限的随机密钥运行聚合,而不是为所有密钥运行聚合。在数据中密钥分发的某些条件下,这在使用更少资源的情况下提供了相当准确的结果。

12. 自适应 Join 算法

ClickHouse自适应地选择如何加入多个表,更倾向于 hash join 算法,如果有一个以上的大表,则返回 merge join 算法。

13. 数据复制和数据完整性支持

ClickHouse使用异步多主复制。写入任何可用的副本后,所有剩余的副本都会在后台检索其副本。该系统在不同副本上维护相同的数据。大多数故障后自动恢复,或在复杂情况下半自动进行。

14. 基于角色的访问控制

ClickHouse使用SQL查询实现用户帐户管理,并允许基于角色的访问控制配置,类似于ANSI SQL标准和流行的关系数据库管理系统。

15. 官方认证的简直就是缺点的特性

  1. 不支持完整的事务。
  2. 缺乏以高速率和低延迟修改或删除已插入的数据的能力。支持批量删除和更新可用于清理或修改数据,例如,遵守GDPR
  3. 稀疏索引使ClickHouse对通过 key 检索单行的点查询不那么有效。

个人版

一、速度快

CK 的速度确实很快,这里有一张表大家可以直观感受一下:(CK 在大宽表分析性能表现优异)
在这里插入图片描述

二、极致化

CK 一致追寻着极致的性能,每当市面上出现了一个新的算法,CK 总是会先尝试看看,当然也多亏CK 的背后有一个强大的爸爸——Yandex,因为数据多所以尝试的机会就很多。

三、文艺范

不同于其他的大数据框架,CK 是用 C++编写的(大部分的大数据框架是 Java 或者 Scala 编写的),
此外,CK 自己实现了存储功能,完全没 Hadoop 的事儿,不像其他框架基本上一开源都往 HDFS 上靠。所以说,文艺范十足!

四、手动挡

CK 要想达到极致的性能,引擎的选择是关键!这里真的和 MySQL 超级像。。

上一篇 下一篇