本教材的目標
大多數人學資料庫,是從 SQL 語法開始,最後也停在 SQL 語法。本教材的目標不同:我們要回答的是 「資料庫到底是怎麼運作的」——當你輸入 ,從字串被解析、計畫被選出、頁面從 SSD 讀進緩衝池、 MVCC 判定哪個版本可見、到交易提交時 WAL 被刷到磁碟,每一步究竟發生了什麼事。
全書依照「Database Deep-Dive Roadmap」的十九個主題編寫,將資料庫內部拆成四大支柱:
每一章的結構
每章都以相同的節奏編排,方便你規劃學習進度:
本章學習目標:讀完本章後你應該能回答的問題與能做到的事。
核心觀念:以圖解與範例說明機制「為什麼要這樣設計」。
PostgreSQL 內部實作:對照 PostgreSQL 18 的文件、原始碼目錄與 README,讓抽象觀念落地。
常見陷阱 / 實務提示:面試常問、線上事故常見的誤區。
MiniDB 實作連結:說明本章觀念對應到第 19 章 C++ 迷你資料庫專案的哪一個版本。
本章練習:從觀念題、計算題到動手實驗(多數可以直接在 操作)。
延伸閱讀與資源:經過查證、可直接查閱的課程、書籍、論文與官方文件連結。
建議學習順序與難度
本教材的章節順序就是建議的學習順序。難度以 到 表示,越多星代表越需要反覆閱讀與動手實驗。
| 階段 | 主題 | 難度 | 對應章節 |
|---|---|---|---|
| 1 | 關聯模型與關聯代數 | 第 1 章 | |
| 2 | 資料庫儲存與頁面 | 第 2 章 | |
| 3 | B+Tree 與索引 | 第 3 章 | |
| 4 | Buffer Pool | 第 4 章 | |
| 5 | 查詢執行 | 第 5 章 | |
| 6 | 查詢最佳化 | 第 6 章 | |
| 7 | 交易與 ACID | 第 7 章 | |
| 8 | WAL 與當機復原 | 第 8、11 章 | |
| 9 | MVCC | 第 9 章 | |
| 10 | 鎖與並行控制 | 第 10 章 | |
| 11 | LSM-Tree | 第 12 章 | |
| 12 | 行式儲存與 OLAP | 第 13 章 | |
| 13 | 分散式資料庫 | 第 14、17 章 | |
| 14 | Raft / 共識 | 第 15 章 | |
| 15 | 分散式交易 | 第 16 章 | |
| – | 資料庫安全 | 第 18 章 | |
| – | 動手打造 MiniDB(C++) | 第 19 章(貫穿全書) |
若每週投入 6–8 小時,單機部分(第 1–11 章)約需 10–12 週,LSM 與行式儲存 2 週,分散式部分 4–5 週。 第 19 章的 MiniDB 專案建議與各章同步進行:讀完第 2 章就寫 v1 的 heap file,讀完第 3 章就加 B+Tree,依此類推。 不要只讀不寫——「What I cannot create, I do not understand.」(Richard Feynman)
關鍵心智模型
全書要建立的,是下面這條完整管線。每一章都在填補其中一塊;讀到後面若覺得迷路,請回到這張圖:
為什麼以 PostgreSQL 為主要案例
PostgreSQL 是少數同時具備「教科書式的清晰架構」與「工業級完整度」的開源資料庫: heap 檔案與 slotted page、B-link tree 索引、clock-sweep 緩衝池、成本式最佳化器、 MVCC 加上 Serializable Snapshot Isolation、物理 WAL 與 full-page write、串流與邏輯複寫…… 幾乎每一章的觀念都能在它的原始碼 下找到對應目錄(附錄 A 提供完整對照表)。 其官方文件(https://www.postgresql.org/docs/current/)與 Hironobu Suzuki 的 The Internals of PostgreSQL(https://www.interdb.jp/pg/)是本教材反覆引用的兩份一手資料。
同時,我們也會對照 MySQL/InnoDB(叢集索引、undo log)、SQLite(單檔 B-tree 與 pager)、 RocksDB(LSM-Tree)、DuckDB/ClickHouse(行式與向量化執行)、 CockroachDB/TiDB/Spanner(分散式交易),避免把單一系統的設計誤認為唯一解。
先備知識與環境準備
先備知識:基本 SQL(SELECT / JOIN / GROUP BY)、資料結構(樹、雜湊表)、 作業系統概念(行程、記憶體、檔案 I/O)、C 或 C++ 基礎(第 19 章需要)。
PostgreSQL 18:安裝後請同時安裝 模組,教材會使用 、、、 等擴充來「看見」內部結構。
C++ 工具鏈:CMake 3.20+、GCC 12+ 或 Clang 15+(支援 C++20),以及 GoogleTest。
選用:Docker(快速啟動多個 PostgreSQL 節點做複寫實驗)、RocksDB、etcd(觀察 Raft)。
brew install postgresql@18 cmake
brew services start postgresql@18
psql postgres -c "CREATE DATABASE deepdive;"
psql deepdive -c "CREATE EXTENSION pageinspect; CREATE EXTENSION pg_visibility;
CREATE EXTENSION pg_buffercache; CREATE EXTENSION pgstattuple;"
主要參考資料
本教材所有事實性內容均對照以下一手資料撰寫,章末「延伸閱讀」會給出精確連結:
CMU 15-445/645 Intro to Database Systems(Fall 2025,Andy Pavlo): https://15445.courses.cs.cmu.edu/fall2025/,含全部投影片、講義、錄影與 BusTub 專案。
Silberschatz, Korth, Sudarshan, Database System Concepts, 7th ed.(CMU 指定教科書):https://db-book.com/。
Alex Petrov, Database Internals(O’Reilly, 2019);Martin Kleppmann & Chris Riccomini, Designing Data-Intensive Applications, 2nd ed.(O’Reilly, 2026)。
Hellerstein, Stonebraker, Hamilton, Architecture of a Database System(2007)與 Readings in Database Systems, 5th ed.(http://www.redbook.io/)。
PostgreSQL 18 官方文件與原始碼();The Internals of PostgreSQL。
經典論文:Codd (1970)、Selinger et al. (1979)、Mohan et al. ARIES (1992)、Berenson et al. (1995)、 O’Neil LSM-Tree (1996)、Lamport Paxos Made Simple (2001)、Ongaro & Ousterhout Raft (2014)、 Ports & Grittner SSI (2012)、Corbett et al. Spanner (2012) 等。