ClickHouse

什么是 ClickHouse?优势是什么,为什么选择 CH?

全称:Click Stream Data WareHouse,简称 ClickHouse,是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

ClickHouse 的核心特性

1. 完备的管理功能

ClickHouse 拥有完备的管理功能,所以它称得上是一个 DBMS(Database Management System,数据库管理系统),而不仅是一个数据库。

  • DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务
  • DML(数据操作语言):可以动态查询、插入、修改或删除数据
  • 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性
  • 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求
  • 分布式管理:提供集群模式,能够自动管理多个数据库节点

2. 列式存储与数据压缩

列式存储:想让查询变得更快,最简单且有效的方法是减少数据扫描范围和数据传输时的大小。假设一张数据表 A 拥有 50 个字段 A1~A50,以及 100 行数据。现在需要查询前 5 个字段并进行数据分析,则可以用如下 SQL 实现:

1
SELECT A1, A2, A3, A4, A5 FROM A

如果数据按行存储,数据库首先会逐行扫描,并获取每行数据的所有 50 个字段,再从每一行数据中返回 A1~A5 这 5 个字段。尽管只需要前面的 5 个字段,但由于数据是按行进行组织的,实际上还是扫描了所有的字段。

如果数据按列存储,就不会发生这样的问题。由于数据按列组织,数据库可以直接获取 A1~A5 这 5 列的数据,从而避免了多余的数据扫描。

数据压缩

压缩的本质:按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换。

1
2
压缩前:abcdefghi_bcdefghi
压缩后:abcdefghi_(9,8)

从下划线开始向前移动 9 个字节,会匹配到 8 个字节长度的重复项。

属于同一个列字段的数据,因为它们拥有相同的数据类型和现实语义,重复项的可能性自然就更高。

向量化执行:消除程序中循环的优化。利用 CPU 的 SIMD 指令,用单条指令操作多条数据。

官网:https://clickhouse.tech/docs/zh/