中间件速查手册
数据仓库与 OLAP · clickhouse

ClickHouse

列式存储 + 向量化执行,亿级数据秒级聚合

数据仓库与 OLAPApache-2.0C++学习难度:中等

ClickHouse 是俄罗斯 Yandex 为自家分析系统造的列式数据库。它只读需要的列、按批向量化计算、用稀疏索引跳过无关数据块,所以一条 group by 扫几亿行能在秒级出结果。代价是:join 弱、更新难、并发不高。

01

它解决什么问题

MySQL 上一条按天分组的统计要跑十几分钟,而且会拖垮业务库;Hive 又慢到分钟级。运营要的是“点一下,两秒出图”。

真实场景:典型场景:埋点数据每秒几万条写进 ClickHouse,运营后台按渠道、机型、时间筛选,图表 1~2 秒刷新,一天查几千次。

02

核心概念

每个概念一句话 + 一个类比。点击卡片看更详细的解释。

03

数据流转动画

跟着步骤看一条数据从进入系统到被处理完的完整路径,可以暂停、重播和调速。

Flow animation

写入一个 part,到查询扫出结果

客户端INSERT / SELECT写入缓冲按列拆解Part磁盘上的列文件后台 Merge合并成更大的 part列扫描稀疏索引 + 向量化

← 左右滑动查看完整流程图 →

01 / 05
1. 批量写入

客户端一次提交 10 万行,ClickHouse 按列拆开、分别压缩,比逐行写快几个数量级。

提示:ClickHouse 的写入永远是“追加生成新 part”,从不在原地改;查询靠排序键 + 分区把扫描量砍到极小。 悬停图中的节点可以看概念解释。

04

优劣势

短句说清适合什么、不适合什么,选型时先看这一栏。

适合什么
  • 亿级数据聚合秒级返回,单机就能跑出很高的 QPS
  • 压缩比高(列存 + 专用编码),存储成本比行存低 5~10 倍
  • SQL 支持好,窗口函数、物化视图、近似去重都有
  • 部署简单,单机 binary 就能跑,不依赖 Hadoop 生态
不适合什么
  • 不支持高频单行更新/删除,只能异步 mutation 或重建 part
  • join 能力弱,大表 join 容易 OOM,需要提前打宽表
  • 并发不高,官方建议单机 QPS 在百级,不适合高并发点查
  • 没有真正的事务,跨表一致性要业务自己保证
05

常见使用场景

每个场景都配一句「为什么用它」。

01

用户行为分析

埋点数据写入,按渠道 / 版本 / 时间多维下钻,做漏斗和留存。

为什么用它:列存只读需要的列,多维聚合正好是它最擅长的。

02

监控与日志分析

替代 ELK 做指标聚合,日志按天分区,保留半年。

为什么用它:同样的数据量,ClickHouse 的存储和查询成本都低得多。

03

实时大屏的查询层

Flink 算好的指标写进 ClickHouse,大屏每秒刷新。

为什么用它:写入批量、查询聚合,两边都能扛住。

06

同类对比

和同赛道的组件并排看,差异一目了然。

HiveClickHouseDoris

三者常常同时存在:Hive 存原始与明细、Doris 做实时报表、ClickHouse 扛大屏聚合。选型先问「查询长什么样、并发多少、要不要更新」,再比性能。

打开对比页
07

常见问题

上手第一个月最容易卡住的地方。

Q1ClickHouse 为什么这么快?

四件事叠加:列存只读用到的列;数据按排序键有序存放,稀疏索引能跳过整块;向量化执行一次算一批而不是一行;高压缩比让 IO 量变小。所以它快在“扫描型聚合”,不是快在“点查”。

Q2能当业务库用吗?

不建议。它不支持高频单行更新、没有事务、并发能力有限,点查(按主键取一行)反而不如 MySQL。定位是“分析型副本”:业务数据同步一份过来做分析,主库仍然是 MySQL。

Q3Too many parts 是什么错?

每次 INSERT 都会生成一个 part,写入太频繁(比如每秒一条)就会堆积成几千上万个 part,后台合并跟不上。解决办法:客户端攒批(每批 ≥ 1 万行)、用 Kafka 引擎表缓冲、或者调大 parts_to_throw_insert 并观察合并速度。

Q4ClickHouse 和 Doris 怎么选?

纯分析、数据量极大、能接受单表宽表模型,ClickHouse 更快更省;需要多表 join、高并发点查、要用标准 SQL 和事务性导入,Doris 更合适。很多公司两个都上:Doris 做报表,ClickHouse 做明细大屏。