ClickHouse轻量级更新实测:批量写入快1700倍,OLAP数据库也能高效修改数据
提到分析型数据库(OLAP),人们的第一印象往往是”只读”——擅长海量数据的聚合分析,但更新和删除操作是噩梦。传统观点认为,列式存储的Immutable设计决定了它不适合频繁修改数据。然而,ClickHouse在2025年用一项技术创新打破了这一刻板印象:轻量级更新(Lightweight Updates)将数据修改性能提升了1700倍,让分析型数据库也能支持实时数据写入和更新。
为什么OLAP数据库害怕更新
要理解ClickHouse的突破,先要理解问题的本质。
传统的OLTP数据库(如MySQL、PostgreSQL)是行式存储,记录一行存一次,改一个字段只需原地更新那一小块数据,成本很低。但这种架构在做大规模分析时很痛苦——读10万条数据可能需要把不相关的几百个字段也加载进内存。
ClickHouse代表的OLAP数据库走了完全相反的路:列式存储 + Immutable数据文件。数据写入后变成不可变的”数据块”(data parts),不同列分别存成独立的压缩文件。这种架构让读取时只加载需要的列,聚合查询极快——每秒能处理数十亿行。
但代价来了:改数据变成了灾难。因为文件Immutable,想改一行数据?对不起,整个文件重写。删除一行?一样要重写。传统上ClickHouse的ALTER TABLE ... UPDATE被称为”重量级mutation”,执行时需要:
这种架构对于”一次写入、多次读取”的日志分析场景很完美,但对于需要实时更新的业务(比如电商库存、金融交易状态、用户画像)来说几乎是不可用的。
Patch Part架构:重新设计更新机制
ClickHouse的解决方案是引入Patch Part(补丁文件)架构,原理类似Linux的增量补丁:

_block_number和_block_offset定位),以及新的值是什么_row_exists逻辑掩码,把对应行的标记从1改为0。查询时自动过滤标记为0的行,实现”下一条查询即可见”整个过程无需阻塞读取,数据修改几乎是即时生效的。
实测数据:1700倍加速意味着什么
ClickHouse官方给出了在标准lineitem表上的基准测试结果:

| 更新方式 | 批量UPDATE速度 | 单行UPDATE速度 | 查询影响 |
| 传统mutation | 1x (基准) | 1x (基准) | 0% |
| ReplacingMergeTree + FINAL | N/A | N/A | 慢280% |
| 新架构Patch Part | 快1700倍 | 快2400倍 | 临时慢12% |
关键数字解读:
ReplacingMergeTree + FINAL导致的永久性280%性能下降,这个代价完全值得。应用场景:OLAP也能玩转实时数据
轻量级更新让ClickHouse从”纯分析”走向”分析+实时写入”双模式:
实时数据修正:上游pipeline发现并修复错误数据后,无需重建整个分区,直接PATCH掉错误行
GDPR合规删除:用户行使”被遗忘权”时,一行DELETE即可清除个人数据,无需重建索引
缓慢变化维度(SCD):电商商品价格、库存状态等频繁变化的维度,可以直接UPDATE,无需重新加载整个表
实时交易状态更新:订单状态、支付结果等需要即时更新的字段,现在可以在ClickHouse中直接完成
实时数据 enrichment:将流式计算的结果(如用户行为画像)增量写入ClickHouse,同时进行查询分析
语法变化:从方言到ANSI标准
新架构支持标准SQL语法,不再需要学习ClickHouse特有的方言:
-- 传统重量级mutation(仍可用,但不推荐)
ALTER TABLE wikistat DELETE WHERE project = 'SlowQueries'
-- 新语法:轻量级更新
UPDATE wikistat SET hits = hits + 1 WHERE path = 'Google'
SETTINGS allow_experimental_lightweight_update = 1, apply_patch_parts = 1
-- 新语法:轻量级删除
DELETE FROM wikistat WHERE user_id = 12345
SETTINGS allow_experimental_lightweight_delete = 1
这对从MySQL/PostgreSQL迁转的团队非常友好,SQL语句几乎可以直接复用。
与其他方案的对比
ClickHouse官方对比了三条技术路径:
| 方案 | 写入性能 | 读取性能 | 维护复杂度 |
| 传统mutation | 慢 | 正常 | 中 |
| ReplacingMergeTree + FINAL | 正常 | 慢280% | 低 |
| Patch Part (新架构) | 快1700倍 | 临时慢12% | 低 |
在实时性要求越来越高的现代数据架构中,Patch Part可能是近几年OLAP领域最重要的技术创新之一。
