目录
1. 标准 ACID 支持场景 (MergeTree 引擎家族)
2. 非 ACID 场景
3. 实验性事务功能 (非云环境)
总结
参考文档 事务性 (ACID) 支持 | ClickHouse Docs
ClickHouse ACID 支持核心要点
1. 标准 ACID 支持场景 (MergeTree 引擎家族)
• 单分区插入 (原子块)
• ✅ 原子性:整块数据插入全部成功或全部失败。
• ✅ 一致性:违反约束(如主键重复)时自动回滚。
• ✅ 隔离性:快照隔离(事务内)或读未提交(非事务)。
• ✅ 持久性:支持 fsync_after_insert
和 insert_quorum
确保数据落盘/多副本同步。
• 多分区插入
• 每个分区的插入独立作为事务处理。
• 分布式表插入
• 分片级事务性(非整个集群事务)。
• async_insert
模式
• wait_for_async_insert=1
(默认)时仍保证原子性,=0
时不保证。
2. 非 ACID 场景
• 缓冲区表 (Buffer
引擎)
• 不保证原子性、隔离性、一致性和持久性。
3. 实验性事务功能 (非云环境)
• 要求
• 需部署 ClickHouse Keeper/ZooKeeper。
• 仅支持原子数据库和非复制 MergeTree 表。
• 功能范围
• 支持 BEGIN TRANSACTION
、COMMIT
、ROLLBACK
。
• 允许事务内读写操作(快照隔离)。
• 关键限制
• ❌ 不支持嵌套事务、DDL、复制表、云服务。
• ❌ 异常(如语法错误)强制回滚事务。
关键注释
• 数据块定义:插入原子性依赖数据打包为"块"(如 CSV 行数 < max_insert_block_size
)。
• 客户端重试:未收到响应时可安全重试(依赖精确一次语义)。
• 分布式一致性:ACID 的 "C" 不涵盖分布式一致性(由 select_sequential_consistency
控制)。
• 实验性状态:事务功能可能变更,生产环境需谨慎评估。
总结
ClickHouse 在 单分区块写入 场景提供完整的 ACID 保证,适用于实时分析场景的原子写入。分布式写入、缓冲区表等功能存在明确限制。实验性事务 扩展了多语句事务能力,但受限于环境与功能范围,暂不推荐生产关键系统使用。