一、ClickHouse 概述:从一次深夜故障说起
我记得那是 2019 年,我负责的一个广告实时报表系统,每天要处理几十亿条点击数据。MySQL 扛不住了,Elasticsearch 聚合慢得像蜗牛。凌晨三点,老板打电话问报表为什么出不来。我盯着监控面板,心里只有一个念头——必须换引擎。
后来我选了 ClickHouse。说实话,当时心里也没底。但上线后,查询速度从几十秒降到了几百毫秒。嗯,那晚之后,我就成了 ClickHouse 的忠实用户。
什么是 ClickHouse?
ClickHouse 是一个开源的列式存储数据库,专门为在线分析处理(OLAP)场景设计。它由俄罗斯的 Yandex 公司开发,2016 年开源。你想想看,一个能扛住千亿级数据量、还能在秒级返回聚合结果的系统,靠的是什么?
说白了,它的核心思路就两条:列式存储和向量化执行。这两点,我后面会详细讲。
一句话总结:ClickHouse 不是用来取代 MySQL 的,它是用来解决「海量数据下,如何快速做统计分析」这个问题的。
核心特性:为什么它这么快?
我刚开始接触 ClickHouse 时,也被它的速度震惊了。后来深入源码才明白,它的快不是魔法,是设计上的降维打击。
1. 列式存储
传统数据库(比如 MySQL)是行式存储。什么意思呢?就是一行数据物理上挨着放。你查一个字段,它得把整行都读出来。
ClickHouse 不一样。它把每一列单独存成一个文件。你查 count(*) 或者 sum(amount),只需要读那一列的数据。IO 量能减少 10 倍甚至 100 倍。
我在项目中遇到过这样一个场景:一张表有 200 个字段,业务方只查其中 3 个聚合字段。行式存储要扫全表,ClickHouse 只扫 3 列。结果呢?查询快了 50 倍。
我的建议:列式存储最适合「宽表少字段」的查询模式。如果你的查询经常要 SELECT *,那 ClickHouse 的优势就不明显了。
2. 向量化执行
这个听起来有点玄乎。我换个说法:CPU 处理数据时,一次能处理一个数,还是一次能处理一批数?
ClickHouse 用了 SIMD(单指令多数据流)指令集。它把数据打包成向量,一次 CPU 指令就能处理 256 个数值。你想想看,传统数据库一次处理一个,它一次处理 256 个,速度能不快吗?
我曾经对比过 ClickHouse 和某个行式数据库的聚合性能。同样的数据量,ClickHouse 的 CPU 利用率更高,但执行时间更短。为什么?因为它把 CPU 的潜力榨干了。
3. 其他关键特性
| 特性 | 说明 | 我的体会 |
|---|---|---|
| 数据压缩 | 列式存储天然适合压缩,压缩比可达 5-10 倍 | 我见过最夸张的案例,200GB 数据压缩到 15GB |
| 分布式架构 | 天然支持分片和副本,水平扩展无压力 | 我部署过 30 个节点的集群,扩容基本无感 |
| 实时写入 | 支持每秒百万级的写入吞吐 | 注意:它是批量写入,不是单条事务写入 |
| SQL 兼容 | 支持大部分标准 SQL,学习成本低 | 但有些 JOIN 写法要注意,和 MySQL 不太一样 |
避坑指南:我曾经以为 ClickHouse 能替代所有分析场景。后来发现,它不适合高频的 UPDATE/DELETE 操作,也不适合点查询(比如查某一条记录)。它的强项是「批量聚合分析」,别用错了地方。
适用场景:哪些问题它能解决?
我总结了一下,ClickHouse 最适合下面这几类场景:
- 实时数据分析:比如用户行为分析、广告实时报表、监控指标聚合
- 日志分析:服务器日志、应用日志、安全日志的快速检索和聚合
- 物联网时序数据:传感器数据、设备指标的存储和查询
- 商业智能(BI):数据仓库的加速层,替代传统的 OLAP 引擎
我举个实际例子。之前有个电商客户,每天产生 5 亿条订单数据。他们要用这些数据做实时大屏,展示销售额、订单量、用户分布。用 ClickHouse 之前,大屏刷新一次要 30 秒。用之后,1 秒以内。老板当场拍板:全公司推广。
行业案例:谁在用 ClickHouse?
说实话,ClickHouse 的社区比我想象中活跃得多。我整理了几个典型行业案例:
| 行业 | 典型用户 | 使用场景 |
|---|---|---|
| 互联网 | 字节跳动、美团、快手 | 用户行为分析、AB 测试、实时报表 |
| 金融 | 某大型银行、某证券机构 | 交易流水分析、风控指标计算 |
| 电商 | 某头部电商平台 | 订单分析、库存预测、用户画像 |
| 游戏 | 某知名游戏公司 | 玩家行为分析、游戏日志查询 |
| 物联网 | 某智能硬件厂商 | 设备数据采集、异常检测 |
我记得有一次参加技术大会,字节跳动的同学分享说,他们用 ClickHouse 管理了超过 10 万亿行数据。我当时心里想:嗯,这条路选对了。
知识体系总览
下面这张图,是我自己梳理的 ClickHouse 核心知识体系。你可以把它当成一张地图,后面每一章都会对应到其中的一个模块。
这张图里,我把 ClickHouse 的核心知识分成了三层:三大基石(列式存储、向量化执行、分布式架构)、核心能力(高压缩比、实时写入、秒级查询、水平扩展)、应用场景(实时报表、日志分析、用户行为分析、物联网时序数据)。后面每一章,都会围绕这些模块展开。
写在前面的话
说实话,ClickHouse 的学习曲线不算陡。只要你懂 SQL,理解列式存储的基本概念,上手很快。但真正把它用好、用稳,需要踩不少坑。
我写这个课程,就是想把我这些年踩过的坑、总结的经验,原原本本地分享给你。从单机部署到高可用集群,从基础配置到性能调优,咱们一步步来。
嗯,准备好了吗?那咱们开始吧。