ClickHouse

关注
义项:列式数据库管理系统
ClickHouse

ClickHouse(ClickHouse)是面向联机分析处理(OLAP)的列式数据库管理系统,既有开源软件版本,也提供云服务[1]。它由俄罗斯互联网公司Yandex为网络分析服务Yandex.Metrica开发,2016年6月以开源方式发布[2]。ClickHouse按列而非按行组织数据,配合向量化执行与高效压缩,可在数秒甚至亚秒内对数十亿行数据完成聚合查询,被广泛用于流量分析、监控与数据仓库等场景[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

ClickHouse是一个用于联机分析处理(OLAP)的列式数据库管理系统,既提供开源软件版本,也提供云服务[1]。它属于数据库管理系统而非单一数据库:用户可以在运行期间创建库表、写入数据并执行查询,无需重启服务[4]。

与面向事务处理的系统不同,OLAP场景下的查询往往要扫描数十亿甚至数万亿行,并包含聚合、字符串处理与算术运算,很多时候要求在1秒内返回结果[1]。ClickHouse的设计目标正是让这类分析查询在持续写入的原始数据上直接完成,而不必预先聚合[5]。

原理

数据库的数据组织方式分为行式与列式两种。行式系统把同一行的各列值连续存放,检索整行很快;ClickHouse采用的列式存储把每一列的值连续存放,还原单行较困难,但过滤、聚合等按列进行的操作明显更快[1]。其收益来自磁盘按块读取的机制:行式系统即使只用到少数几列,也要把整行数据从磁盘读入内存,而列式系统只需读取查询涉及的列,避免了对未使用数据的输入输出[6]。

同一列的数据类型相同、取值接近,因此压缩率较高,通常可压缩到行式存储的数分之一,这进一步缩小了读取时的数据体积[7]。为充分利用CPU,ClickHouse把数据按向量(列的一部分)成批处理,并借助SIMD指令在单条指令中同时处理多个值,从而实现向量化执行[3]。

查询执行时,SQL会被转换为由物理算子组成的有向图,并按可配置的最大工作线程数(默认为核心数)展开为彼此独立的执行通道,各通道处理互不重叠的数据范围,以尽量推迟合并[8]。

存储层面,数据以增量方式有序写入MergeTree系列表引擎,并配合稀疏索引,使按主键或范围的查找能在较短时间内完成[4]。分布式部署时,数据分布在不同分片上,每个分片可由一组副本构成,查询在各分片上并行执行,对用户是透明的[9]。

发展历程

ClickHouse的构想源于Yandex内部的实时网站分析需求。2008年前后出现了最早的代码提交,2009年作为实验性项目启动,用于验证能否在不做预聚合的情况下,对持续实时写入的原始数据即时生成分析报表[10]。研发团队当时评估过多种已有的列式方案,认为都无法满足需求,因而决定自行开发[5]。

2012年,ClickHouse首次投入生产环境使用;2014年Yandex.Metrica 2.0发布,提供了自定义报表界面,并以ClickHouse存储和处理数据[9]。此后该系统在Yandex内部多个部门推广开来,涉及搜索、电商、广告、个性化新闻与基础设施等方向[10]。

2016年6月,Yandex决定以开源方式发布ClickHouse,采用Apache 2.0许可[5]。开发团队认为这项技术只用于公司内部太过可惜,开源后其使用范围迅速扩展到全球数千家公司[2]。

2021年9月,开发团队从Yandex迁出,成立专注于该项目的公司ClickHouse, Inc.,由Alexey Milovidov担任首席技术官,Yury Izrailevsky负责产品与工程,Aaron Katz出任首席执行官,公司同时获得由Index Ventures和Benchmark领投的约5000万美元A轮融资,Yandex也参与其中[2]。

应用

ClickHouse的名字来自Click Stream与Data Warehouse的组合,最初服务于基于页面点击事件流的Web流量分析[3]。适合它的数据是结构清晰、写入后很少改动的事件流,例如点击流、广告网络与实时竞价、电商行为分析、在线游戏分析、传感器与监控数据、电信数据等[5]。

在Yandex.Metrica这一规模最大的应用中,ClickHouse支撑着原始非聚合数据的存储与即时查询;到2019年,其主集群记录数超过30万亿行,部署服务器超过600台,集群查询处理吞吐可达每秒2TB[10]。早期采用者Cloudflare用它处理互联网上相当大比例的HTTP流量,每秒记录数超过1000万条[2]。

在其他行业中,CERN的LHCb实验使用ClickHouse存储和处理约100亿个事件的元数据,每个事件包含1000多个属性[9]。常见的落地形式还包括服务器日志分析、业务指标监控,以及作为分析人员使用的内部数据仓库[9]。

局限

ClickHouse不支持完整的事务,这一点与面向事务处理的数据库存在根本差别[4]。它缺少高频、低延迟地修改或删除已有数据的能力,只能用于批量删除或修改;早期版本甚至没有UPDATE语句,写入后数据基本被视为不可变[4]。

稀疏索引使ClickHouse不适合通过主键检索单行的点查询,它面向的是包含大量行的分析型查询,而非单行读写[4]。在并发上,官方建议单个服务器每秒查询不超过约100次,因为系统为分析场景而非高并发短查询而设计[4]。

写入方面,建议每次批量写入不少于1000行,或每秒写入请求不超过1次,过小或过频的写入会影响性能[4]。此外,集群模式要求用户主动规划并定义分片、分区与副本位置等配置,相比常见的数据库系统,运维门槛更高[3]。

参见

  • 列式存储 —— ClickHouse采用的数据组织方式,也是其查询性能的基础。

  • OLAP —— ClickHouse所面向的联机分析处理场景。

  • Yandex —— 开发并开源ClickHouse的公司。

  • SQL —— ClickHouse支持的声明式查询语言。

  • 数据仓库 —— ClickHouse常见的部署定位之一。

词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:12:39Z

历史版本

本条目引用的词条
列式存储 Yandex OLAP SQL 数据仓库