◈ DB 选型参考
← 返回首页

ClickHouse

OLAP #列存 #OLAP #MergeTree #向量化 #MPP #实时分析 #Apache-2 #存算分离

面向高吞吐追加写和大规模扫描聚合的开源列式 OLAP 数据库——"单机极致效率的实时分析引擎":以列存、向量化执行和 MergeTree 为核心,一台机器就能打出传统数仓集群的扫描吞吐;代价是几乎没有通用 ACID 事务、高频更新/删除是架构级税、分布式复制与 DDL 运维得自己设计好。

用 AI 深挖这款:
证据等级:官方文档 厂商口径 社区实测 社区共识 待验证

基本信息

项内容
厂商ClickHouse, Inc.(2021 年成立,总部旧金山;欧洲工程团队在阿姆斯特丹)
国家美国(技术起源于俄罗斯 Yandex)
起源2009 年由 Alexey Milovidov 在 Yandex 为 Yandex.Metrica 点击流分析立项;2012 年投产;2016 年以 Apache 2.0 开源
许可证Apache License 2.0(开源内核,无 BSL/open-core 限制)
商业版说明ClickHouse Cloud 为全托管商业服务;官方口径按使用量计费——计算按分钟、存储按 15 分钟计量,另有数据传输等维度;具体价格随版本/地区变化,本档案不写绝对价格
托管服务ClickHouse Cloud(2022 年 GA,覆盖 AWS/GCP/Azure),另有 ClickPipes 托管摄入
主类型列式 OLAP(实时分析数据库)
兼具类型日志/事件分析、数据仓库、时序分析、可观测性(ClickStack);向量检索/embedding 相关能力随版本快速演进,评审线仅记"存在",细节待验证

硬维度(47 项)

1 静态加密 / TDE 部分支持

部分支持——提供 encrypted 虚拟磁盘(storage policy 层),可包装本地盘、S3 等底层磁盘,按 AES-CTR 加密写入的数据文件,可按表/存储策略选择加密范围;不是"一键覆盖全部数据目录"的传统全库 TDE。ClickHouse Operator 文档明确:加密覆盖 MergeTree data parts,但 server metadata 与日志不覆盖——这部分仍需 LUKS、CSI 或云盘加密兜底;密钥丢失则已加密 part 无法读取。证据:官方文档(operator storage 指南、storing-data)。

2 TLS / 传输加密 有

有——支持 HTTPS(8443)、secure native TCP(9440)、interserver HTTPS;支持服务端证书校验与 mTLS 客户端证书。注意:TLS 需显式配置,启用安全端口不会自动关闭明文端口(8123/9000/9009),需另行关闭或防火墙隔离。证据:官方文档(operator FIPS 指南、客户端配置文档)。

3 审计 部分支持

部分支持——system.query_log 记录查询文本、用户、起止时间、异常与资源用量,可作为数据库活动审计的基础;ClickHouse Cloud 默认开启 query logging。但自建版可被有权限的用户用 log_queries=0 关掉(除非把该设置的 writability 锁为 CONST),日志是本地表、无防篡改与集中归集,需要自己配留存 TTL、导出与不可篡改流程;ClickHouse Cloud 控制面审计边界本轮未找到足够官方证据,不下"完整支持"结论。证据:官方文档(query_log 系统表)+ 社区安全实践。

4 认证与权限 有

有——SQL 驱动的 RBAC:用户、角色、权限、行策略(row policy)、settings profile、quota;支持 LDAP、Kerberos、X.509 等外部认证。但存在两套管理面:传统 users.xml 与 SQL 管理的 access entity 不能混管同一个实体;集群 RBAC 的同步方式与版本边界本轮未逐项核实,保守表述。证据:官方文档 + 社区安全实践。

5 备份恢复 有

有——原生 BACKUP/RESTORE SQL(22.8+),可备份到本地盘与对象存储;生态常用 clickhouse-backup 工具。但分片集群的一致备份点、恢复并发、Keeper 元数据的重建都需要 runbook 与实际演练;本轮未找到可引用的恢复速度数字,不写。证据:官方文档 + 社区实践。

6 可观测性 有

有——system.* 表极丰富:query_log、processes、parts、merges、metrics、events、replicas、disks、mutations、query_thread_log、text_log、part_log;支持 Prometheus endpoint;OpenTelemetry span 可写入 system.opentelemetry_span_log。注意:自观测日志本身是 MergeTree 表,会吃磁盘,必须配 TTL/留存。证据:官方文档(opentelemetry.md)+ 社区实践。

7 连接模型 有

有——native TCP(9000/9440)与一等 HTTP(S) 接口(8123/8443)并存;HTTP 查询可以是完全无状态的单次请求,LB 友好;另有 MySQL(9004)/PostgreSQL(9005)wire 协议、JDBC/ODBC、gRPC、Arrow Flight。但没有 OLTP 式长事务会话语义;并发由 max_concurrent_queries(默认 100/节点)、用户 quota/profile、内存限制控制,超限排队或直接拒绝/OOM——连接本身不是瓶颈,"查询并发预算"才是。证据:官方文档 + 社区客户端指南。

8 事务与隔离级别 查证为无

查证为无——不提供 PostgreSQL/MySQL 式跨多语句、跨多表的通用 ACID 事务与标准隔离级别(读已提交/可重复读/可串行化均无)。单个 INSERT 的 block/part 写入具有原子可见性,但这不等于事务支持。这是 OLAP 追加写模型的设计选择,不是功能遗漏。证据:官方文档 + 社区共识。

9 复制与一致性 部分支持

部分支持——ReplicatedMergeTree 以 part 为复制单位,Keeper(Raft,推荐 ≥3 节点)维护复制日志,副本异步拉取 part;默认最终一致,读非主副本可能读到旧状态。可用 insert_quorum 提高写入确认强度,但把副本/跨 AZ 延迟放进写路径,且 quorum 写在副本不足时直接失败(拿可用性换一致性);默认不写 RPO=0。Keeper 只做协调不存表数据;Keeper 与 ZooKeeper 快照格式不兼容,混搭 quorum 不支持。证据:官方文档(academic overview、Keeper 知识库)+ 社区实践。

10 扩展方式 有

有——手工/配置式 shard + replica 拓扑,Distributed 表做查询路由与结果聚合;存储可通过 storage policy 落到对象存储(存算分离方向),ClickHouse Cloud 走弹性计算路线。但自建经典集群"加节点"不等于"自动再平衡":分片、数据迁移、流量切换要自己规划。证据:官方文档 + 社区共识。

11 兼容性 部分支持

部分支持——接口广:HTTP/native、JDBC/ODBC、MySQL/PostgreSQL wire 协议(仅协议兼容,方言仍是 ClickHouse SQL)、Kafka/S3/Parquet/Iceberg 等表函数与外部表。但不是行为兼容:ORM 事务语义、UPDATE/DELETE、约束、MySQL/PG 特有 DDL 发过来基本跑不通;ORDER BY 在 MergeTree 中是排序键/稀疏索引定义,不是"结果排序保证/唯一主键"。证据:官方文档(postgresql/mysql 接口)+ 社区共识。

12 许可证与商业模式 有

有——开源内核 Apache License 2.0,无 BSL/open-core 限制,自建无商业授权成本;ClickHouse Cloud 为全托管商业服务,使用量计费(官方口径:计算按分钟、存储按 15 分钟计量,另有数据传输等维度)。证据:官方口径(Cloud 计费博客)+ 第三方拆解(价格数字易变,本档案不引用绝对价格)。

13 中文资料丰富度 有

有——官方文档有中文版(clickhouse.com/docs/zh)、中文社区(clickhouse.cn)、CSDN/博客园/腾讯云开发者社区及《ClickHouse 实战》等书籍、美团/字节等大厂实践分享,入门到运维资料丰富。但最新版本特性与深水区内容英文更新更快,部分中文博客参数已过期,查参数以英文官方文档为准。证据:社区共识。

14 性能与延迟特征 有

有(OLAP 扫描性能标杆;点查弱)。

  • 单机列存扫描 GB/s 量级(视硬件与压缩率,社区实测);分布式表吞吐随节点数提升(社区实测,未验证严格线性) 社区实测。
  • 点查/高频小写入弱;MergeTree 后台合并是主要调优点 社区共识。
  • 排序键/分区键设计决定查询性能,建表即定生死 社区共识。

15 合规与认证 部分支持

部分支持(ClickHouse Cloud 有 SOC2;开源无)。

  • ClickHouse Cloud:SOC2厂商口径厂商口径。
  • 开源版:无官方合规认证,合规责任在部署方 社区共识。
  • 无信创名录公开信息 待验证。

16 成熟度与社区生态 有

有(2016 年开源;OLAP 开源标杆)。

  • 2016 年由 Yandex 开源;2021 年 ClickHouse Inc 独立融资 社区共识。
  • GitHub stars 数万级,社区极活跃;云(Cloud)是商业化主线 社区共识。
  • 版本迭代快,企业用需跟紧 LTS 线 社区共识。

17 标杆用户 有

有(Cloudflare、字节等公开案例)。

  • Cloudflare(公开博客)、字节跳动等大规模用户 社区共识。
  • 可观测性(日志分析)是最大采用场景之一 社区共识。
  • 国内互联网大厂自建 ClickHouse 集群普遍 社区共识。

18 生态工具链 有

有(clickhouse-backup;Flink/Kafka 生态)。

  • 备份:clickhouse-backup(社区事实标准)/官方备份恢复 社区共识。
  • 入数:Kafka 表引擎、Flink CDC、clickhouse-copier(分片间)社区共识。
  • 监控:Prometheus 集成;可视化:Tabix/官方 Play UI 社区共识。

19 云托管与 Serverless 有

有(ClickHouse Cloud;各云也有托管)。

  • ClickHouse Cloud(官方,Serverless/按量)官方文档。
  • 各云厂商/第三方托管版多 社区共识。
  • 云版与开源版能力对齐好 社区共识。

20 数据接入与摄入 有

有(批量 INSERT/Kafka 引擎/S3 表函数,摄入是强项)。

  • 批量:clickhouse-client/HTTP 批量 INSERT;支持 CSV/Parquet/JSONEachRow 等格式 官方文档。
  • 流式:Kafka 表引擎直连消费;S3/s3Cluster 表函数直接读对象存储 官方文档。
  • 大批量写入注意 parts 合并压力,分批与异步插入调优是常规操作 社区共识。

21 外部数据访问 有

有(S3/URL/MySQL/PG 表引擎;JDBC/ODBC 桥;DataLakeCatalog 可直写 OneLake Iceberg)。

  • S3、URL、File 表函数可直接查询外部数据不落地 官方文档。
  • MySQL/PostgreSQL 表引擎可联邦查询外部库表 官方文档。
  • jdbcBridge/odbcBridge 扩展到任意 JDBC/ODBC 源 官方文档。
  • DataLakeCatalog(catalog_type='onelake')支持 INSERT INTO 把查询结果直写为 OneLake 的托管 Iceberg 表,写后自动被 OneLake 目录注册并继承其安全与治理模型 官方博客。
  • 同步的限制:OneLake 是首个支持 ClickHouse 写入的 catalog 类型,官方博客称其他 catalog 写入"未来数月逐步支持",当前状态为查证为无 厂商口径;写入走 ADLS Gen2 DFS 端点(onelake.dfs.fabric.microsoft.com),读取走 Blob 端点(onelake.blob.fabric.microsoft.com),remote_url_allow_hosts 只放行 .blob 会导致 INSERT 被拒,两端需同时放行 官方 GitHub PR 说明;连接依赖 Entra ID 服务主体(client_id/client_secret)并需 SET allow_database_iceberg=1 官方博客。

22 CDC 与下游同步 部分支持

部分支持(无原生 CDC 输出;靠物化视图+Kafka 引擎外发)。

  • ClickHouse 不记录行级变更日志,无官方 CDC 输出 社区共识。
  • 常见做法:物化视图 + Kafka 表引擎把结果推下游 社区实测。
  • 上游变更一般靠 Debezium→Kafka→Kafka 引擎链路解决 社区共识。

23 TTL 与数据生命周期管理 有

有(TTL 表达式(列级/表级),后台自动清理)。

  • 建表时 TTL datetime_col + INTERVAL,后台线程自动删过期分区/行 官方文档。
  • 可配到列级(只删某列)或整行,TO DISK/VOLUME 支持冷热分层 官方文档。
  • 清理依赖 merge,不能保证精确时刻删除,延迟分钟到小时级 社区共识。

24 在线 DDL 与 Schema 演进 部分支持

部分支持(ALTER 元数据轻量;mutation 重写代价高;ORDER BY 改不了)。

  • 只改定义不碰数据:ADD COLUMN / RENAME / COMMENT COLUMN 是元数据级操作、瞬间完成,旧 part 的新列读时按默认值合成 官方文档。
  • 重写数据但位置不变:ALTER UPDATE/DELETE 是 mutation——默认异步后台重写 parts,大表极慢且与 merge 共用线程池 官方文档;MODIFY COLUMN 改类型/CODEC、MATERIALIZE PROJECTION/INDEX 同理是重写 社区共识;另有轻量更新(patch parts)走增量路径 官方文档。
  • 搬数据:ORDER BY(排序键)不可变——改排序键只能建新表 + INSERT SELECT + RENAME 全量迁移 官方文档;主键列/采样键列的删除与改类型受限,ALTER 不够就得重建表 官方文档。
  • 验证约束:CHECK 约束支持(建表声明或 ADD/DROP CONSTRAINT),只校验 INSERT、不校验存量数据 官方文档;无外键、无唯一约束——PRIMARY KEY 只是稀疏索引配置 官方文档。
    • 规模:第二类代价 O(n),part 数/数据量越大越痛;大表 mutation 会堆积合并、拖慢复制,这就是"测试环境在线、生产锁死"的根源 官方文档。
    • 语义:ALTER 会阻塞该表读写——长 SELECT 运行时 ALTER 等它完成,ALTER 运行时新查询排队 官方文档;mutation 默认异步、不可回滚(可 KILL)官方文档;集群表 ALTER ON CLUSTER 各副本异步应用,alter_sync 控制语句返回时机 社区共识。

25 多租户与资源隔离 部分支持

部分支持(quota/用户级限流;隔离较粗)。

  • 用户级 quota 可限查询数/执行时间/结果行数 官方文档。
  • 无 CPU/内存硬隔离,大查询仍可能挤占资源 社区共识。
  • 多租户生产上多用多集群,少用单集群混布 社区共识。

26 跨地域多活 部分支持

部分支持(分片复制可跨区部署;无原生多活)。

  • 分片+副本可手工跨区部署,无原生多 region 协调 社区共识。
  • 跨区写放大,ON CLUSTER DDL 跨区延迟高 社区共识。

27 高可用架构与 RTO/RPO 部分支持

部分支持(副本+keeper;无自动主切换语义)。

  • 分片副本 + ClickHouse Keeper 做协调,副本故障可切 官方文档。
  • 无传统主从自动切换语义,故障处理靠副本冗余+客户端重试 社区共识。
  • Keeper 本身要高可用部署,否则成单点 社区共识。

28 行级安全与数据脱敏 有

有(原生CREATE ROW POLICY)。

  • ClickHouse 提供 CREATE ROW POLICY 实现行级过滤,可按用户 / 角色绑定 官方文档
  • 列级权限通过 GRANT SELECT(col) 实现 官方文档
  • 动态脱敏无内置掩码函数体系,通常靠视图 + 函数(如 substring / concat 构造)实现 社区共识
  • Row policy 与物化视图、分布式表交互时行为需实测,绕过面大 社区实测

29 JSON 与半结构化能力 有

有(JSON/Object/Dynamic 类型强)。

  • JSON/Object 类型 + JSONEachRow,Dynamic JSON 推断子列并可索引 官方文档。
  • 半结构化子列过多会导致 part 膨胀,生产需限制动态列数量 社区实测。

30 全文检索能力 部分支持

部分支持(ngrambf/tokenbf 跳数索引)。

  • ngrambf_v1/tokenbf_v1 跳数索引加速 LIKE/分词匹配 官方文档。
  • 无相关性排序、中文分词器等完整全文检索语义,重检索场景仍需 ES 社区共识。

31 存储效率与压缩 有

有(列存+多编码+ZSTD,高压缩比)。

  • 列式存储 + 按列类型自适应编码(Delta、Gorilla、T64 等)+ 通用压缩(ZSTD/LZ4),压缩比常达 5-10 倍。官方文档
  • MergeTree 引擎的压缩为表级可配置,支持按列指定压缩算法。官方文档
  • 高压缩比是其核心卖点之一,社区实测与官方口径基本一致。社区实测

32 开源协议与厂商锁定风险 无

无(Apache 2.0 开源;云版闭源)。

  • ClickHouse 核心采用 Apache 2.0 开源,GitHub 公开,无协议变更黑历史。官方文档
  • ClickHouse Cloud 为闭源托管服务,存在云绑定,但自建版功能对等。厂商口径
  • 生态工具(驱动、可视化)多为开放实现,迁出成本低。社区共识

33 查询优化器与计划稳定性 有

有(CBO 持续增强;SETTINGS 调优无 hint)。

  • 24.x 起 CBO 大幅增强,EXPLAIN 完备 官方文档。
  • 无传统 hint 语法,靠 SETTINGS 逐查询调优 官方文档。
  • 分析场景计划翻转少,但 JOIN 顺序选错仍是慢查询主因 社区共识。

34 参数调优与自治能力 部分支持

部分支持(上百 settings;调优靠建模)。

  • settings 上百,核心在建表(排序键、分区、TTL)而非运行时参数 官方文档。
  • parts 合并、内存配额是常规调优点,自治能力弱 社区共识。

35 静默数据损坏防护 部分支持

部分支持(MergeTree 自带校验文件,合并时验证)。

  • MergeTree 数据 part 目录含 checksums.txt,加载与合并时校验数据文件完整性。社区实测
  • 无用户可配的常驻页校验开关;副本间一致性靠 ZooKeeper/keeper 协调与重建。社区共识
  • 损坏的 part 可被隔离丢弃,但自动检测覆盖范围不如页级校验完整。待验证

36 存储过程/触发器/过程语言 无

无(查证为无存储过程/触发器)。

  • 无存储过程、触发器(查证为无)官方文档。
  • 逻辑放在 ETL/应用层,物化视图承担部分预计算 社区共识。

37 约束与数据完整性 无

无(MergeTree 无外键/CHECK)。

  • 无外键、CHECK、唯一约束(查证为无)官方文档。
  • 数据质量靠写入链路(Kafka/ETL)保证 社区共识。

38 分析 SQL 完备性 有

有(窗口/GROUPING SETS 完备)。

  • 窗口函数、GROUPING SETS/CUBE/ROLLUP、数组/元组函数完备 官方文档。
  • 方言与标准 SQL 有差异,迁移时函数需适配 社区共识。

39 被遗忘权与数据擦除 部分支持

部分支持(轻量DELETE;分区DROP最彻底)。

  • ClickHouse 的 DELETE 是“变异”(mutation),异步重写 part,大表代价高 官方文档
  • ALTER TABLE ... DROP PARTITION 是最高效彻底的批量擦除 社区实测
  • 旧 part 在 mutation 完成前残留;备份与 S3 归档延长残留期 社区共识
  • 无擦除证明 社区共识

40 数据血缘与目录集成 部分支持

部分支持(无原生;OpenLineage 第三方集成)。

  • 无原生血缘,需 OpenLineage/Marquez 等第三方集成 社区共识。
  • query_log 可作为血缘采集的数据源 社区实测。

41 存算分离 vs 存算一体 有

有(开源存算一体;Cloud 版存算分离)。

  • 开源版经典存算一体:本地盘 MergeTree,高吞吐 官方文档。
  • ClickHouse Cloud 采用存算分离(对象存储)官方文档。
  • 自建分离存储方案成熟度不如云版 社区共识。

42 多模能力 部分支持

部分支持(列存+JSON+倒排全文+向量索引)。

  • JSON/Object 类型、倒排索引(全文)、向量索引(ANN)均已支持 官方文档。
  • 无图引擎;超大规模向量检索仍不如专用库 社区共识。

43 FinOps 成本可观测性 不适用

不适用(自建无计费,成本=硬件+运维人力自理)。

  • 开源自建无内置计费概念,成本是节点硬件、存储与运维人力。社区共识
  • ClickHouse Cloud 等托管版可在云账单侧做标签归因与预算告警。厂商口径

44 驱动与多语言生态 有

有(HTTP 原生+JDBC/ODBC+各语言客户端)。

  • HTTP 接口是一等公民,clickhouse-jdbc/ODBC 完备 官方文档。
  • Python/Go/Node/JS 官方或社区客户端成熟 社区共识。

45 物化视图 有

有(触发器式物化视图,语义特殊)。

  • 物化视图为增量触发器语义(TO 内表),聚合预计算强大 官方文档。
  • 语义与传统 MV 差异大(无查询自动改写、写入即触发),误用易出错 社区实测。

46 支持跨云 有

有(开源任意云;ClickHouse Cloud 多云)。

  • 开源版任意云可部署 官方文档。
  • ClickHouse Cloud 支持 AWS/GCP/Azure 官方文档。
  • 跨云用 remote 表函数/复制表可配,无一键方案 社区共识。

47 热点数据更新能力 无

无(点更新按 part 重写,确认无热点机制)。

  • 并发控制原语:MergeTree part 不可变,无行锁、文档锁、in-place 更新概念——热点点更新根本不是“并发冲突”问题,而是“重写”问题:ALTER TABLE ... UPDATE/DELETE 是异步后台 mutation 任务(mutations_sync 控制客户端是否等待完成),并发提交的 mutation 按提交顺序执行,无锁等待、无冲突检测、无 abort官方文档。
  • 冲突行为:不存在写冲突 abort 或死锁——同一 key 的“并发更新”只是多个后台重写任务顺序追加,互不阻塞;重试归属:只有 mutation 提交失败才需应用层重提(mutation 本身无内核重试),进度走 system.mutations 查询;频繁小 mutation 的冲突面是任务队列积压而非锁官方文档。
  • 衰减形态:mutation 按受影响 part 的大小重写(非按行数)——更新 1 行若横跨 100 个 part 就重写 100 个 part:写放大、磁盘 IO 尖峰、拖慢后台 merge 与无关查询;热点 key 高频更新是架构级反模式:mutation 积压、part 数与合并压力随热度膨胀,吞吐不随并发度提升官方文档。
  • 内置缓解:确认无官方命名或文档化的热点行机制——MergeTree 的 part 重写设计本身决定了高频点更新是反模式。ReplacingMergeTree(按排序键后台去重,FINAL/argMax 取最新版)与轻量更新(patch parts:只写变更补丁 part 不立即重写,约 23.3 引入实验性、25.x 文档列为常规用法、官方约 10% 行适用上限)只是建模替代而非内核热点机制:去重延迟到 merge(有读到旧版的窗口),无自动打散或排队化官方文档。
  • 应用层模式与代价:热点状态(库存、计数器)不要逐行 UPDATE——攒批重插新版本(代价:秒到分钟级新鲜度延迟);热 key 的变更流在应用层/流处理中先聚合再批量写入(代价:架构复杂度);真需要 OLTP 行级语义用 OLTP 库,ClickHouse 只做分析(代价:双写/同步链路)。结论:同一行的高频点更新确认无原生承载路径社区共识。

招牌能力

写法要求:每个特性 = 它是什么 + 为什么是真本事 + 推到边缘会发生什么。

  1. 列式存储 + 向量化执行 + 高压缩:扫描聚合的暴力美学 真本事:列存只读查询涉及的列,配合 SIMD 向量化执行与高压缩;宽表聚合查询只扫少量列,IO 和 CPU 双降,一台单机就能跑出传统行存数仓集群的扫描吞吐。 边缘真相:宽行点查、逐行更新是反模式;压缩率高低极度依赖列基数与 codec 选择,无脑建表拿不到宣传数字;高基数列配低效 codec 等于磁盘与 CPU 双输。
  2. MergeTree 物理排序 + 稀疏主索引:数据跳过 真本事:ORDER BY 定义物理排序键,稀疏主索引按 granule(默认 8192 行)记录首行值,查询按排序键过滤时直接跳过整个 granule;索引极小,内存占用低。 边缘真相:排序键是写死在物理布局里的"合同"——选错列,后期改表等于建新表回灌(见深水区六);第一排序列决定绝大部分跳过效果,第二列之后收益递减。
  3. 单机纵向效率优先的 MPP:先吃满一台,再横向 真本事:单节点本身极强(向量化 + 多线程 + 直接 IO),分片后 Distributed 表并行聚合;很多场景 1–3 台机器就解决问题,集群规模和运维复杂度远小于同量级 Hadoop 系方案。 边缘真相:跨 shard 的 JOIN/聚合要走网络 shuffle,大 JOIN 依然可能 OOM(见深水区五);热点分片不会自己消失;加分片不等于自动再平衡。
  4. 实时追加写:批量/async ingest 下的秒级可查 真本事:async_insert、Buffer 表引擎、Kafka 表引擎把高频小写入聚成大 part;日志/埋点/可观测场景"写入即查询",不需要 T+1 ETL。 边缘真相:逐行直写等于积累 part 债务,最终 TOO_MANY_PARTS 拒绝写入(见深水区一);实时性的前提是"接受批量",不接受批量写入的应用模型不适合 ClickHouse。
  5. 生态接口广度:Kafka/S3/Parquet/Iceberg 即插 真本事:表函数与表引擎直读外部系统,HTTP 接口让任何语言 curl 可查;数仓/湖仓链路里 ClickHouse 可以当"查询加速层",不用先搬数据。 边缘真相:外部系统挂了、schema 漂了,故障会沿查询链路传进来;s3() 读大量小文件曾因 prefetch 回退为同步读而显著变慢(26.5 changelog 修过相关回归),对象存储延迟永远是税(见深水区七)。

深水区

以下每条 = 领域 + 机制一句话 + 推到边缘会发生什么 + 选型含义。证据类型已标注。

深水区一:MergeTree 的 part 机制——后台合并是生命线

  • 领域:写入路径 / 存储引擎。
  • 机制一句话:每次 INSERT 至少生成一个不可变 part,后台 merge 线程把小 part 合并成大 part;part 是复制、TTL、mutation 的基本单位。
  • 边缘行为:高频小批次写入、高基数分区、一次写入横跨大量分区、merge 的 IO/CPU 配额不足,都会让 part 数爆炸;先触发 parts_to_delay_insert 降速(写入被限流),超过 parts_to_throw_insert 直接 TOO_MANY_PARTS 拒绝写入。调大阈值只是把债务藏起来;OPTIMIZE TABLE FINAL 在事故期会和后台 merge 抢资源,未必救命。
  • 选型含义:实时逐行写入必须在 Kafka/缓冲层先聚合;批量/async insert 是生产铁律;监控 system.parts 的 part 数与 system.merges。
  • 来源:官方文档 + 社区诊断实践(clickhouse-diagnostics known-patterns)。

深水区二:Mutation——更新/删除的"重写税"

  • 领域:更新/删除语义。
  • 机制一句话:ALTER TABLE ... UPDATE/DELETE 不原地改行,而是异步重写所有受影响的 part,代价按受影响 part 大小算,不按逻辑修改行数。
  • 边缘行为:mutation 默认异步、不原子覆盖整表,查询可能同时看到新旧 part;提交后不可普通回滚,跨重启继续执行,除非显式 KILL MUTATION;大范围 mutation 会和后台 merge 抢 IO,拖慢整表。轻量 delete/patch parts 等机制按版本逐步改善,但"重写 part"的本质未变。
  • 选型含义:ClickHouse 不是库存扣减、账户余额这类 OLTP 更新库;频繁更新考虑 Replacing/CollapsingMergeTree、TTL 或 DROP PARTITION——但这些把复杂度转移到读语义(FINAL/去重时机)上。
  • 来源:官方文档 + 社区最佳实践。

深水区三:ReplicatedMergeTree + Keeper——最终一致的代价

  • 领域:复制与一致性。
  • 机制一句话:Keeper(Raft)只存协调与复制日志,数据 part 由副本异步从主副本拉取。
  • 边缘行为:默认写入只等本地/单副本确认就返回,读其他副本可能读到旧状态;insert_quorum 把"等待 N 个副本确认"放进写路径,跨 AZ 延迟直接变成写延迟,且 quorum 写在副本不足时直接失败(拿可用性换一致性);网络分区、配错的 interserver 地址、落后副本会让 replication queue 堆积——Keeper 健康不等于数据已同步,必须看 system.replicas 的 absolute_delay/queue_size。Keeper 与 ZooKeeper 快照格式不兼容,混搭 quorum 不支持,迁移要 converter 或重建。
  • 选型含义:默认不写 RPO=0;一致性是可调参数不是默认属性;POC 必须测副本落后与 quorum 写下的 P99。
  • 来源:官方文档(academic overview、Keeper 知识库)+ 社区实践。

深水区四:分布式 DDL——ON CLUSTER 的幽灵执行

  • 领域:集群运维。
  • 机制一句话:ON CLUSTER 把 DDL 放入 Keeper 队列,各节点 DDLWorker 按序本地执行。
  • 边缘行为:客户端超时(常见 180s)不等于任务停止,DDL 可能仍在后台逐节点执行,重试可能造成重复/冲突;死节点、过期 cluster 定义、积压任务会导致部分节点永久错过 DDL(队列有生命周期/容量);必须查 system.distributed_ddl_queue 和所有节点的实际 schema,不能只看客户端返回。25.8 曾出现 operator replicas_path 不匹配导致 ON CLUSTER 挂起的问题(altinity/clickhouse#1391,修复状态本轮未复核)。
  • 选型含义:集群 DDL 要有"下发—逐节点验 schema"的 runbook;CI 自动 DDL 必须幂等设计。
  • 来源:官方文档 + 社区诊断实践 + GitHub issue。

深水区五:JOIN 内存爆炸——默认 hash join 的獠牙

  • 领域:查询执行。
  • 机制一句话:默认 hash join 把右表完整构建为内存 hash table 后再扫左表。
  • 边缘行为:大右表不是"慢一点",而是直接 MEMORY_LIMIT_EXCEEDED 把查询杀死;分布式 JOIN 还会把数据广播/重分布,网络和内存双重放大。缓解手段:小表放右侧、用字典/预聚合、切可 spill 到磁盘的 join 算法(grace hash、full sorting merge)——spill 是用磁盘延迟换"不死"。
  • 选型含义:POC 必须包含真实最大的 JOIN,不能只测单表聚合;宽表预 join(非范式化)是 ClickHouse 的常规设计。
  • 来源:官方文档 + 社区性能实践。

深水区六:排序键是物理设计合同——选错等于重建表

  • 领域:schema 设计。
  • 机制一句话:MergeTree 的 ORDER BY 决定物理排序与稀疏主索引,第一批列决定 data skipping 能力。
  • 边缘行为:排序键选错,查询退化为全表扫描 granule,稀疏索引形同虚设;上线后无法低成本原地重排,必须建新表回灌数据。ReplacingMergeTree 的去重依赖后台 merge 或查询时 FINAL:merge 前重复版本对查询可见,FINAL 则给每次查询加税。
  • 选型含义:schema 必须由真实过滤模式(最常用的 WHERE 列)倒推设计,不能照搬 OLTP 主键;建表评审是 ClickHouse 项目里 ROI 最高的环节。
  • 来源:官方文档 + 社区共识。

深水区七:对象存储的延迟税——存算分离不是免费午餐

  • 领域:存储架构。
  • 机制一句话:S3 disk 把 part 文件放对象存储,本地只做缓存(filesystem cache);ClickHouse Cloud 则用带直连 SSD 缓存的计算节点 + 分布式缓存弥合差距。
  • 边缘行为:官方博客数据:S3 的 P99.99 延迟约 500ms,SSD 约 1ms——延迟差两个数量级;吞吐可用多线程读 + 异步预取弥合,延迟弥合不了;短查询只读几个压缩块时,延迟是主导瓶颈。merge/mutation 会产生大量小对象 GET/PUT(单次 merge 约百级 S3 操作),放大请求成本与延迟;冷读未命中缓存时查询可能从"毫秒级"掉到"秒级"。自建把 S3 当热存储用,必须把本地缓存命中率、热点分层、对象请求成本算进 POC。
  • 选型含义:S3 适合冷热分层中的冷层;热数据仍建议本地 SSD;Cloud 的分布式缓存是"花钱买延迟"的方案,自建没有等价物。
  • 来源:官方博客(Building a Distributed Cache for S3)+ 社区实测分析。

客户经验

内核 海量事件的 ad-hoc 全表扫描

一句话
向量化执行(SIMD)+ 列存 + 稀疏主键索引三者叠加,让每天数十亿到数万亿事件的明细即席查询秒级返回——查询模式不可预知也无需预先建索引。
窄场景
日志/可观测性/埋点场景里工程师的即席追问;无专职 DBA 调索引、查询模式事先不可枚举的小而精数据团队。预聚合/固定报表场景收益弱。
机制
SIMD 批处理列向量只读需要的列,稀疏索引按 granule 跳过数据块(索引极小、常驻内存);LowCardinality/ZSTD 压缩压存储成本。对比 Druid 摄入时 rollup——牺牲明细 ad-hoc 换查询快;ClickHouse 存明细、查时算,灵活度完全不同。
生产验证
Cloudflare 近十年生产,2025 年 8 月 meetup 现场演示单查询扫描 96 万亿事件/小时 <2 秒(https://clickhouse.com/blog/cloudflare);eBay Sherlock 可观测性平台从 Druid 迁移(800 万 metrics/秒、10 亿原始事件/分钟)(https://altinity.com/webinarspage/migrating-from-druid-to-next-gen-olap-on-clickhouse-ebays-experience);Vimeo 评估 Druid/MemSQL/HBase+Phoenix 后选 ClickHouse,对 Phoenix on HBase 查询快 10 倍(https://medium.com/vimeo-engineering-blog/clickhouse-is-in-the-house-413862c8ac28)。
竞品差距
Druid 5-6 种节点类型运维重(HN 原话:"ClickHouse requires a single node type");ES/OpenSearch 聚合扫描慢、存储贵(迁移案例称存储降 70-85%、聚合快 5-50 倍);StarRocks 扫描接近但更新/高并发评测被反超;DuckDB 无分布式,规模天花板不同。
证据等级
社区共识 + 独立实测 + 生产验证
最后核验
2026-10-01

内核 物化视图 + 表引擎的 DDL 管道哲学

一句话
物化视图在 INSERT 触发时增量计算,配 Buffer 表、TTL/分区 DROP,整套"流式 ETL"用 DDL 表达——小团队用纯 SQL 搭多粒度聚合管道,不用 Flink。
窄场景
写入一次、读多粒度的监控/可观测性平台(1 分钟/15 分钟/1 小时/天聚合自动产出);每分钟百万~十亿级事件。
机制
MV 增量写入目标表(AggregatingMergeTree 存中间聚合态,查询时 -Merge 收尾);eBay 的替换逻辑最说明问题:Druid 方案要三套实时摄入管线(1min/15min/1h 各一套)+ 每日批重索引,ClickHouse 一个 raw 表 + MV 产出所有粒度,部件更少、事故更少。
生产验证
eBay Sherlock 单 raw 表 + MV 生成 1min/15min/1h/daily 聚合(链接见上);Cloudflare raw 日志存 3 个月、1 分钟/1 小时聚合永久保留(https://www.slideshare.net/slideshow/clickhouse-at-cloudflare-by-marek-vavrusa/79778005)。代价诚实收录:MV 是异步的(失败不可见、无内置历史重算,CloudQuery 因此弃用 MV 改 snapshot 表,https://www.cloudquery.io/blog/six-months-with-clickhouse-at-cloudquery?category=);POPULATE 官方明确不推荐(建视图期间写入的数据不进视图);每个 MV 都拖慢写入,写不好的 MV 会 OOM 服务器。
竞品差距
Druid rollup 绑摄入端,改粒度=重搭管线(eBay 案例即实证);31 款中无第二家把"insert 触发增量 MV + 表引擎"做成同等开箱即用与案例厚度。
证据等级
社区共识 + 生产验证;代价部分为社区共识(Tinybird、CloudQuery)+ 官方文档
最后核验
2026-10-01

内核 Kafka 表引擎准实时写入

一句话
Kafka 表引擎直接消费 topic,配一个物化视图持续搬运进 MergeTree——连接器和 ETL 都在数据库内部,无 Flink/Spark Streaming。
窄场景
Kafka→OLAP 秒~分钟级新鲜度的事件分析(日志、埋点、监控);不想运维流处理组件、只想"数据进 Kafka 就能查"的团队。
机制
语义是 at-least-once(offset 在 block 落盘后提交,崩溃在远端 ack 与 offset 提交之间会重放);社区标准解法是让写入幂等(以 offset/UUID 为 key 的 ReplacingMergeTree,或读时 argMax 去重,block 级 insert_deduplication_token 兜底简单重放);2025-2026 年官方 clickhouse-kafka-connect 用 Keeper 状态机实现 exactly-once。
生产验证
Cloudflare Kafka→ClickHouse 管道 2017 年已达百万行/秒写入、100+ 维度查询(https://www.slideshare.net/slideshow/clickhouse-at-cloudflare-by-marek-vavrusa/79778005);spate-etl 独立基准实测 at-least-once 语义(offset 在 MV 落盘后提交、崩溃重放只产生 duplicate metric 不丢数)(https://github.com/spate-etl/benchmark/blob/HEAD/entrants/clickhouse-kafka-engine/README.md)。边界:原生引擎只有 at-least-once,重复数据要业务层消化;"实时"=秒~分钟级 batch 可见性;Tinybird 自研背压系统("Kafka 做缓冲太贵且不合适")。
竞品差距
Druid/Pinot 流摄入更成熟(Pinot 实时 upsert 是其招牌),但 ClickHouse 的差异化是"零外部流处理组件";StarRocks Routine Load 类似定位但案例厚度不及。31 款中把"表引擎当连接器 + MV 当 ETL"做成惯例的只有 ClickHouse。
证据等级
官方文档 + 社区共识 + 独立实测;exactly-once 连接器为官方口径(2025-2026 新功能,未见独立复现)
最后核验
2026-10-01

避坑 没有优化器:JOIN 弱、更新慢、运维心智负担

一句话
社区名言"ClickHouse does not have an optimizer; you are the optimizer"——JOIN 弱、更新慢、批量写入纪律、Keeper 运维,省下的 DBA 工时换成了引擎调优工时。
窄场景
谁最容易中招——事实表 JOIN 维表的 BI(大表 JOIN 要求右表进内存,否则 OOM;单查询官方建议不超 3-4 个 JOIN);高频小批量写入的团队(parts 膨胀,merge 追不上 insert);想"交钥匙"的团队。
机制
mutation 是后台重写 part,又慢又重;小批量高频 INSERT 产生 parts 膨胀(生产第一杀手,解法是攒批/Buffer 表/Kafka 前置);ON CLUSTER DDL 靠 Keeper/ZooKeeper 协调,Keeper 挂掉 ReplicatedMergeTree 表进只读模式、Distributed 后台队列静默堆积;DDL 队列、merge 队列、mutation 是监控必看项。
生产验证
CloudQuery Lesson 1:事实表 JOIN 维表被 OvercommitTracker 杀掉,改字典后内存 50GB→3.5GB(https://www.cloudquery.io/blog/six-months-with-clickhouse-at-cloudquery?category=);Tinybird 5 年复盘:"排序键设计差 10-100 倍性能差异""Read only tables(撞上基本完蛋)"(https://dev.to/tinybirdco/lessons-learned-from-5-years-operating-huge-clickhouser-clusters-part-ii-g6g);独立顾问 PoC(同硬件):StarRocks 亚秒更新"像 OLTP 一样 just works",ClickHouse 只能靠"写 delta 值 + 查询时聚合"的 workaround(https://medium.com/israeli-tech-radar/starrocks-a-database-too-fast-for-its-own-good-eb86954fc7ea)。
竞品差距
StarRocks 有真 CBO+JOIN,更新/高并发评测反超;Druid 运维更重但实时摄入成熟;Snowflake 交钥匙但账单不可预测。Altinity CEO:"Running ClickHouse in production is like flying a jet…It is not like Snowflake"——要开盖修引擎。
证据等级
社区共识(Tinybird、CloudQuery)+ 独立实测
最后核验
2026-10-01

用户最买账的 5 点

  1. 扫描聚合的速度与成本效率 为什么是真的:列存 + 向量化 + 高压缩,TB 级宽表聚合秒级返回;单机效率高意味着达到同样吞吐所需机器数少。 边缘与失效条件:只在"读少量列、扫大量行"的 OLAP 模型下成立;点查、宽行返回、高频小更新下优势消失甚至反杀;压缩比依赖列基数与 codec。 来源:官方文档 + 社区共识。观察版本:25.8 LTS。
  2. 高压缩、冷热分层与 TTL 为什么是真的:列存压缩比高(社区口径常见 5–10x),storage policy 可把冷 part 自动沉降到对象存储,TTL 自动过期/移动分区,日志类场景存储成本可控。 边缘与失效条件:压缩比是"常见"不是"保证";冷热分层的冷读延迟税见深水区七;TTL 按 part 粒度后台清理,不是精确到秒的删除。 来源:官方文档 + 社区实践。观察版本:25.8 LTS。
  3. 秒级实时分析,不必等 T+1 为什么是真的:批量/async insert 下写入后秒级可查,Kafka 表引擎直连流,实时大盘/埋点分析不需要 ETL 链路。 边缘与失效条件:"实时"的前提是批量写入;逐行直写触发 part 债务(深水区一);实时不等于强一致(深水区三)。 来源:官方文档 + 社区共识。观察版本:25.8 LTS。
  4. SQL 与生态接口广度 为什么是真的:标准 SQL 方言、HTTP 一等接口、JDBC/ODBC、MySQL/PG wire 协议、Kafka/S3/Parquet/Iceberg 表函数,BI 工具与现有链路接入成本低。 边缘与失效条件:wire 协议只兼容协议不兼容方言;外部表把外部系统的故障与 schema drift 引进查询链路;s3() 大量小文件曾有 prefetch 回归(26.5 changelog)。 来源:官方文档 + 社区实践。观察版本:25.8 LTS。
  5. Apache 2.0 开源与自建/托管双路线 为什么是真的:内核 Apache 2.0,无 BSL/open-core 限制,自建零授权成本;ClickHouse Cloud 全托管,AWS/GCP/Azure 可用;社区活跃,issue 与文档迭代快。 边缘与失效条件:开源的是代码不是运维能力——分片、Keeper、DDL、升级 runbook 都要自己写;Cloud 使用量计费下,低效查询直接变成账单。 来源:官方口径 + 社区共识。观察版本:25.8 LTS。

吐槽清单

分类吐槽影响版本状态
写入高频小 INSERT 攒出海量 part,最终 TOO_MANY_PARTS 拒绝写入全版本open
更新删除ALTER UPDATE/DELETE 异步重写 part,无普通回滚,大范围 mutation 拖慢整表全版本partially-fixed
事务无通用多语句 ACID 事务与标准隔离级别全版本open
一致性默认异步复制,读其他副本可能读到旧状态;quorum 写把延迟/可用性代价还回来全版本open
DDLON CLUSTER 客户端超时后仍在后台执行,节点间 schema 可能漂移,需逐节点校验全版本open
DDL25.8 operator replicas_path 不匹配导致分布式 DDL 挂起(altinity/clickhouse#1391,修复状态本轮未复核)25.8 相关组合partially-fixed
查询默认 hash join 大右表直接 MEMORY_LIMIT_EXCEEDED,不是变慢是变死全版本partially-fixed
建模ORDER BY 排序键选错等于物理布局选错,后期只能建新表回灌全版本open
去重ReplacingMergeTree 去重最终一致,merge 前重复可见,FINAL 给每次查询加税全版本open
扩展自建分片/再平衡不够自动化,加节点不等于数据自动就位全版本open
升级默认值/SQL 行为/元数据变化影响降级,官方不承诺通用无损回退;26.6 起默认构建要求 AVX2全版本 / 26.6+open
可观测性自观测日志(query_log 等)本身是 MergeTree 表,不配 TTL 会吃掉大量磁盘全版本open
安全权限不足时 HTTP 返回 500 而非 403,ACCESS_DENIED 藏在 500 里,排障与监控容易误判全版本open
审计query_log 可被有权限用户关掉(log_queries=0),不锁 writability 就不是可靠审计全版本open

判决

适合谁:TB~PB 级追加写为主的分析场景——用户行为/埋点分析、日志与可观测性、实时大盘/广告/风控特征、数据仓库加速层;团队能接受"批量写入、预聚合、非范式化宽表"的建模纪律,且有专人负责分片/Keeper/升级 runbook。

不适合谁:需要多语句 ACID 事务的 OLTP;高频行级更新/删除(库存、余额、订单状态机);强一致读写的金融核心账务;指望"加节点自动搞定一切"的零运维团队;ORM 自动生成 SQL 重度依赖且不愿改写的项目。

迁移成本:中等偏高。SQL 方言迁移相对平滑,但真正的成本在三处:(1) 建模重构——排序键、分区、宽表预 join、更新改 TTL/DROP PARTITION;(2) 写入链路改造——批量/async/Kafka 聚合;(3) 运维体系重建——Keeper、分片拓扑、分布式 DDL、备份恢复演练。从 MySQL/PG 迁来,最大的坑是把 OLTP 习惯(逐行写、频繁 UPDATE、事务)原样搬过来。

来源与待验证清单

  • 官方文档:ClickHouse 文档(系统表、操作、接口章节)、ClickHouse Cloud 计费博客、S3 分布式缓存博客、26.6 changelog(x86-64-v3 默认构建)。
  • 社区实践:Altinity 安全/审计/升级知识库、clickhouse-diagnostics 已知模式、clickhouse-expert 系列 skill(复制分片、安全、客户端集成、数据摄入)。
  • GitHub:altinity/clickhouse#1391(25.8 operator 分布式 DDL 问题)。
  • 第三方分析:Beton ClickHouse Cloud 价格拆解(2026-05,仅作商业模式参考,未引用绝对价格)。
  • 本轮明确未覆盖:ClickHouse Cloud 控制面审计边界、向量检索/embedding 能力的版本细节——标待验证,未写入结论。
  • v1.0(2026-09-29):首版建档。last_reviewed: 2026-09-29,评审版本 25.8 LTS(兼注 26.x 滚动版本差异)。