跳到主要内容
跳到主要内容
编辑此页

什么是 ClickHouse?

ClickHouse® 是一个用于在线分析处理 (OLAP) 的高性能、面向列的 SQL 数据库管理系统 (DBMS)。它既可以作为 开源软件 提供,也可以作为 云服务 提供。

什么是分析?

分析,也称为 OLAP(在线分析处理),指的是对海量数据集进行复杂计算(例如,聚合、字符串处理、算术运算)的 SQL 查询。

与每次查询只读取和写入少量行,因此在毫秒内完成的事务性查询(或 OLTP,在线事务处理)不同,分析查询通常处理数十亿和数万亿行。

在许多使用案例中,分析查询必须是“实时”的,即在不到一秒的时间内返回结果。

面向行的存储 vs. 面向列的存储

只有采用正确的数据“方向”才能实现这种性能水平。

数据库将数据存储为面向行或面向列

在面向行的数据库中,连续的表行一个接一个地顺序存储。这种布局允许快速检索行,因为每一行的列值都存储在一起。

ClickHouse 是一个面向列的数据库。在这样的系统中,表存储为列的集合,即每个列的值一个接一个地顺序存储。这种布局使得恢复单行变得更加困难(因为现在行值之间存在间隔),但是列操作(如过滤器或聚合)比面向行的数据库快得多。

通过一个在 真实世界的匿名网络分析数据 的 1 亿行上运行的示例查询,可以最好地解释这种差异

SELECT MobilePhoneModel, COUNT() AS c 
FROM metrica.hits
WHERE
RegionID = 229
AND EventDate >= '2013-07-01'
AND EventDate <= '2013-07-31'
AND MobilePhone != 0
AND MobilePhoneModel not in ['', 'iPad']
GROUP BY MobilePhoneModel
ORDER BY c DESC
LIMIT 8;

您可以在 ClickHouse SQL Playground 上运行此查询,该查询从 超过 100 个 现有列中仅选择和过滤了几个列,并在毫秒内返回结果

Row-oriented

正如您在上面图表的统计部分中看到的,该查询在 92 毫秒内处理了 1 亿行,吞吐量约为每秒 3 亿行或略低于 7 GB。

面向行的 DBMS

在面向行的数据库中,即使上面的查询只处理了现有列中的几个,系统仍然需要从磁盘加载其他现有列的数据到内存中。原因是数据以称为 (通常是固定大小,例如 4 KB 或 8 KB)的块存储在磁盘上。块是从磁盘读取到内存的最小数据单元。当应用程序或数据库请求数据时,操作系统的磁盘 I/O 子系统从磁盘读取所需的块。即使只需要块的一部分,也会将整个块读入内存(这是由于磁盘和文件系统设计)。

Row-oriented

面向列的 DBMS

由于每个列的值在磁盘上一个接一个地顺序存储,因此当运行上面的查询时,不会加载不必要的数据。由于从磁盘到内存的块式存储和传输与分析查询的数据访问模式对齐,因此只有查询所需的列才从磁盘读取,从而避免了对未使用数据的不必要的 I/O。与读取整个行(包括不相关的列)的基于行的存储相比,这快得多

Column-oriented

数据复制和完整性

ClickHouse 使用异步多主复制方案来确保数据冗余地存储在多个节点上。在写入任何可用副本后,所有剩余副本在后台检索其副本。系统在不同的副本上维护相同的数据。大多数故障后的恢复是自动执行的,或者在复杂情况下是半自动执行的。

基于角色的访问控制

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

SQL 支持

ClickHouse 支持 基于 SQL 的声明式查询语言,在许多情况下,该语言与 ANSI SQL 标准相同。支持的查询子句包括 GROUP BYORDER BYFROM 中的子查询、JOIN 子句、IN 运算符、窗口函数 和标量子查询。

近似计算

ClickHouse 提供了在精度和性能之间进行权衡的方法。例如,它的一些聚合函数近似计算不同的值计数、中位数和分位数。此外,可以在数据样本上运行查询以快速计算近似结果。最后,聚合可以对有限数量的键而不是所有键运行。根据键的分布倾斜程度,这可以提供一个合理准确的结果,该结果使用的资源比精确计算少得多。

自适应连接算法

ClickHouse 自适应地选择连接算法,它从快速哈希连接开始,如果有多于一个大型表,则回退到合并连接。

卓越的查询性能

ClickHouse 以其极快的查询性能而闻名。要了解为什么 ClickHouse 如此之快,请参阅 为什么 ClickHouse 如此之快? 指南。