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

【列存引擎内核】DuckDB 架构与嵌入式 OLAP

文章导航

分类入口
databasearchitecture
标签入口
#duckdb#embedded-olap#row-group#column-segment#pg-duckdb#columnar-storage

目录

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 分支源码结构)。


一、部署模型:in-process vs server

维度 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 远程子计划(联邦另说)。


三、Storage:Table → Row Group → Column Segment

DuckDB 持久化列存与 ClickHouse Part 不同:

ClickHouse MergeTree DuckDB
Part 目录 + 每列 .bin/.mrk Row Group 内 Column Segment
后台 merge 合成大 Part Checkpoint 合并 + vacuum
primary.idx 稀疏索引 Zone map / statistics

3.1 Row Group

默认约 122880 行 一组(版本可能调整,以 STORAGE_ROW_GROUP_SIZE 或文档为准)。Row Group 是 并行与压缩 的单元——类似 ClickHouse Granule(第 02 篇) 的上层容器。

3.2 Column Segment

每列在每个 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]

3.3 Checkpoint

DuckDB 周期性 checkpoint 把内存表数据刷入文件、整理 WAL 式日志(实现细节见 src/storage/checkpoint/)。对比 ClickHouse 始终写 Part + 异步 merge——DuckDB 更偏 单文件 SQLite 生命周期

3.4 外部文件:Parquet / CSV

SELECT count(*) FROM read_parquet('data/*.parquet');
CREATE TABLE t AS SELECT * FROM read_parquet('events.parquet');

零拷贝式分析:不 import 也可查 Parquet——列存格式对齐 DuckDB 向量化读(见 第 12 篇 Pipeline)。


四、Catalog 与类型系统

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 用 NestedJSON 类型(版本差异)应对类似需求——语法不互通。


五、事务与并发

DuckDB 支持 ACID 事务(单写者多读者模型演进中,1.x 文档强调并发读 + 写串行化程度因版本改进)。与 ClickHouse 无经典 OLTP 事务 对比鲜明。

操作 DuckDB ClickHouse MergeTree
BEGIN/COMMIT 支持 不支持跨语句事务
UPDATE/DELETE 支持(重写 Row Group) Mutation 异步
并发写 受限 高 ingest

边界:DuckDB 不是高并发 OLTP 替代品;ClickHouse 不是银行核心账务库。


六、扩展生态:httpfs、postgres_scanner、pg_duckdb

6.1 httpfs / S3

INSTALL httpfs;
LOAD httpfs;
SET s3_region='us-east-1';
SELECT * FROM read_parquet('s3://bucket/data/*.parquet');

云数据湖 探查 场景 DuckDB 极常出现——无需起集群。

6.2 postgres_scanner

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 桥。

6.3 pg_duckdb

PostgreSQL 扩展 pg_duckdb(社区/官方协作演进)把 DuckDB 嵌入 PG 进程执行分析查询——「PG 权限 + DuckDB 向量执行」。与 ClickHouse 作 PG 副本 是不同架构:


七、内存模型

DuckDB 默认 aggressive 使用可用内存做 hash join / aggregate spill 前缓冲。Settings 如:

嵌入式 Python 中常:

con.execute("SET memory_limit='4GB'")
con.execute("SET threads=4")

无 fabricated 性能数字——笔记本与服务器差异极大。


八、与 ClickHouse 存储对照表

机制 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 篇


九、适用场景边界

9.1 DuckDB 主场

9.2 不应 sole 依赖 DuckDB


十、CLI 与文件布局

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();

输出须本地执行后解读。


十一、源码阅读路线

  1. src/storage/data_table.cpp — Table 入口
  2. src/storage/table/row_group.cpp — Row Group
  3. src/storage/table/column_segment.cpp — Segment 压缩与 scan
  4. src/execution/physical_operator.cpp — 算子基类
  5. src/parallel/executor.cpp — 并行调度(衔接第 12 篇)

官方 Internals PDF/网页与源码注释一致处为 A 级证据。


十二、实验框架(须本地执行)

12.1 Row Group 观察

CREATE TABLE rg_demo AS SELECT range AS id, id % 7 AS g FROM range(500000);
PRAGMA show_tables;
-- 查 storage 相关 pragma(版本以文档为准)

12.2 Parquet 联邦

COPY (SELECT * FROM range(1000000)) TO '/tmp/rg_test.parquet' (FORMAT PARQUET);
SELECT sum(id) FROM read_parquet('/tmp/rg_test.parquet');

12.3 与 ClickHouse 导出互操作

# 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 技术选型的第一步。

附录 A、Column Segment 生命周期

  1. Insert 积累内存 buffer;2. Row Group 满则 compress 写 segment;3. Checkpoint 将 catalog 与 segment pointer 持久化;4. Vacuum/optimize 合并小 segment(视版本 API)。读路径:statistics → 可能 skip → decompress → vector。

附录 B、压缩栈

DuckDB 列 segment 常 轻量编码(RLE/FOR 等)+ 通用 codec。与 CH 第 03 篇 显式 CODEC() 不同,DuckDB 默认自动选择——DDL 控制少,Parquet 外链保留源 compression。

附录 C、嵌套类型示例

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 不互通。

附录 D、扩展列表(1.x 常见)

扩展 用途
httpfs / aws S3/HTTP Parquet
postgres PG attach
icu 排序/.locale
json JSON 函数增强
parquet Parquet 读写

INSTALL ext; LOAD ext; — 离线环境需预装。

附录 E、WAL 与 crash recovery

进程 crash 后 reopen .duckdb replay WAL(实现见 src/storage/wal/)。与 CH 始终 part 可见不同——单文件 DB 需 备份时 checkpoint 减少恢复时间。

附录 F、pg_duckdb 边界

查询通过 PG planner hook 路由 DuckDB 执行 只读分析 子集;写入仍 PG heap。不适合把 PG 当分布式存储再期望 DuckDB 跨节点。与 CH 独立副本 对比:pg_duckdb 少运维、争用 PG RAM。

附录 G、内存与文件锁

多进程同时写同一 .duckdb 文件会失败——嵌入模型 单写者。只读多进程只读模式视版本文档。ClickHouse 多 client 并发写 MergeTree 是常态。

附录 H、Row Group 大小调优

过大 Row Group 降低并行度;过小则 metadata 与压缩效率差。官方默认对多数 OLAP 平衡——改 STORAGE pragma 前须本地 benchmark,本文不给最优值。

附录 I、与 SQLite 对比

同 embed 哲学;DuckDB 列存+向量化面向 OLAP,SQLite 行存 B-Tree 面向 OLTP。SQLite 分析扩展 .load 模块不等价 DuckDB 执行层。

附录 J、术语

术语 含义
Row Group 存储并行/压缩单元
Column Segment 列在 RG 内一段
Checkpoint 持久化快照点
Attach 挂载外部 DB/Parquet

附录 K、Database 文件格式(概念)

.duckdb 为 block 页文件:meta block 指向 catalog、row group index、free list。不像 MergeTree 一 part 一目录——备份=复制文件 时需无并发写。CHECKPOINT 命令强制刷盘。

附录 L、Temp 与 in-memory

:memory: 数据库全 RAM——适合 ephemeral ETL。 spill 仍可能用 temp_directory 即使 DB in-memory。

附录 M、Secret 与配置

CREATE SECRET(版本相关)存 S3 密钥——勿硬编码 SQL。ClickHouse 用 config.xml + env substitution。

附录 N、Unicode 与 collation

ICU 扩展提供 locale 排序——分析中文排序规则时加载 icu。ClickHouse collation 支持因类型而异。

附录 O、Import/Export

EXPORT DATABASE 'd' (FORMAT PARQUET) TO 'dir';
IMPORT DATABASE 'd2' FROM 'dir';

跨版本 import 需版本兼容矩阵查 release notes。

附录 P、Python API 模式

import duckdb
con = duckdb.connect()
con.execute("SET threads TO 4")
rel = con.sql("SELECT * FROM read_parquet('*.parquet')")
rel.df()  # pandas

Arrow 路径:duckdb.query(arrow_table) 避免拷贝。

附录 Q、R 与 Julia

duckdb::dbConnect / DBI;Julia DuckDB.jl——嵌入哲学相同:无 TCP server。

附录 R、Read-only 分析副本

DuckDB 只读 attach 另一 .duckdb 文件(READ_ONLY 模式查文档)——类似 CH replica 但无自动同步。

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

深度 1

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

深度 2

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

深度 3

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

深度 4

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

深度 5

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

深度 6

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

深度 7

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

深度 8

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

深度 9

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

深度 10

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

深度 11

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

深度 12

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

深度 13

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

深度 14

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

深度 15

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

深度 16

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

深度 17

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

深度 18

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

深度 19

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

深度 20

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

深度 21

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

深度 22

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

深度 23

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

深度 24

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


附录 · 工程深化索引

深化 1:Row Group 与 Granule 对照

检查项 说明 关联篇章
机制 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[配置调优]

深化 2:Column Segment 压缩

检查项 说明 关联篇章
机制 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[配置调优]

深化 3: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[配置调优]

深化 4:嵌入式无 TCP 安全面

检查项 说明 关联篇章
机制 嵌入式无 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[配置调优]

深化 5:Arrow 零拷贝路径

检查项 说明 关联篇章
机制 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[配置调优]

深化 6: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[配置调优]

深化 7:扩展加载机制

检查项 说明 关联篇章
机制 扩展加载机制 在 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:单文件 .duckdb 备份

检查项 说明 关联篇章
机制 单文件 .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[配置调优]

深化 9:内存上限 threads 调优

检查项 说明 关联篇章
机制 内存上限 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[配置调优]

深化 10:Parquet 直读 vs 导入

检查项 说明 关联篇章
机制 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[配置调优]

深化 11:WASM 客户端场景

检查项 说明 关联篇章
机制 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[配置调优]

深化 12:R/Julia 绑定

检查项 说明 关联篇章
机制 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[配置调优]

深化 13:只读 attach 模式

检查项 说明 关联篇章
机制 只读 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[配置调优]

深化 14:checkpoint 语义

检查项 说明 关联篇章
机制 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[配置调优]

深化 15:统计信息 auto

检查项 说明 关联篇章
机制 统计信息 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[配置调优]

深化 16:优化器 join order

检查项 说明 关联篇章
机制 优化器 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[配置调优]

深化 17:窗口函数向量化

检查项 说明 关联篇章
机制 窗口函数向量化 在 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:UDF 扩展边界

检查项 说明 关联篇章
机制 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[配置调优]

深化 19:多进程写锁

检查项 说明 关联篇章
机制 多进程写锁 在 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:DuckDB 1.x 版本锚定

检查项 说明 关联篇章
机制 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[配置调优]

深化 21:与 CH MergeTree 差异

检查项 说明 关联篇章
机制 与 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[配置调优]

深化 22:嵌入式 OLAP 选型

检查项 说明 关联篇章
机制 嵌入式 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[配置调优]

深化 23: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[配置调优]

深化 24:本地分析笔记本场景

检查项 说明 关联篇章
机制 本地分析笔记本场景 在 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:storage 层源码入口

检查项 说明 关联篇章
机制 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[配置调优]

深化 26:Row Group 与 Granule 对照

检查项 说明 关联篇章
机制 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[配置调优]

深化 27:Column Segment 压缩

检查项 说明 关联篇章
机制 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[配置调优]

深化 28: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[配置调优]

深化 29:嵌入式无 TCP 安全面

检查项 说明 关联篇章
机制 嵌入式无 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[配置调优]

深化 30:Arrow 零拷贝路径

检查项 说明 关联篇章
机制 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[配置调优]

深化 31: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[配置调优]

深化 32:扩展加载机制

检查项 说明 关联篇章
机制 扩展加载机制 在 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. DuckDB Documentation, Internals, duckdb.org/docs/internals, 1.x
  2. DuckDB Source, src/storage/, src/execution/
  3. Raasveldt & Mühleisen, DuckDB: an Embeddable Analytical Database, SIGMOD 2019 demo
  4. ClickHouse Documentation — 部署对照

同主题继续阅读

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

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 .