Skip to content

0. ClickHouse 学习路线图(施工总图)

本文档把 task.md 第六节的 19 章大纲展开成可执行的施工排期表,作为后续每一章节产出的「图纸」。每一行回答四个问题:

  1. 这一章要让读者学会什么
  2. 要写多少字才足够把概念讲透又不至于啰嗦?
  3. 要附上哪些可运行的实战
  4. 配套的 HTML 演示页面试题怎么落地?

0.1 为什么先做一份施工图

写一本「从 0 到 1 的 ClickHouse」教程不像写几篇博客 —— 19 章之间有强烈的依赖关系:

  • 第 1 章不把「列式存储 + 向量化」讲透,第 5 章 MergeTree 的稀疏索引就没法理解。
  • 第 3 章不把 LowCardinality / AggregateFunction 讲清楚,第 6、10 章的 SummingMergeTree 和物化视图就是空中楼阁。
  • 第 12 章 Mutation 不先把「ClickHouse 的 UPDATE/DELETE 是后台异步重写」讲明白,读者面试时就会拿 MySQL 的脑回路去答题。

所以我们先把全本骨架钉死:每一章的核心知识点、需要交付的代码物、面试题数量、章节字数预算,全部摊到一张表里。后续 18 个章节按表施工,避免跑题、漏点、字数失控。

总体节奏遵循「先用、再懂、最后调」:

第 1-3 章   入门三件套:是什么 / 怎么连 / 类型怎么选
第 4-6 章   核心引擎:MergeTree 家族原理与变体(教程灵魂区)
第 7-9 章   日常使用:写入读取最佳实践 / 聚合 / JOIN 与字典
第 10-12 章 进阶能力:物化视图 / TTL / Mutation
第 13-15 章 分布式与多租户:副本分片 / 集成生态 / 权限
第 16-18 章 性能与运维:调优 / 监控 / 生态扩展
第 19 章   综合实战:把前 18 章串起来做一个真实项目

📌 说明:本表是「目标」而非「契约」。教程在执行过程中如发现某一章实际超过 1.5 倍预算字数,会拆章而非压缩;如果某一章不到 60% 预算,会回炉补例。所有「核心知识点」一栏的术语都是首次出现必须解释的硬性要求,不允许默认读者会。


0.2 19 章施工表

序号章节名预计字数核心知识点实战案例演示页要点面试题数量
01ClickHouse 是什么 & 为什么快5000~7000OLAP vs OLTP;列存 vs 行存;向量化执行;LZ4/ZSTD/Delta 压缩;ClickHouse 历史与生态位(Doris/Druid/StarRocks/Pinot 对比)hello_ck.py:连本地 8123,建库 learn_ck,建演示表,跑一条聚合行存 vs 列存 IO 演示(可调列数);向量化批处理 1024 行动画;OLAP 数据库定位象限5~8
02客户端与基础 SQL4500~6000clickhouse-client / HTTP / JDBC 三种入口;库 / 表 / 视图三级结构;DDL / DML / DQL;SHOW / DESCRIBE / SYSTEM 命令族;FORMAT 全家桶;ClickHouse 与标准 SQL 的差异init.sqlevents 表灌 1 万行;basic_query.py 五种常用查询模式HTTP 接口模拟器(输入 SQL → curl);FORMAT 全家桶预览;SYSTEM 命令速查卡5
03数据类型详解5000~7000Int* / UInt* / Float* / Decimal*String / FixedString / LowCardinalityDate / Date32 / DateTime / DateTime64UUID / Enum / IPv4/6Array / Tuple / Map / NestedNullable 的代价;AggregateFunctionSimpleAggregateFunction;CAST 转换族init.sql 建覆盖各典型类型的 type_demo 表;types_play.py 写入与查询所有类型,演示 LowCardinality 节省内存LowCardinality 字典编码可视化;Nullable 额外存储成本演示;Array/Map/Nested → 列存布局5
04表引擎全景图5000~6500MergeTree 家族 / Log 家族 / Memory / File / URL / MySQL / PostgreSQL / Kafka / S3 / Distributed / Materialized*;引擎选型决策树7 种引擎建表与对比;从 MySQL 引擎读取真实表引擎家族图;选型决策流程;Kafka → MV → MergeTree 数据流动画5
05MergeTree 核心原理(灵魂章)7000~9000Part 目录结构;primary.idx 稀疏索引;Mark 与 Granule;index_granularity = 8192;Skip Index:minmax/set/bloom_filter/ngrambf_v1;PARTITION BY / ORDER BY / PRIMARY KEY 三者关系千万级造数脚本;EXPLAIN PIPELINE 跑通;对比开关 Skip Index 的扫描量Part 目录结构可视化;稀疏索引跳 Granule 动画;Skip Index 命中率对比6
06MergeTree 家族进阶6000~8000ReplacingMergeTree 去重;SummingMergeTree 预聚合;AggregatingMergeTree + AggregateFunctionCollapsingMergeTree / VersionedCollapsingMergeTree 行折叠;GraphiteMergeTreeFINAL 关键字代价同一份订单数据用 4 种引擎建表;演示去重 / 折叠 / 汇总过程;FINAL 性能影响后台 Merge 动画;ReplacingMergeTree 去重过程;Collapsing 行折叠演示6
07写入与读取最佳实践5000~6500批量写入;小批次的代价;async_insertBuffer 引擎;INSERT ... SELECT;FORMAT 全家桶;max_threads / max_memory_usage单条 vs 批量写入耗时对比;async_insert 启用前后对比;CSV/Parquet/JSONEachRow 互转写入路径全景图;async_insert 缓冲池演示;并发查询线程分配5
08聚合、窗口函数与数组6000~7500GROUP BY / WITH ROLLUP / CUBE / TOTALS;HAVING;uniq* / quantile* / topK / argMax 函数族;窗口函数;ARRAY JOIN;高阶 lambda 函数UV / PV / 留存 / 漏斗 5 种典型查询聚合函数家族图;ARRAY JOIN 展开过程;窗口函数滑动动画5
09JOIN 与字典5000~6500INNER/LEFT/RIGHT/FULL/CROSS/ANY/ASOF JOIN;JOIN 内存代价;GLOBAL JOIN;Dictionary 作为「右表」;字典源 mysql/postgresql/http/file大表 JOIN vs 字典查找耗时对比;ASOF JOIN 时序场景字典加速 JOIN 动画;大表 JOIN 内存爆炸演示5
10物化视图与 Projection(灵魂章)6500~8000普通视图 vs 物化视图;POPULATE 的坑;链式 MV;AggregatingMergeTree + MaterializedView 实时聚合;Projection 与 MV 的取舍实时 UV 物化视图;广告漏斗 MV;Projection 加速分组查询MV 触发时机演示;链式 MV 数据流;Projection vs MV 选型对比6
11TTL、分区与数据生命周期4500~6000PARTITION BY 设计原则;TTL ... DELETE / TO VOLUME / TO DISK;冷热分层;分区裁剪;OPTIMIZE TABLE ... FINAL 代价7 天明细 + 90 天聚合的分层方案;冷热分层 SSD/HDD 演示TTL 数据搬家动画;分区裁剪命中可视化5
12Mutation:UPDATE / DELETE 的真相4500~6000ALTER TABLE … UPDATE/DELETE异步重写机制;system.mutations;轻量级 DELETE;REPLACE PARTITION;为什么 ClickHouse 不适合频繁改重写型 vs 轻量 DELETE 对比;REPLACE PARTITION 安全更新Mutation 后台重写过程;lightweight DELETE 逻辑标记演示5
13副本与分布式(灵魂章)7000~9000ReplicatedMergeTree + Keeper;副本同步流程;Distributed 引擎与本地表;分片键;internal_replication;读写路径全景3 节点集群(mock / 单机模拟);分布式表读写演示副本同步动画;fan-out/fan-in 查询执行链路6
14集成生态4500~6000Kafka 引擎;MaterializedPostgreSQL;S3 / HDFS 读写;MySQL / PostgreSQL 表函数;remote() 跨集群;Airbyte / DebeziumKafka → ClickHouse 实时摄入完整链路Kafka 消费动画;跨库 federation 查询演示5
15权限、配额与多租户4000~5500用户与 Profile;GRANT / REVOKE;行级 / 列级权限;Quota;max_memory_usage 等关键限制;SQL 防御性配置多租户场景实操:建用户、配 quota、加行级策略权限矩阵交互;quota 触发演示5
16性能调优与查询分析6000~7500EXPLAIN PLAN / PIPELINE / ESTIMATEsystem.query_log / system.parts / system.metricstrace_log 与火焰图;常见慢 SQL 模式5 种慢 SQL 模式 + 优化前后对比;trace_log 抓取火焰图查询计划树可视化;query_log 分析仪表板6
17运维与可观测5000~6500关键 config.xml / users.xmlSYSTEM 命令族;BACKUP / RESTORE + clickhouse-backup;升级与版本兼容;Prometheus / Grafana 监控一键备份 / 恢复脚本;Prometheus exporter 配置监控面板示意;备份恢复流程5
18生态与扩展4500~6000UDF(SQL UDF / Executable UDF);clickhouse-local 单机分析;chdb 嵌入式;与 Spark / Flink / Superset / Metabase 集成注册一个 SQL UDF;用 clickhouse-local 跑 CSV;chdb in PythonUDF 调用链;clickhouse-local vs server 对比5
19综合实战项目8000~10000选题:实时埋点分析平台;从建模 → 摄入 → 物化视图 → 查询 → 看板,全链路打通完整项目(造数 + 建表 + Kafka 接入 + MV + 仪表板)全链路动画;端到端延迟分解5

字数小计:约 10.7 万 ~ 14.5 万字(不含代码)。按每天 6000 字推进,约 18~24 个工作日完成正文;演示页与代码并行产出。

面试题小计:约 100 题,最终汇总到 interview.md


0.3 灵魂章节优先级

task.md 第八节的优先级建议:

优先级章节理由
⭐⭐⭐第 1 章 ClickHouse 是什么决定读者「学不学得下去」的第一印象,所有后续概念都要在这里铺垫
⭐⭐⭐第 5 章 MergeTree 核心原理ClickHouse 灵魂,没有它整本书就只是一本 SQL 手册
⭐⭐⭐第 6 章 MergeTree 家族进阶大量「面试杀手题」(FINAL / Replacing 去重时机)都在这里
⭐⭐⭐第 10 章 物化视图与 Projection真正把 ClickHouse 用到「实时数仓」高度的关键能力
⭐⭐⭐第 13 章 副本与分布式生产环境必须,分布式 SQL 的 fan-out / fan-in 是大数据面试常考点
⭐⭐第 3 章数据类型 / 第 9 章 JOIN 与字典 / 第 16 章性能调优日常使用与调优的根基
其余章节保持节奏,不深挖不水文

0.4 通用写作约束(与 task.md 对齐)

  1. 每章四件套缺一不可.md 正文 + demo.html 演示页 + 实战代码(code/*.py / init.sql / seed.py)+ ## 面试高频题 小节。
  2. 首次术语必解释:所有第一次出现的术语都要先用一段话「先讲是什么」再用。
  3. 生活化类比 + ASCII 图 + Mermaid 图三件武器:晦涩点必须先打比方,再上图。
  4. 代码可复制即用:所有 SQL / Python / HTML 都假设 ClickHouse 已经在 127.0.0.1:8123 跑着,读者复制即可执行。
  5. 面试题统一格式:题目 / 考察点 / 标准答案 / 加分项 / 易错点 / 与 MySQL/PG(或同类 OLAP)对比。
  6. 性能结论必须可复现:写明数据量 / 机器规格 / SQL,并以 system.query_log 的客观指标对比。
  7. HTML 演示页深色科技风:主色用 ClickHouse 黄 #fbff37 + 紫蓝 #5a64ea,参考 Postgre 教程 demo 的卡片化布局。

0.5 章节交付物清单(路径全部相对 learnNote/clickhouse/

learnNote/clickhouse/
├── 0_learn_plan.md              # 本文件
├── README.md                    # 教程入口
├── docker-compose.yml           # 一键起 ClickHouse + Keeper
├── requirements.txt             # Python 依赖

├── 01_intro.md
├── 01_intro/
│   ├── demo.html                # 行存 vs 列存 / 向量化 / OLAP 象限
│   └── code/
│       └── hello_ck.py

├── 02_client_basic.md
├── 02_client_basic/
│   ├── demo.html                # HTTP 接口 / FORMAT / SYSTEM 速查
│   ├── init.sql
│   └── code/
│       └── basic_query.py

├── 03_data_types.md
├── 03_data_types/
│   ├── demo.html                # LowCardinality / Nullable / Array
│   ├── init.sql
│   └── code/
│       └── types_play.py

├── 04_engines.md ~ 19_project.md  # 后续章节
├── interview.md                 # 面试题总索引
├── appendix_cheatsheet.md       # 常用命令 / 函数速查
├── appendix_ck_vs_mysql.md      # 与 MySQL/PG 对比速查
└── appendix_pitfalls.md         # 踩坑案例集

📌 下一步:按表格执行第 1 章。第 1 章是「门面章」,必须把列式存储、向量化、压缩三大法宝讲透;不达标 → 回炉重写。