2026-06-18 · database / architecture
【列存引擎内核】ClickHouse 与 DuckDB 选型决策
从部署形态、规模、并发、联邦与运维成本五维对比 ClickHouse 与 DuckDB;给出决策树与组合架构,不排名不测虚构 benchmark。

























DuckDB 自称「SQLite for
analytics」:进程内、无服务器、列向量化
OLAP——与 ClickHouse
列存基础(第 01 篇) 的 Server + MergeTree
模型形成对照。Python/R/Julia 通过库直接
import duckdb,SQL
在宿主进程内编译执行;数据可在 .duckdb
文件、内存或外部 Parquet/CSV。
本文建立 DuckDB 1.x 架构心智模型:Catalog → Optimizer → Parallel Pipeline → Column Segment 存储。不排名「谁更强」——第 13 篇 谈选型;本篇锚定 嵌入式分析 路径。
版本锚定:DuckDB 1.x(官方 Internals
文档与 main 分支源码结构)。
| 维度 | ClickHouse Server | DuckDB |
|---|---|---|
| 进程 | 独立 daemon | 嵌入宿主(Python/JVM/CLI) |
| 网络协议 | TCP/HTTP/MySQL 协议 | 无(API / CLI) |
| 并发模型 | 多 client 连接 | 单进程内多线程 pipeline |
| 存储默认 | MergeTree Part 目录 | 单文件 DB + Row Group |
| 典型场景 | 集群 OLAP、日志仓 | 笔记本 EDA、ETL、PG 扩展 |
flowchart TB
subgraph ch [ClickHouse]
SRV[clickhouse-server]
MT[MergeTree Parts]
SRV --> MT
end
subgraph duck [DuckDB Embedded]
APP[Python / R / CLI]
ENG[DuckDB Engine]
DB[(database file)]
APP --> ENG --> DB
end
工程结论:需要 多租户远程 SQL 服务 → ClickHouse(或 Trino 等);需要 脚本内嵌分析、零运维 → DuckDB。
DuckDB 源码顶层(A
级:https://duckdb.org/docs/internals/overview):
| 层 | 目录(约) | 职责 |
|---|---|---|
| Parser / Binder | src/parser/,
src/planner/binder/ |
SQL → 逻辑计划 |
| Optimizer | src/optimizer/ |
谓词下推、JOIN 重排 |
| Execution | src/execution/ |
物理计划、Pipeline |
| Storage | src/storage/ |
Table、Row Group、Segment |
| Catalog | src/catalog/ |
元数据、类型 |
| Transaction | src/transaction/ |
MVCC 简化模型 |
查询路径:
flowchart LR
SQL[SQL] --> P[Parser]
P --> B[Binder]
B --> O[Optimizer]
O --> PP[Physical Plan]
PP --> PL[Pipelines]
PL --> RG[Row Groups / Segments]
与 ClickHouse
Parser → Analyzer → QueryPlan → Processors
同构,但 无 Distributed
远程子计划(联邦另说)。
DuckDB 持久化列存与 ClickHouse Part 不同:
| ClickHouse MergeTree | DuckDB |
|---|---|
Part 目录 + 每列
.bin/.mrk |
Row Group 内 Column Segment |
| 后台 merge 合成大 Part | Checkpoint 合并 + vacuum |
primary.idx 稀疏索引 |
Zone map / statistics |
默认约 122880 行 一组(版本可能调整,以
STORAGE_ROW_GROUP_SIZE 或文档为准)。Row Group
是 并行与压缩 的单元——类似 ClickHouse Granule(第
02 篇) 的上层容器。
每列在每个 Row Group 内一段 Column Segment:
flowchart TB
T[Table]
T --> RG1[Row Group 0]
T --> RG2[Row Group 1]
RG1 --> C1[col_a segment]
RG1 --> C2[col_b segment]
RG2 --> C3[col_a segment]
RG2 --> C4[col_b segment]
DuckDB 周期性 checkpoint
把内存表数据刷入文件、整理 WAL 式日志(实现细节见
src/storage/checkpoint/)。对比 ClickHouse
始终写 Part + 异步 merge——DuckDB 更偏
单文件 SQLite 生命周期。
SELECT count(*) FROM read_parquet('data/*.parquet');
CREATE TABLE t AS SELECT * FROM read_parquet('events.parquet');零拷贝式分析:不 import 也可查 Parquet——列存格式对齐 DuckDB 向量化读(见 第 12 篇 Pipeline)。
DuckDB Catalog 管理 schema、表、宏、序列。嵌入式场景常:
import duckdb
con = duckdb.connect('analytics.duckdb')
con.execute("CREATE TABLE hits AS SELECT * FROM read_parquet('hits/*.parquet')")| 特性 | 说明 |
|---|---|
| 嵌套类型 | STRUCT, LIST, MAP
—— 分析 JSON 友好 |
ENUM |
低基数 string |
| 扩展 | LOAD httpfs; LOAD icu;
社区扩展 |
类型丰富度利于 数据科学;ClickHouse 用
Nested、JSON
类型(版本差异)应对类似需求——语法不互通。
DuckDB 支持 ACID 事务(单写者多读者模型演进中,1.x 文档强调并发读 + 写串行化程度因版本改进)。与 ClickHouse 无经典 OLTP 事务 对比鲜明。
| 操作 | DuckDB | ClickHouse MergeTree |
|---|---|---|
| BEGIN/COMMIT | 支持 | 不支持跨语句事务 |
| UPDATE/DELETE | 支持(重写 Row Group) | Mutation 异步 |
| 并发写 | 受限 | 高 ingest |
边界:DuckDB 不是高并发 OLTP 替代品;ClickHouse 不是银行核心账务库。
INSTALL httpfs;
LOAD httpfs;
SET s3_region='us-east-1';
SELECT * FROM read_parquet('s3://bucket/data/*.parquet');云数据湖 探查 场景 DuckDB 极常出现——无需起集群。
INSTALL postgres;
LOAD postgres;
ATTACH 'dbname=postgres user=...' AS pg (TYPE POSTGRES);
SELECT * FROM pg.public.orders JOIN local_summary USING (id);联邦查询在 DuckDB 进程内 完成——对比
ClickHouse PostgreSQL table engine 或
jdbc 桥。
PostgreSQL 扩展 pg_duckdb(社区/官方协作演进)把 DuckDB 嵌入 PG 进程执行分析查询——「PG 权限 + DuckDB 向量执行」。与 ClickHouse 作 PG 副本 是不同架构:
DuckDB 默认 aggressive 使用可用内存做 hash join / aggregate spill 前缓冲。Settings 如:
memory_limitthreadstemp_directory( spill )嵌入式 Python 中常:
con.execute("SET memory_limit='4GB'")
con.execute("SET threads=4")无 fabricated 性能数字——笔记本与服务器差异极大。
| 机制 | ClickHouse | DuckDB |
|---|---|---|
| 最小 IO 单元 | Granule + Mark | Row Group + Segment |
| 合并 | MergeTree merge | Checkpoint |
| 主键 | ORDER BY 排序键 | 无强制 PK;索引 via ART 等扩展 |
| 跳数索引 | minmax/set/bloom | Segment stats + zone maps |
| 分布式 | Distributed + Keeper | 无内置;靠外部调度 |
| 压缩 | CODEC per column | Automatic + 列压缩 |
读路径对照 查询读取路径(第 05 篇) 与 第 12 篇。
duckdb analytics.duckdb -c "SELECT version()"数据库文件内含:
不像 ClickHouse
data/db/table/part/ 可直接 ls
教学——教学 Part 格式用 clickhouse-local(第
02 篇);DuckDB 用 PRAGMA database_size 等
introspec。
PRAGMA database_size;
SELECT table_name, estimated_size FROM duckdb_tables();输出须本地执行后解读。
src/storage/data_table.cpp — Table
入口src/storage/table/row_group.cpp — Row
Groupsrc/storage/table/column_segment.cpp —
Segment 压缩与 scansrc/execution/physical_operator.cpp —
算子基类src/parallel/executor.cpp —
并行调度(衔接第 12 篇)官方 Internals PDF/网页与源码注释一致处为 A 级证据。
CREATE TABLE rg_demo AS SELECT range AS id, id % 7 AS g FROM range(500000);
PRAGMA show_tables;
-- 查 storage 相关 pragma(版本以文档为准)COPY (SELECT * FROM range(1000000)) TO '/tmp/rg_test.parquet' (FORMAT PARQUET);
SELECT sum(id) FROM read_parquet('/tmp/rg_test.parquet');# ClickHouse 侧(若环境有)
clickhouse-client -q "SELECT * FROM t FORMAT Parquet" > t.parquet
duckdb -c "SELECT count(*) FROM 't.parquet'"不声称转换性能——仅验证格式互通。
DuckDB = 嵌入宿主进程的列向量化分析引擎;Storage 以 Row Group / Column Segment 为核心,checkpoint 维护文件健康。理解其与 ClickHouse Server + MergeTree + Distributed 的分工,是 OLAP 技术选型的第一步。
DuckDB 列 segment 常 轻量编码(RLE/FOR 等)+ 通用
codec。与 CH
第 03 篇 显式 CODEC() 不同,DuckDB
默认自动选择——DDL 控制少,Parquet 外链保留源
compression。
CREATE TABLE events (id BIGINT, props STRUCT(url VARCHAR, status INTEGER));
SELECT props.url FROM events WHERE props.status >= 500;STRUCT/LIST 利于 semi-structured;ClickHouse 用
JSON/Tuple 类型,SQL 不互通。
| 扩展 | 用途 |
|---|---|
| httpfs / aws | S3/HTTP Parquet |
| postgres | PG attach |
| icu | 排序/.locale |
| json | JSON 函数增强 |
| parquet | Parquet 读写 |
INSTALL ext; LOAD ext; —
离线环境需预装。
进程 crash 后 reopen .duckdb replay
WAL(实现见 src/storage/wal/)。与 CH 始终 part
可见不同——单文件 DB 需 备份时 checkpoint
减少恢复时间。
查询通过 PG planner hook 路由 DuckDB 执行 只读分析 子集;写入仍 PG heap。不适合把 PG 当分布式存储再期望 DuckDB 跨节点。与 CH 独立副本 对比:pg_duckdb 少运维、争用 PG RAM。
多进程同时写同一 .duckdb
文件会失败——嵌入模型
单写者。只读多进程只读模式视版本文档。ClickHouse
多 client 并发写 MergeTree 是常态。
过大 Row Group 降低并行度;过小则 metadata
与压缩效率差。官方默认对多数 OLAP 平衡——改
STORAGE pragma 前须本地
benchmark,本文不给最优值。
同 embed 哲学;DuckDB 列存+向量化面向 OLAP,SQLite 行存
B-Tree 面向 OLTP。SQLite 分析扩展 .load
模块不等价 DuckDB 执行层。
| 术语 | 含义 |
|---|---|
| Row Group | 存储并行/压缩单元 |
| Column Segment | 列在 RG 内一段 |
| Checkpoint | 持久化快照点 |
| Attach | 挂载外部 DB/Parquet |
.duckdb 为 block 页文件:meta block 指向
catalog、row group index、free list。不像 MergeTree 一 part
一目录——备份=复制文件
时需无并发写。CHECKPOINT 命令强制刷盘。
:memory: 数据库全 RAM——适合 ephemeral ETL。
spill 仍可能用 temp_directory 即使 DB
in-memory。
CREATE SECRET(版本相关)存 S3
密钥——勿硬编码 SQL。ClickHouse 用 config.xml +
env substitution。
ICU 扩展提供 locale 排序——分析中文排序规则时加载 icu。ClickHouse collation 支持因类型而异。
EXPORT DATABASE 'd' (FORMAT PARQUET) TO 'dir';
IMPORT DATABASE 'd2' FROM 'dir';跨版本 import 需版本兼容矩阵查 release notes。
import duckdb
con = duckdb.connect()
con.execute("SET threads TO 4")
rel = con.sql("SELECT * FROM read_parquet('*.parquet')")
rel.df() # pandasArrow 路径:duckdb.query(arrow_table)
避免拷贝。
duckdb::dbConnect / DBI;Julia
DuckDB.jl——嵌入哲学相同:无 TCP server。
DuckDB 只读 attach 另一 .duckdb
文件(READ_ONLY 模式查文档)——类似 CH replica
但无自动同步。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
第 11 章与系列其它篇章的交叉:读路径见 第 05
篇;merge 见 第 06
篇;索引见 第 07
篇;副本见 第
08 篇;Distributed 见 第
09 篇;监控见 第 14
篇;故障见 第 15
篇;配置见 第 16
篇。 实施任何 setting 变更前,在 staging 用
system.parts / query_log 建立 24h
基线,变更后再对比——避免无证据调参。
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Row Group 与 Granule 对照 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Column Segment 压缩 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 嵌入式无 TCP 安全面 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Arrow 零拷贝路径 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 扩展加载机制 在 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 备份 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 内存上限 threads 调优 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Parquet 直读 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | WASM 客户端场景 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | R/Julia 绑定 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 只读 attach 模式 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | checkpoint 语义 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 统计信息 auto 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 优化器 join order 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 窗口函数向量化 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | UDF 扩展边界 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 多进程写锁 在 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 1.x 版本锚定 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 与 CH MergeTree 差异 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 嵌入式 OLAP 选型 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 本地分析笔记本场景 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | storage 层源码入口 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Row Group 与 Granule 对照 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Column Segment 压缩 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 嵌入式无 TCP 安全面 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | Arrow 零拷贝路径 在 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 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[配置调优]
| 检查项 | 说明 | 关联篇章 |
|---|---|---|
| 机制 | 扩展加载机制 在 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[配置调优]
上一篇:物化视图
src/storage/,
src/execution/把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-06-18 · database / architecture
从部署形态、规模、并发、联邦与运维成本五维对比 ClickHouse 与 DuckDB;给出决策树与组合架构,不排名不测虚构 benchmark。
2026-06-18 · database / architecture
DuckDB 向量批执行、morsel-driven 并行、Pipeline 调度与 spill;源码 execution/parallel 路径;对照 ClickHouse Processors 与 PG volcano 模型。
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 的症状链、根因与缓解;附测试环境复现框架。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。