DDIA 第一版中文翻译:三部分十二章内容地图、在线阅读功能与 Hugo 站点构建指南

原创2026-10-02 15:21:081,965 阅读
文章标签:文档知识库教程

DDIA 第一版中文翻译:三部分十二章内容地图、在线阅读功能与 Hugo 站点构建指南

《Designing Data-Intensive Applications》(DDIA,设计数据密集型应用)第一版是数据系统领域的经典读物,本仓库以 content/v1/ 目录完整保留其中文译文,并配套章节树、稳定图号交叉引用、全文搜索、整书打印与 llms.txt 输出等现代阅读设施。本文以仓库中的 第一版首页 为骨架,结合 目录页、三个部分的章节概览与站点配置源码,系统梳理第一版的十二章节内容地图、在线阅读功能实现,以及用 Hugo 自行构建该站点的完整方法,帮助读者快速定位章节、理解数据系统三大主线,并掌握站点的构建与校订流程。

第一版在仓库中的定位

DDIA 第一版的中文翻译由 冯若航(Vonng) 与众多贡献者共同完成,仓库在提供第二版译文的同时,完整保留了第一版的中文译文与稳定链接。这是因为许多文章、课程与讨论至今仍引用第一版的章节编号和图号(见 首页说明),保留第一版既便于读者继续访问旧链接,也方便与第二版逐章对照。

从仓库结构看,第一版内容全部组织在 content/v1/ 目录下:

首页以一句译序点题:"不懂数据库的全栈工程师不是好架构师"。第一版全书沿着可靠性、可伸缩性与可维护性展开,系统讲解数据模型、存储、复制、分区、事务、一致性,以及批处理和流处理——这也是评价任何数据系统的三条主线。

三部分十二章:内容地图

第一版共十二章,分为三个部分。各部分概览页(part-i/part-ii/part-iii)在每章正文之前给出了该部分的定位、章节要点与锚点索引,是快速定位内容的最佳入口。

第一部分:数据系统基础(第 1–4 章)

见 content/v1/part-i.md,本部分介绍数据系统底层的基础概念,无论单机数据系统还是分布式数据系统均适用:

  1. 第一章 · 可靠性、可伸缩性和可维护性(ch1):定义全书术语与方法。章节从"数据密集型应用"出发——与计算密集型相对,这类应用的瓶颈通常在数据量、数据复杂性与数据变化速度,而非 CPU。应用通常由数据库、缓存、搜索索引、流处理、批处理等标准组件拼装而成,当多个工具组合时,应用代码需要负责让缓存/索引与主数据库保持同步,此时开发者事实上成为了复合数据系统的设计者。随后分别展开三大目标:
    • 可靠性:系统在困境(硬件故障、软件故障、人为错误)中仍可正常完成功能并达到期望性能;区分"故障(fault)"与"失效(failure)",并介绍通过故意触发故障(如 Netflix Chaos Monkey)来提高容错信心的反直觉做法;
    • 可伸缩性:用负载参数(如 QPS、读写比、缓存命中率)描述负载,用百分位数(p50/p99)衡量性能,并讨论垂直伸缩(scale up)与水平伸缩(scale out)的不同策略;
    • 可维护性:从可运维性、简单性与可演化性三个维度,讨论让工程师在系统生命周期内高效工作的设计原则。
  2. 第二章 · 数据模型与查询语言(ch2):比较关系模型、文档模型与图数据模型,分析不同数据模型适用的应用场景。
  3. 第三章 · 存储与检索(ch3):深入存储引擎内部,研究数据库如何在磁盘上摆放数据,包括日志结构存储与 LSM 树、B 树索引、OLTP 与 OLAP 的区分、列式存储等。
  4. 第四章 · 编码与演化(ch4):比较 JSON、XML、Thrift、Protobuf 等数据编码格式,讨论模式随时间演化的兼容性问题与数据流类型。

第二部分:分布式数据(第 5–9 章)

见 content/v1/part-ii.md,本部分回答"如果多台机器参与数据的存储和检索,会发生什么"。开篇即给出分布式的三个动机:可伸缩性(数据量与负载超出单机能力)、容错/高可用性(单机或数据中心故障时仍能服务)、延迟(全球部署,就近服务用户)。

在架构层面,本部分区分了三种模式:共享内存架构(shared-memory,垂直伸缩,成本超线性增长)、共享磁盘架构(shared-disk,受竞争与锁定开销限制)与无共享架构(shared-nothing,水平伸缩,本部分讨论的重点——它最需要谨慎对待,因为数据库无法把分布式系统的约束与权衡魔术般地隐藏起来)。数据分布在多个节点上有两种常见方式:

  • 复制(Replication):在多个节点保存相同副本,提供冗余并改善性能,见 第五章;
  • 分区(Partitioning):把大型数据库拆成更小的分区(分片)指派给不同节点,见 第六章。

两者经常同时使用。下图即 第二部分概览页 中的图 II-1,展示了一个数据库切分为两个分区、每个分区各有两个副本的典型布局:

数据库切分为两个分区,每个分区有两个副本

其余章节继续深入分布式系统的核心难题:

  • 第七章 · 事务(ch7):事务的棘手概念、弱隔离级别(读已提交、快照隔离等)与可串行化;
  • 第八章 · 分布式系统的麻烦(ch8):故障与部分失效、不可靠的网络、不可靠的时钟,以及"知识、真相与谎言"——讨论系统可能做出的错误假设;
  • 第九章 · 一致性与共识(ch9):一致性保证、线性一致性、顺序保证,以及分布式事务与共识协议。

第三部分:派生数据(第 10–12 章)

见 content/v1/part-iii.md,前两部分假设应用中只使用一种数据库,而现实系统通常组合多个组件(数据存储、索引、缓存、分析系统等)并需要移动数据的机制。本部分引入两个关键概念:

  • 记录系统(System of record):也称真相源,持有数据的权威版本,每个事实恰好表示一次;
  • 衍生数据系统(Derived data systems):由其他系统数据转换/处理而来,丢失后可从原始来源重建,典型例子是缓存、索引与物化视图。记录系统与衍生数据系统的区别不在于工具,而在于应用中的使用方式。

具体章节:

  • 第十章 · 批处理(ch10):从 Unix 工具链到 MapReduce 与分布式文件系统,再到 MapReduce 之后的数据流引擎;
  • 第十一章 · 流处理(ch11):传递事件流、数据库与流(含变更数据捕获)、流处理语义;
  • 第十二章 · 数据系统的未来(ch12):数据集成、分拆数据库、将事情做正确与做正确的事情,探讨如何构建可靠、可伸缩、可维护的应用。

目录页 content/v1/toc.md 通过 book-toc 与 book-figures 两个短代码自动生成按章、节、插图定位的完整目录;全书编号插图使用稳定图号和锚点,正文中的"图 N-N"引用会同时链接到插图目录中的目标,保证外部引用长期有效。

在线阅读功能:从章节树到整书出版

第一版在线版本围绕阅读体验构建了多项能力(见 首页 与 data/home/v1.yaml):

  • 章节树导航:侧边栏按三个部分折叠展示十二章层级,支持键盘导航与命令面板(按 ⌘ K 搜索全文与常用操作,按 / 运行阅读、版本、语言等命令);
  • 稳定图号与交叉引用:全书约 90 幅编号插图使用稳定图号与锚点,正文引用语义化互联,支持高清缩放(image_zoom);
  • 全文搜索:站点启用本地语言感知的离线全文搜索(hugo.yaml 中 offline_search: true,索引内容为 content,摘要长度 120 字符,最多返回 12 条结果),不依赖外部搜索服务;
  • 顺序阅读:从第一章开始逐章阅读,每页末尾提供上一章/下一章导航;
  • 整书打印:通过 /_print/ 整书打印视图可另存为 PDF;
  • Markdown / llms.txt 输出:站点配置了 outputs: [HTML, print, markdown, LLMS],提供适合工具读取的 Markdown 与 llms.txt 输出(首页 outputs 字段同样声明了这些格式),便于搜索引擎、Agent 与 LLM 直接抓取结构化内容;
  • 评论与勘误:启用基于 giscus 的评论区(comments.type: giscus,仓库 Vonng/ddia,按 pathname 映射),页面可直接跳转编辑或提交问题,第一版内容同样接受勘误与改进。

这些能力在首页数据文件 data/home/v1.yaml 中被归纳为"旧版内容,现代阅读体验":搜索与命令面板、图表与整书出版、开放校订三大支柱。

版本与语言切换机制

站点通过 hugo.yaml 的多语言配置同时承载两版 × 简繁中文四种阅读版本:

语言标识 标签 内容目录 版本
zh 简体 · 二版 content/zh 第二版
tw 繁體 · 二版 content/tw 第二版
v1 简体 · 一版 content/v1 第一版
v1_tw 繁體 · 一版 content/v1_tw 第一版

每个语言块通过 params.versions 声明版本菜单项(如第一版菜单提供"第二版 https://ddia.vonng.com/#"与"第一版 /v1/"两个入口),并各自配置命令面板(start_reading、browse_glossary、print_book)与主导航菜单(完整目录、术语表、后记、贡献)。阅读第二版时,可通过顶部版本菜单随时回到对应语言的第一版首页;语言菜单则在简体与繁体之间切换。

本地构建与运行

仓库是一个 Hugo 项目,通过 Hugo Module 引入 OINK 主题(module.imports 指向 github.com/pgsty/oink),Makefile 提供了完整的开发与发布命令:

dev:            # 开发模式:读取本地 OINK 主题 checkout,显示草稿/未来/过期页面,不写 public/
	HUGO_MODULE_REPLACEMENTS="$(OINK_MODULE) -> $(OINK_LOCAL)" \
		hugo server --renderToMemory -DFE

serve:          # 生产模式预览:压缩输出、禁用快速渲染与热重载
	hugo serve --environment production --minify --disableFastRender --disableLiveReload

build:          # 构建静态站点
	hugo build

check:          # 校验:go mod verify + Hugo 路径/i18n 警告(panicOnWarning)
	GOWORK=off go mod verify
	GOWORK=off hugo --cleanDestinationDir \
		--printPathWarnings --printI18nWarnings --panicOnWarning

translate:      # 由简体中文生成繁体中文版本(OpenCC)
	uv run --with opencc-python-reimplemented==0.1.7 -- python bin/zh-tw.py

epub:           # 生成 EPUB 电子书
	bin/epub

其中 dev 目标使用 HUGO_MODULE_REPLACEMENTS 将 OINK 模块替换为本地 checkout,便于主题改动即时可见;check 目标在 CI 场景下对链接与国际化警告零容忍。若只需查看第一版页面,本地 hugo server 启动后访问 /v1/ 路径即可。

授权说明与贡献方式

首页明确声明:本译文仅供学习研究参考,不追求任何经济利益,不得公开传播发行或用于商业用途;译者保留译文署名权,其他权利以原作者与出版社的主张为准。有能力阅读英文的读者请购买正版支持作者与出版社。

翻译校订与完整贡献记录见 贡献者页面:译者冯若航为 PostgreSQL 专家,校订与维护由 Yin Gang(@yingang)负责,繁体中文版本由 @afunTW 维护。截至 2026-09-19,仓库已收录 212 位贡献者,页面按 Issue/PR 记录每条翻译修正、勘误与状态(如"图 10-2 的描述错误""scalability 譯名由可伸縮改為可擴展"等),无论是否采纳、合并或关闭,反馈本身即是贡献。发现内容或排版问题时,可通过贡献者页面的链接提交 Issue 或 Pull Request,第一版内容同样接受持续校订。

登录后查看全文
ddia