feat: Update CMU 15-445, improve overall format & update course relevant contents

This commit is contained in:
Michael Xu 2023-07-03 23:41:50 +08:00
parent c36feaca99
commit 202f9dabb3

View file

@ -3,33 +3,52 @@
## 课程简介
- 所属大学CMU
- 先修要求C++,数据结构与算法
- 先修要求C++,数据结构与算法CMU 15-213 (A.K.A. CS:APP这也是 CMU 内部对每年 Enroll 同学的先修要求)
- 编程语言C++
- 课程难度:🌟🌟🌟🌟
- 预计学时100 小时
作为 CMU 数据库的入门课,这门课由数据库领域的大牛 Andy Pavlo 讲授“这个世界上我只在乎两件事一是我的老婆二就是数据库”。15-445 会自底向上地教你数据库系统的基本组成部分:存储、索引、查询,以及并发事务控制。
这门课的亮点在于 CMU db 专门为此课开发了一个教学用的关系型数据库 [bustub](https://github.com/cmu-db/bustub),并要求你对这个数据库的组成部分进行修改,实现上述部件的功能。此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求,可以作为一个优秀的开源项目学习。
作为 CMU 数据库的入门课,这门课由数据库领域的大牛 Andy Pavlo 讲授(“这个世界上我只在乎两件事,一是我的老婆,二就是数据库”)。
这是一门质量极高,资源极齐全的 Database 入门课,这门课的 Faculty 和背后的 CMU Database Group 将课程对应的基础设施 (Autograder, Discord) 和课程资料 (Lectures, Notes, Homework) 完全开源,让每一个愿意学习数据库的同学都可以享受到几乎等同于 CMU 本校学生的课程体验。
这门课的亮点在于 CMU Database Group 专门为此课开发了一个教学用的关系型数据库 [bustub](https://github.com/cmu-db/bustub),并要求你对这个数据库的组成部分进行修改,实现上述部件的功能。
具体来说,在 15-445 中你需要在四个 Project 的推进中,实现一个面向磁盘的传统关系型数据库 Bustub 中的部分关键组件。
包括 Buffer Pool Manager (内存管理), B Plus Tree (存储引擎), Query Executors & Query Optimizer (算子们 & 优化器), Concurrency Control (并发控制),分别对应 `Project #1``Project #4`
值得一提的是,同学们在实现的过程中可以通过 `shell.cpp` 编译出 `bustub-shell` 来实时地观测自己实现部件的正确与否,正反馈非常足。
此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求,可以作为一个优秀的开源项目学习。
## 课程资源
- 课程网站:[Fall2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html)
- 课程视频:课程网站免费观看
- 课程网站:[Fall 2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall 2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall 2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall 2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html), [Spring 2023](https://15445.courses.cs.cmu.edu/spring2023/schedule.html)
- 课程视频:课程网站免费观看, Fall 2022 的 [Youtube 全开源 Lectures](https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf)
- 课程教材Database System Concepts
- 课程作业4 个 Project
- 课程作业:5 个 Project 和 5 个 Homework
在 Fall2019 中,第二个 Project 是做哈希索引,第四个 Project 是做日志与恢复。
在 Fall 2019 中,第二个 Project 是做哈希索引,第四个 Project 是做日志与恢复。
在 Fall2020 中,第二个 Project 是做 B 树,第四个 Project 是做并发控制。
在 Fall 2020 中,第二个 Project 是做 B 树,第四个 Project 是做并发控制。
在 Fall2021 中,第一个 Project 是做缓存池管理,第二个 Project 是做哈希索引,第四个 Project 是做并发控制。
在 Fall 2021 中,第一个 Project 是做缓存池管理,第二个 Project 是做哈希索引,第四个 Project 是做并发控制。
在 Fall2022 中,与 Fall2021 相比只有哈希索引换成了 B+ 树索引,其余都一样。
在 Fall 2022 中,与 Fall2021 相比只有哈希索引换成了 B+ 树索引,其余都一样。
如果大家有精力的话可以都去尝试一下,或者在对书中内容理解不是很透彻的时候,尝试用代码写一个会加深你的理解。
在 Spring 2023 中,大体内容和 Fall 2022 一样缓存池B+ 树索引,算子,并发控制),只不过 Project 0 换成了 Copy-On-Write 的 Trie同时增加了很好玩的注册大小写函数的 Task可以直接在编译出的 bustub-shell 中看到自己写的函数的实际效果,非常有成就感。
值得注意的是,现在 bustub 在 2020 年以前的 version 都已经停止维护Fall 2019 的最后一个 Logging & Recovery 的 Project 已经 broken 了在19年的 git head 上也许还可以跑,但尽管如此 Gradescope 应该也没有提供公共的版本,所以并不推荐大家去做,只看看代码和 Handout 就可以了),或许在 Fall 2023 的版本 Recovery 相关的功能会被修复,届时也可能有全新的 Recovery Project让我们试目以待吧🤪
如果大家有精力的话可以都去尝试一下,或者在对书中内容理解不是很透彻的时候,尝试做一做对应的 Project 会加深你的理解(个人建议还是全部做完,相信一定对你有帮助)。
## 资源汇总
非官方的 [Discord](https://discord.com/invite/YF7dMCg) 是一个很好的交流平台,过往的聊天记录几乎记载了其他同学踩过的坑,你也可以提出你的问题,或者帮忙解答别人的问题,相信这是一份很好的参考。
关于 Spring 2023 的通关指北,可以参考 @xzhseh 的这篇[知乎文章](https://zhuanlan.zhihu.com/p/637960746),里面涵盖了全部你需要的通关道具,和通关指南,以及最重要的,我自己在做 Project 的过程中遇到的,看到的,和自己亲自踩过的坑。
@ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: db - GitHub](https://github.com/ysj1173886760/Learning/tree/master/db) 中。
由于 Andy 的要求,仓库中没有 Project 的实现,只有 Homework 的 Solution。特别的对于 Homework1@ysj1173886760 还写了一个 Shell 脚本来帮大家执行自动判分。