首页
/ CS自学指南:CMU 15-445 数据库系统课程精讲 —— 用 bustub 教学数据库动手实现四大核心组件

CS自学指南:CMU 15-445 数据库系统课程精讲 —— 用 bustub 教学数据库动手实现四大核心组件

2026-09-06 17:16:58作者:胡易黎Nicole

本篇基于 CS自学指南 中收录的 CMU 15-445 数据库系统课程 条目展开,系统讲解这门由数据库领域权威 Andy Pavlo 讲授、以磁盘导向教学数据库 Bustub 为核心的入门课:你将了解课程的完整资源体系、四个 Project 分别对应数据库的哪些关键组件(Buffer Pool Manager、B+ 树、执行器与优化器、并发控制),以及自学时需要避开的版本陷阱与进阶路径,从而获得一套可直接落地的数据库实现学习方案。

一、15-445 在 CS 自学指南中的定位

CS 自学指南将课程按领域分章组织,数据库系统一章由 mkdocs.yml 中的导航定义,共收录五门课:

条目 语言/侧重 相对定位
UCB CS186 Java,5 星难度、约 150 学时 从 SQL 查询讲到故障恢复,动手实现完整数据库
CMU 15-445 C++,4 星难度、约 100 学时 以 bustub 为载体实现磁盘数据库核心组件,本篇主题
Caltech CS122 SQL 层实现 指南明确建议“学完 CMU 15-445 之后”再学
Stanford CS346 C++(RedBase) 指南称其“适合在学完 CMU 15-445 后继续学习”
CMU 15-799 专题研讨 文档明确列出先修要求为 CMU 15-445

使用指南 的课程速查表中,“数据库原理”一栏对应的正是 CMU 15-445;而在 CS学习规划 的“数据库系统”章节中,作者给出了这样一段导语:

CMU 的著名数据库神课 CMU 15-445 会通过 4 个 Project 带你为一个用于教学的关系型数据库 bustub 添加各种功能。实验的评测框架也免费开源了,非常适合大家自学。此外课程实验会用到 C++11 的众多新特性,也是一个锻炼 C++ 代码能力的好机会。

也就是说,在这本指南的体系里,15-445 扮演“数据库原理 + 动手实现”的中枢角色:向前承接 CMU 15-213(CS:APP) 等系统基础课程,向后为 CS122、CS346、15-799 等进阶课程铺路。

二、课程概况:Andy Pavlo 主讲、资源完全开源

课程的基本信息如下(来自 15445.en.md 的 Descriptions 部分):

  • 开课机构:CMU
  • 先修要求:C++、数据结构与算法(中文版条目 还补充了 CMU 15-213,即 CS:APP,这也是 CMU 内部对每年转入/新生同学的先修要求)
  • 编程语言:C++
  • 课程难度:🌟🌟🌟🌟(4 星)
  • 预计学时:100 小时

这门课由数据库领域标志性人物 Andy Pavlo 讲授——指南原文引用了他的那句名言:“这个世界上我只在乎两件事,一是我的老婆,二就是数据库”。

它是一门质量极高、资源极齐全的数据库入门课:授课团队与背后的 CMU Database Group 将课程对应的基础设施(Autograder 自动评测、Discord 社区)与课程资料(Lectures、Notes、Homework)全部开源,让任何愿意学习数据库的同学都能获得几乎等同于 CMU 本校学生的课程体验。这也是规划文档中强调“实验的评测框架也免费开源了,非常适合大家自学”的由来。

三、核心教学载体:Bustub 与四个关键 Project

这门课的亮点是 CMU Database Group 专门为其开发的教学用关系型数据库 Bustub(CMU Database Group 维护的开源仓库)。它是一个传统磁盘导向(disk-oriented)的关系型数据库,课程要求你在四个 Project 的推进中,亲手实现其中的关键组件:

Project 组件 所属层次
Project #1 Buffer Pool Manager(缓冲池管理器) 内存管理
Project #2 B Plus Tree(B+ 树索引) 存储引擎
Project #3 Query Executors & Query Optimizer(查询执行器与优化器) 算子与优化
Project #4 Concurrency Control(并发控制) 事务子系统

这一设计让学习者沿“页管理 → 索引 → 执行 → 并发”的顺序,逐层触摸真实数据库系统内部最核心的四条主线,而不是停留在 SQL 表层。指南特别指出两点实战体验:

  1. 实时正反馈:实现过程中,可以通过 shell.cpp 编译出 bustub-shell,在交互式 shell 里实时观测自己实现的部件是否正确,反馈非常充分;
  2. 工程能力训练:Bustub 是一个 C++ 编写的中小型项目,涵盖了程序构建、代码规范、单元测试等众多工程要求,CS学习规划 还特别提到课程实验会用上 C++11 的众多新特性,因此它本身也适合作为一个优秀开源项目来学习工程实践。

值得注意的是,指南中另有一门 Caltech CS122 的条目指出,15-445 “没有提供 SQL 层功能”,其实验侧重存储与执行层;想补齐 SQL 解析、代价估计等 SQL 层实现,可以在本课程之后衔接 CS122。

四、课程资源与学习介质

原文档列出的课程资源如下(各学期课程网站均可免费访问,Fall 2022 的完整 Lecture 视频已在 YouTube 全量开源):

  • 课程网站:Fall 2019、Fall 2020、Fall 2021、Fall 2022、Spring 2023 共五个学期的站点(域名形如 15445.courses.cs.cmu.edu/<学期>,每个学期站点内含 schedule、Lecture Notes 与 Project Handout)
  • 课程视频:课程网站可免费观看,Fall 2022 的 Lectures 已在 YouTube 全量开源
  • 课程教材Database System Concepts
  • 课程作业:5 个 Project 和 5 个 Homework

这里的“5 个 Project”与正文强调的“四个 Project”并不矛盾:Spring 2023 起在 Project #1 之前增加了 Project #0(Copy-On-Write Trie),合计即为 5 个;而承载核心数据库组件实现的,始终是 P1–P4 四个 Project。

五、各学期 Project 构成演变(Fall 2019 — Spring 2023)

原文档按学期详细记录了实验构成的历史变化,这是选型(选择哪个学期版本做实验)的重要依据:

学期 Project 构成
Fall 2019 Project #2 做哈希索引,Project #4 做日志与恢复(Logging & Recovery)
Fall 2020 Project #2 做 B 树,Project #4 做并发控制
Fall 2021 Project #1 缓冲池管理器,Project #2 哈希索引,Project #4 并发控制
Fall 2022 与 Fall 2021 基本相同,唯一变化是哈希索引换成 B+ 树索引
Spring 2023 整体与 Fall 2022 一致(缓存池、B+ 树索引、算子、并发控制),但 Project #0 换成了 Copy-On-Write Trie;另外增加了“注册大小写函数”的 Task,可以直接在编译出的 bustub-shell 中看到自己写的函数的实际效果,成就感很强

从这条时间线可以推断出课程设计的演进方向:早期版本让哈希索引与 B+ 树“各占一年”,从 Fall 2022 起统一收敛为 B+ 树索引这一条主线;Spring 2023 则用一个偏数据结构的 Project #0(COW Trie)作为热身,并加入函数注册这类小 Task 降低上手门槛、增强正反馈。

六、自学注意事项与避坑指南

原文档给出了三条非常关键的版本注意事项,自学前务必确认所选学期版本:

  1. 2020 年以前的 Bustub 版本已停止维护:如果选择 Fall 2019 等早期学期的 Handout,对应的代码基线可能已经无法与当前环境良好配合;
  2. Fall 2019 的 Logging & Recovery Project 已经 broken:在 2019 年的 git head 上也许还能运行,但评测平台(Gradescope)并未提供公共版本,因此不建议动手做,只阅读代码与 Handout 即可。原文档当时猜测 Fall 2023 版本可能会修复恢复相关功能、甚至出现全新的 Recovery Project,选择实验时应以课程当季实际发布内容为准;
  3. 建议尽量全部完成:如果精力允许,原文档作者强烈推荐把各学期 Project 都尝试一遍;或者当对书中某个内容理解不透时,去做对应的 Project 会显著加深理解。作者的判断是“个人建议全部做完,一定对你有帮助”。

结合仓库内 CS186 条目 的 5 星难度与 150 学时可以对照感知:15-445 的 4 星难度与 100 学时在同类课程中属于“难度高但体量可控”的选择,且 C++ 实现路线对后续衔接 CS346(RedBase)15-799 等 C++ 生态课程更顺。

七、资源汇总:社区、开源仓库与延伸阅读

原文档“资源汇总”一节指向三类自学资源:

  • 非官方 Discord:很好的交流平台,过往聊天记录几乎记载了其他同学踩过的坑;你既可以提问,也可以帮忙解答别人的问题,本身就是一份持续积累的排错参考。
  • Spring 2023 通关指北:可以搜索 @xzhseh 在知乎发表的《CMU 15-445/645 (Spring 2023) Database Systems 通关指北》(原文为中文),涵盖了通关所需的全部工具、操作建议,以及作者在 Project 过程中遇到、看到并亲自踩过的坑。
  • 学习资源仓库:@ysj1173886760 在学习这门课中用到的所有资源和作业实现汇总在 ysj1173886760/Learning 仓库的 db 目录中。由于课程负责人 Andy 的要求,该仓库不包含 Project 的源码实现,只有 Homework 的 Solution;特别地,针对 Homework 1,作者还写了一个 shell 脚本来自动执行判分。

课程结束后的延伸阅读,原文档推荐论文 Architecture of a Database System(中文版笔记同样收录在上述仓库中)。该论文综述了数据库系统的整体架构,有助于在“拼完四个组件”之后,把碎片化的实现经验整合成一张完整的数据库系统架构图景。

八、进阶路径:从 15-445 走向数据库系统研究

原文档“后续课程”部分指向 CMU 15-721:一门研究生阶段的数据库系统进阶课,主要聚焦内存数据库(in-memory database),每节课都配有必读论文,适合希望进入数据库研究方向的读者。

再结合本指南仓库内的相邻条目,可以拼出一条完整的进阶路线:

  1. CS122(Caltech):补齐 15-445 未覆盖的 SQL 层——SQL 解析、翻译、Join 实现、统计信息与代价估计、子查询、Agg/Group By,以及 B+ 树与 WAL 实验(见 CS122 条目);
  2. CS346(Stanford):在 RedBase 这个代码量不大的 C++ 项目上继续学习数据库的其他组件,并可按需扩展代码、练习 C++ 技巧(见 CS346 条目);
  3. CMU 15-799:CMU 的数据库专题研讨课,先修要求明确为 CMU 15-445(见 15-799 条目);
  4. CMU 15-721:聚焦内存数据库与论文研读的研究型进阶。

九、小结

CMU 15-445 在本指南中的价值可以概括为三点:其一,课程资料与评测基础设施完全开源,自学体验几乎等价于 CMU 本校;其二,Bustub 四 Project 的“缓冲池 → B+ 树 → 执行与优化 → 并发控制”主线,配合 bustub-shell 的实时反馈,让数据库内部原理从纸面落到代码;其三,选版本时遵循“优先 Fall 2022 / Spring 2023 这类现行维护版本、避开已 broken 的 Fall 2019 恢复项目”的原则,并善用社区 Discord、通关指北与延伸阅读论文,即可用约 100 小时投入完成一次系统性的数据库实现训练,为 CS122、CS346、15-799 乃至数据库研究方向的后续学习打下底座。

登录后查看全文
热门项目推荐
相关项目推荐