土法炼钢兴趣小组的算法知识备份

【列存引擎内核】ClickHouse 与 DuckDB 选型决策

文章导航

分类入口
databasearchitecture
标签入口
#clickhouse#duckdb#olap#decision-tree#pg-duckdb#embedded-analytics

目录

前两篇 DuckDB 专题(架构(第 11 篇)Pipeline(第 12 篇))与 ClickHouse 主系列(MergeTree、Distributed、运维)放在一起,读者自然问:同一 OLAP 问题该用谁?

本文给 决策树与组合架构,不做「谁快 10 倍」类结论——WRITING_GUIDE 要求性能判断须实测或引用;此处两者工作负载差异太大,虚构数字无意义。


一、问题 framing:不是替代关系

误区 澄清
DuckDB 是小 ClickHouse 嵌入 vs 服务,存储生命周期不同
ClickHouse 可替代 DuckDB 做 notebook 可以远程连 CH,但运维重量不同
二选一 生产常见 PG OLTP + CH 分析 + DuckDB 本地 EDA
flowchart TB
  Q[分析需求]
  Q -->|远程多用户 PB 级| CH[ClickHouse 集群]
  Q -->|进程内 TB 级| DUCK[DuckDB]
  Q -->|PG 库内加速| PGD[pg_duckdb]
  Q -->|湖仓 Parquet 探查| DUCK
  CH --> PG[(PostgreSQL CDC)]
  DUCK --> PG

二、五维对比矩阵

2.1 部署与接入

ClickHouse DuckDB
部署 server cluster pip install / 单二进制
协议 HTTP/TCP/MySQL wire API
多租户 用户/配额/RBAC 文件级隔离
升级 滚动升级集群 库版本随应用发版

2.2 数据规模与持久化

ClickHouse DuckDB
典型上限 PB 级(分 shard) 单机 TB 级舒适区
文件形态 大量 Part 目录 .duckdb + checkpoint
合并 MergeTree merge 持续 Checkpoint
删改 Mutation 重 UPDATE 重写 RG

Refer Merge(第 06 篇) vs DuckDB checkpoint。

2.3 并发与 QPS

ClickHouse DuckDB
并发 SELECT 高(集群线性扩展) 受 threads 与单文件锁约束
并发 INSERT 极高 ingest 设计 写并发弱
交互延迟 ms~s(视 merge/parts) 本地 ms 级常见

不列 QPS 数字——须用业务 query mix 压测。

2.4 SQL 与生态

ClickHouse DuckDB
SQL 方言 CH 扩展多 PG-like
窗口函数 支持 支持
数组/嵌套 Tuple/Nested LIST/STRUCT
BI 工具 广泛 JDBC/HTTP 增长中
联邦 PostgreSQL/MySQL engine postgres_scanner, httpfs

2.5 运维与故障域

ClickHouse DuckDB
监控 system 表丰富(第 14 篇 轻量 pragma
经典故障 parts/merge/replica(第 15 篇 OOM/spill/文件锁
人力 专职平台常见 应用团队自给

三、决策树(文字版)

START
├─ 是否需要独立 SQL 服务供多团队/BI 远程访问?
│   ├─ 是 → 倾向 ClickHouse(或 Trino/StarRocks 等,本文边界外)
│   └─ 否 → 继续
├─ 数据是否已在 Parquet/CSV 文件 / S3,仅偶尔分析?
│   ├─ 是 → 倾向 DuckDB(read_parquet/httpfs)
│   └─ 否 → 继续
├─ 持续 ingest > 单机磁盘 IO 或需副本 HA?
│   ├─ 是 → ClickHouse ReplicatedMergeTree + Distributed
│   └─ 否 → 继续
├─ 是否必须嵌在 Python/R 进程且无运维?
│   ├─ 是 → DuckDB
│   └─ 否 → 继续
├─ 是否已有 PostgreSQL 且只想加速 ANALYTICAL 查询?
│   ├─ 是 → 评估 pg_duckdb vs CH 外表副本
│   └─ 否 → 按团队技能 CH/DuckDB 二选一
END

四、组合架构模式

4.1 PG + ClickHouse 分析副本

DuckDB 承担中心仓,除非规模小。

4.2 PG + pg_duckdb

4.3 DuckDB 边缘 + ClickHouse 中心

4.4 数据科学 DuckDB + 生产 CH


五、与 PostgreSQL 生态位

需求 推荐路径
强一致 OLTP PG
复杂 JOIN 中小数据 PG 或 DuckDB attach PG
十亿行聚合 CH 或 DuckDB 单机(视 RAM)
实时 dashboard 全公司 CH 集群
Notebook 探索 DuckDB

PG B-Tree 索引语义CH 排序键(第 07 篇) 不同——迁 schema 时勿照搬 PRIMARY KEY 含义。


六、与 LSM / 行存边界

LSM 系列 写优化 ingest(Kafka → CH 也常并存);DuckDB 不取代 Kafka consumer 集群。行存 InnoDB/PG 做源库,列存做 读优化副本——铁三角见 系列 index


七、成本维度(非 benchmark)

成本项 ClickHouse DuckDB
机器 多节点 SSD 0 增量(用现有机器)
运维 headcount
培训 CH 方言 + 分布式 SQL + Python API
云托管 ClickHouse Cloud 等 MotherDuck 等(产品演进快,不评 internals)

八、何时两者都用

合法且常见:

  1. CH 生产仓 + DuckDB 本地复现 bug(拉 sample Parquet);
  2. CH 存全量 + DuckDB 做 ML feature export;
  3. 不同团队技能栈——数据平台 CH,研究 DuckDB。

避免:双写全量 无同步机制——必不一致。


九、反模式

反模式 后果
DuckDB 当多用户 BI server 连接与锁瓶颈
ClickHouse 嵌 Python 每进程起一个 server 资源爆炸
用 GLOBAL JOIN 代替选型 第 09 篇
忽视 CH parts 治理做实时小 batch 第 15 篇
期望 DuckDB 跨机 shard 无内置

十、评估清单(POC 设计)

POC 应 固定 query mix 与数据规模,记录:

  1. 环境:CPU、RAM、磁盘、版本号;
  2. 负载:并发、insert batch size、SELECT 比例;
  3. 指标:p50/p95 延迟、吞吐、磁盘、失败率;
  4. 运维:备份、升级、故障注入(杀进程、断网);
  5. 结论:业务 SLA 是否满足——不输出跨团队通用排名。

十一、小结

无银弹;组合架构多于单选。


附录 A、场景叙事(无性能数字)

A.1 中心化日志平台

特征:PB 级、数千 QPS ingest、多团队 SQL、副本 HA。
选型:ClickHouse ReplicatedMergeTree + Distributed + Kafka MV(第 10 篇)。
DuckDB 位置:分析师本地 sample Parquet,不扛生产 ingest。

A.2 电商 PG 库内报表

特征:单 PG 实例、<1TB 分析表、无专职 CH 运维。
选型:pg_duckdb 或 periodic export + DuckDB notebook。
何时升级到 CH:PG CPU/IO 被分析打满、需独立 SLA。

A.3 数据科学笔记本

特征:S3 Parquet、单用户、交互探索。
选型:DuckDB read_parquet / httpfs。
CH 仅在需共享 dashboard 服务时叠加。

A.4 边缘门店汇总

特征:断网、本地聚合、周期性 upload。
选型:门店 DuckDB 预聚合;中心 ClickHouse 收汇总行。
注意 upload batch 避免中心 too many parts。

A.5 合规数据不出 VPC

特征:敏感数据、禁止第三方 SaaS 分析。
两者均可自建;CH 集群运维更重,DuckDB 嵌入应用更轻——按 运维编制 而非技术绝对优劣。

A.6 HTAP 幻想警示

特征:期望一套系统 OLTP+实时大屏。
现实:PG/Citus OLTP + CH 副本仍主流;DuckDB 不替代 PG 事务;CH 不做行级事务。

附录 B、团队技能矩阵

团队能力 倾向
已有 CH 平台组 新 OLAP 优先 CH
仅 PG DBA pg_duckdb / 只读副本
Python 数据科学 DuckDB 默认
Java BI + JDBC CH JDBC 成熟

附录 C、迁移路径

PG → CH:CDC(Debezium)或批量 COPY → MergeTree;排序键 redesign(第 07 篇)。
CH → DuckDBFORMAT Parquet 导出 → read_parquet;丢失 Distributed/副本,仅便携分析。
DuckDB → CHEXPORT DATABASE / Parquet 中间格式 → CH INSERT;须重设 PARTITION/ORDER BY。

附录 D、合规与驻留

两者均可 on-prem。DuckDB 数据在单文件易拷贝——权限与磁盘加密由宿主应用负责。CH 集群需 RBAC、network isolation、backup 策略(监控 第 14 篇)。

附录 E、FAQ

Q:MotherDuck / ClickHouse Cloud?
托管控制面不在本系列;选型看数据驻留与合同,不评内部实现。
Q:Trino/StarRocks?
联邦或替代 OLAP——超出本系列;CH vs DuckDB 聚焦 MergeTree vs 嵌入 DuckDB。
Q:只用 Parquet lake 呢?
DuckDB 探查 + CH Serving 层是常见 lakehouse 分工。

附录 F、检查清单(POC 出口)

附录 G、角色 RACI 示例

活动 数据平台 应用 分析
CH 集群运维 R/A I I
DuckDB notebook C I R
分片键设计 R C I
PG OLTP I R/A I

R=负责 A=批准 C=协商 I=知会——组织模板,非技术结论。

附录 H、许可证与合规

ClickHouse Apache 2.0;DuckDB MIT——一般企业友好;法务仍审 third-party。数据驻留取决于部署位置非许可证。

附录 I、多租户隔离

CH:database + row policy + network。DuckDB:每租户单文件或单进程——隔离强但运维 multiplication。

附录 J、版本升级策略

CH 滚动升级 LTS track;DuckDB 随应用发版 pin 版本—— regression test on export/import。

附录 K、Skills 培训路径

CH:MergeTree parts + Distributed + system 表(本系列)。DuckDB:SQL + Python + Parquet。PG DBA 转 CH 先纠正索引/事务心智。

附录 L、When both in same company

平台组 CH;研究组 DuckDB;规范 Parquet 作为交换格式 避免双写 truth。

附录 M、Anti-pattern 补充

反模式 说明
DuckDB TCP hack 非设计用途
CH 每微服务 embedded 应用内嵌 CH 库不存在
比较 hello world QPS 无业务 representativeness

附录 N、Open table format 未来

Iceberg/Delta 表上 DuckDB/Trino/CH 外表——lakehouse 选型超出本系列 core,但 Serving 层 仍常 CH。

附录 · 深度补充(系列交叉索引)

深度 1

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 2

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 3

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 4

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 5

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 6

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 7

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 8

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 9

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 10

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 11

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 12

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 13

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 14

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 15

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 16

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 17

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 18

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 19

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 20

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 21

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 22

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 23

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。

深度 24

第 13 章与系列其它篇章的交叉:读路径见 第 05 篇;merge 见 第 06 篇;索引见 第 07 篇;副本见 第 08 篇;Distributed 见 第 09 篇;监控见 第 14 篇;故障见 第 15 篇;配置见 第 16 篇。 实施任何 setting 变更前,在 staging 用 system.parts / query_log 建立 24h 基线,变更后再对比——避免无证据调参。


附录 · 工程深化索引

深化 1:规模:十亿行集群

检查项 说明 关联篇章
机制 规模:十亿行集群 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 2:并发:数百查询

检查项 说明 关联篇章
机制 并发:数百查询 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 3:嵌入:进程内分析

检查项 说明 关联篇章
机制 嵌入:进程内分析 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 4:联邦:pg_duckdb

检查项 说明 关联篇章
机制 联邦:pg_duckdb 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 5:运维:parts 与 merge

检查项 说明 关联篇章
机制 运维:parts 与 merge 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 6:成本:云托管

检查项 说明 关联篇章
机制 成本:云托管 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 7:延迟:点查 vs 扫描

检查项 说明 关联篇章
机制 延迟:点查 vs 扫描 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 8:更新:mutation 代价

检查项 说明 关联篇章
机制 更新:mutation 代价 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 9:副本:Keeper 协调

检查项 说明 关联篇章
机制 副本:Keeper 协调 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 10:安全:网络暴露面

检查项 说明 关联篇章
机制 安全:网络暴露面 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 11:生态:BI 连接

检查项 说明 关联篇章
机制 生态:BI 连接 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 12:SQL 方言差异

检查项 说明 关联篇章
机制 SQL 方言差异 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 13:时序:Gorilla 编码

检查项 说明 关联篇章
机制 时序:Gorilla 编码 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 14:地理:分布式 JOIN

检查项 说明 关联篇章
机制 地理:分布式 JOIN 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 15:日志:Kafka ingest

检查项 说明 关联篇章
机制 日志:Kafka ingest 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 16:数据科学:Python API

检查项 说明 关联篇章
机制 数据科学:Python API 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 17:HTAP 边界

检查项 说明 关联篇章
机制 HTAP 边界 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 18:SQLite 替代

检查项 说明 关联篇章
机制 SQLite 替代 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 19:ClickHouse Cloud

检查项 说明 关联篇章
机制 ClickHouse Cloud 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 20:MotherDuck

检查项 说明 关联篇章
机制 MotherDuck 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 21:决策树:先问部署形态

检查项 说明 关联篇章
机制 决策树:先问部署形态 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 22:决策树:再问并发

检查项 说明 关联篇章
机制 决策树:再问并发 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 23:决策树:最后问联邦

检查项 说明 关联篇章
机制 决策树:最后问联邦 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 24:混合架构:CH 仓 + DuckDB 探索

检查项 说明 关联篇章
机制 混合架构:CH 仓 + DuckDB 探索 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 25:不排名原则

检查项 说明 关联篇章
机制 不排名原则 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 26:规模:十亿行集群

检查项 说明 关联篇章
机制 规模:十亿行集群 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 27:并发:数百查询

检查项 说明 关联篇章
机制 并发:数百查询 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 28:嵌入:进程内分析

检查项 说明 关联篇章
机制 嵌入:进程内分析 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 29:联邦:pg_duckdb

检查项 说明 关联篇章
机制 联邦:pg_duckdb 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 30:运维:parts 与 merge

检查项 说明 关联篇章
机制 运维:parts 与 merge 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 31:成本:云托管

检查项 说明 关联篇章
机制 成本:云托管 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 32:延迟:点查 vs 扫描

检查项 说明 关联篇章
机制 延迟:点查 vs 扫描 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 33:更新:mutation 代价

检查项 说明 关联篇章
机制 更新:mutation 代价 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 34:副本:Keeper 协调

检查项 说明 关联篇章
机制 副本:Keeper 协调 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 35:安全:网络暴露面

检查项 说明 关联篇章
机制 安全:网络暴露面 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 36:生态:BI 连接

检查项 说明 关联篇章
机制 生态:BI 连接 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 37:SQL 方言差异

检查项 说明 关联篇章
机制 SQL 方言差异 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

深化 38:时序:Gorilla 编码

检查项 说明 关联篇章
机制 时序:Gorilla 编码 在 ClickHouse 24.x 中的默认行为 第 05 篇
运维 staging 用 system.parts / query_log 建 24h 基线 第 14 篇
故障 与 parts/merge 相关的典型信号 第 15 篇
配置 相关 setting 变更须可回滚 第 16 篇
flowchart LR
  Q[查询/写入] --> P[parts 状态]
  P --> M[merge 后台]
  M --> MON[system.merges]
  MON --> CFG[配置调优]

上一篇DuckDB Pipeline

下一篇监控与系统表

参考资料

  1. ClickHouse Documentation, 24.x — 部署与用例
  2. DuckDB Documentation, 1.x — 嵌入与扩展
  3. pg_duckdb 项目文档 — 联邦边界
  4. 本系列 PLAN §1.2 对照表

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-18 · database / architecture

【列存引擎内核】物化视图与增量管道

ClickHouse Materialized View 的触发语义、块级增量与目标表引擎选择;Kafka Engine + MV 典型架构;与 PostgreSQL 触发器/MV 的对照及常见坑。

2026-06-18 · database / architecture

【列存引擎内核】经典故障模式

Too many parts、merge 跟不上 insert、mutation 堆积、副本延迟与 lost replica、max_memory_usage OOM 的症状链、根因与缓解;附测试环境复现框架。


By .