ClickHouse 是一个面向 OLAP(Online Analytical Processing,联机分析处理) 的列式数据库管理系统(DBMS),与 MySQL、PostgreSQL 等传统的 OLTP(Online Transaction Processing,联机事务处理) 数据库有本质区别。理解其定位和特点,关键在于明确 OLAP 与 OLTP 的核心差异,以及 ClickHouse 如何在这些差异中发挥优势。
一、OLAP vs OLTP:根本区别
维度 | OLTP(如 MySQL、PostgreSQL) | OLAP(如 ClickHouse) |
---|---|---|
主要用途 | 处理日常事务(增删改查) | 支持复杂分析、报表、数据挖掘 |
数据量 | 通常较小,单条记录操作 | 海量数据,批量处理 |
查询模式 | 简单、高频、低延迟(如 SELECT * FROM users WHERE id=1 ) | 复杂、低频、高吞吐(如 SELECT COUNT(*), AVG(salary) FROM logs GROUP BY city ) |
写入模式 | 高频小批量写入,支持事务、行级锁 | 批量写入为主,不支持事务,写少读多 |
数据更新 | 频繁更新、删除 | 几乎不更新,追加为主(Append-only) |
存储结构 | 行式存储(便于读取整行) | 列式存储(便于聚合和压缩) |
索引类型 | 主键、B+树索引等,支持随机访问 | 稀疏索引、主键排序、跳数索引等,支持快速扫描过滤 |
并发要求 | 高并发、低延迟响应 | 并发较低,但单查询资源消耗大 |
二、ClickHouse 的核心定位
ClickHouse 是由俄罗斯 Yandex 开发的开源列式数据库,专为 实时 OLAP 分析 设计,适用于:
- 实时数据分析平台
- 用户行为日志分析
- 广告系统报表
- 监控系统(如 Prometheus 替代)
- 大数据聚合查询
它的设计哲学是:以极高的查询性能处理海量数据的聚合分析,牺牲事务和实时更新能力换取速度。
三、ClickHouse 的核心特点
1. 列式存储
- 数据按列存储,相同类型的数据连续存放。
- 优势:
- 聚合查询(如
SUM
,COUNT
,AVG
)只需读取相关列,I/O 更小。 - 同列数据类型一致,压缩率高(通常压缩比可达 5-10 倍)。
- 聚合查询(如
2. 向量化执行引擎
- 查询处理以 数据块(batch) 为单位,利用 SIMD 指令并行处理。
- 充分利用 CPU 缓存和多核性能,提升吞吐。
3. 高性能聚合查询
- 在大数据集上执行
GROUP BY
、JOIN
、ORDER BY
等操作速度极快。 - 例如:百亿级数据的聚合查询可在秒级完成。
4. 数据压缩
- 列式存储 + 类型一致 → 高效压缩(如 LZ4、ZSTD)。
- 减少磁盘 I/O 和内存占用。
5. 可扩展的分布式架构
- 支持分片(Sharding)和复制(Replication)。
- 通过
Distributed
引擎实现透明查询路由。 - 可水平扩展至数百节点。
6. 丰富的表引擎
MergeTree
系列:最常用,支持高效插入和范围查询。ReplacingMergeTree
:去重。AggregatingMergeTree
:预聚合。Kafka Engine
:直接消费 Kafka 数据流。
7. SQL 支持良好
- 支持标准 SQL 语法(类似 PostgreSQL),包括子查询、窗口函数、JOIN 等。
- 但不支持事务、外键、行级更新(
UPDATE/DELETE
效率低)。
8. 写多读少?不,它是“写少读多”
- ClickHouse 适合 批量写入(如每分钟一批日志),不适用于高频单条插入。
- 写入后数据不可变或极少更新,适合日志、事件类数据。
四、典型使用场景
✅ 适合 ClickHouse 的场景:
- 实时用户行为分析(如点击流)
- 运维监控指标存储与查询
- 广告投放效果统计
- 大数据平台的即席查询(Ad-hoc Query)
❌ 不适合的场景:
- 高频事务处理(如银行交易)
- 需要强一致性和事务支持的系统
- 经常更新或删除单条记录的业务
- 高并发点查(如根据 ID 查用户信息)——这不是它的强项
五、与 MySQL/PostgreSQL 的对比举例
需求 | MySQL | ClickHouse |
---|---|---|
查询“过去一年每天的订单总额” | 慢,全表扫描 + 行式存储 | 极快,列式扫描 + 高效聚合 |
插入一条订单记录 | 快,支持事务 | 不推荐,批量插入更高效 |
支持 ACID 事务 | ✅ | ❌ |
存储 100 亿条日志 | 占用大,查询慢 | 压缩后小,查询快 |
总结:ClickHouse 的定位一句话
ClickHouse 是为“大规模数据分析”而生的列式数据库,擅长“高吞吐、低延迟”的聚合查询,适用于写少读多、数据不可变的 OLAP 场景,与 OLTP 数据库形成互补而非替代。
📌 正确使用方式:
将 MySQL/PostgreSQL 用于业务交易,将聚合结果或原始日志导入 ClickHouse 进行分析,构建“事务 + 分析”混合架构。