CS自学指南-数据库系统

UCB CS186: Introduction to Database System
课程简介
- 所属大学:UC Berkeley
- 先修要求:CS61A, CS61B, CS61C
- 编程语言:Java
如何编写 SQL 查询?SQL 命令是如何被一步步拆解、优化、转变为一个个磁盘查询指令的?如何实现高并发的数据库?如何实现数据库的故障恢复?什么又是非关系型数据库?这门课会带你深入理解关系型数据库的内部细节,并在掌握理论知识之后,动手用 Java 实现一个支持 SQL 并发查询、B+ 树 Index 和故障恢复的关系型数据库。
从实用角度来说,这门课还会在编程作业中锻炼你编写 SQL 查询以及 NoSQL 查询的能力,对于构建一些全栈的工程项目很有帮助。
课程资源
- 课程网站:https://cs186berkeley.net/
- 课程视频:https://www.bilibili.com/video/BV13a411c7Qo
- 课程教材:无
- 课程作业:6 个 Project
CMU 15-445: Database Systems
课程简介
- 所属大学:CMU
- 先修要求:C++,数据结构与算法
- 编程语言:C++
作为 CMU 数据库的入门课,这门课由数据库领域的大牛 Andy Pavlo 讲授(“这个世界上我只在乎两件事,一是我的老婆,二就是数据库”)。15-445 会自底向上地教你数据库系统的基本组成部分:存储、索引、查询,以及并发事务控制。 这门课的亮点在于 CMU db 专门为此课开发了一个教学用的关系型数据库 bustub,并要求你对这个数据库的组成部分进行修改,实现上述部件的功能。此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求,可以作为一个优秀的开源项目学习。
课程资源
- 课程网站:Fall2019, Fall2020, Fall2021, Fall2022
- 课程视频:课程网站免费观看
- 课程教材:Database System Concepts
- 课程作业:4 个 Project
在 Fall2019 中,第二个 Project 是做哈希索引,第四个 Project 是做日志与恢复。
在 Fall2020 中,第二个 Project 是做 B 树,第四个 Project 是做并发控制。
在 Fall2021 中,第一个 Project 是做缓存池管理,第二个 Project 是做哈希索引,第四个 Project 是做并发控制。
在 Fall2022 中,与 Fall2021 相比只有哈希索引换成了 B+ 树索引,其余都一样。
如果大家有精力的话可以都去尝试一下,或者在对书中内容理解不是很透彻的时候,尝试用代码写一个会加深你的理解。
Caltech CS 122: Database System Implementation
课程简介
- 所属大学:Caltech
- 先修要求:无
- 编程语言:Java
加州理工的这门课,不同于没有提供 SQL 层功能的 CMU15-445 课程。CS122 课程 Lab 的侧重点在于 SQL 层的相关实现,涉及查询优化器的各个模块,比如SQL的解析,Translate,如何实现 Join,统计信息以及代价估计,子查询实现,Agg,Group By 的实现等。除此之外,还有 B+树,WAL 相关实验。本门课程适合在学完 CMU15-445 课程之后,对查询优化相关内容有兴趣的同学。
下面介绍一下这门课的前 3 个 Assignment 也就是实验 Lab 所要实现的功能:
Assignment1
- 为 NanoDB 提供 delete,update 语句的支持。
- 为 Buffer Pool Manager 添加合适的 pin/unpin 代码。
- 提升 insert 语句的性能, 同时不使数据库文件大小过分膨胀。
Assignment2
- 实现一个简单的计划生成器,将各种已经 Parser 过的 SQL 语句转化为可执行的执行计划。
- 使用 nested-loop join 算法,实现支持 inner- and outer-join 的 Join 计划节点。
- 添加一些单元测试, 保证 inner- and outer-join 功能实现正确。
Assignment3
- 完成收集表的统计信息。
- 完成各种计划节点的计划成本计算。
- 计算可出现在执行计划中的各种谓词的选择性。
- 根据谓词更新计划节点输出的元组统计信息。
剩余 Assignment 和 Challenges 可以查看课程介绍,推荐使用 IDEA 打开工程,Maven 构建,注意日志相关配置。
课程资源
- 课程网站:http://courses.cms.caltech.edu/cs122/
- 课程代码:https://gitlab.caltech.edu/cs122-19wi
- 课程教材:无
- 课程作业:7 Assignments + 2 Challenges
Stanford CS 346: Database System Implementation
课程简介
- 所属大学:Stanford
- 先修要求:无
- 编程语言:C++
RedBase 是 cs346 的一个项目,实现了一个简易的数据库系统,项目是高度结构化的。整个项目能够被分为以下几个部分(同时也是 4 个需要完善的 lab):
- The record management component:记录管理组件。
- The index component:B+ 索引管理。
- The System Management Component:ddl语句、命令行工具、数据加载命令、元数据管理。
- The Query Language Component:在这个部分需要实现 RQL Redbase 查询语言。RQL 要实现 select、insert、delete、update 语句。
- Extension Component:除了上述数据库系统的基本功能组件,还需要实现一个扩展组件,可以是 Blob 类型、 网络模块、连接算法、CBO 优化器、OLAP、事务等。
RedBase 适合在学完 CMU-15445 后继续学习数据库系统中的其他组件,因为其代码量不多,可以方便的根据需要扩展代码。同时代码完全由 C++ 编写,也可以用于练习 C++ 编程技巧。
课程资源
- 课程网站:https://web.stanford.edu/class/cs346/2015/
- 课程代码:https://github.com/junkumar/redbase.git
- 课程教材:无
- 课程作业:4 Projects + 1 Extension
CMU 15-799: Special Topics in Database Systems
课程简介
- 所属大学:CMU
- 先修要求:CMU 15-445
- 编程语言:C++
这门课目前只开了两次:fall2013 和 spring2022,讨论了数据库领域的一些前沿主题。fall2013 讨论了 Streaming、Graph DB、NVM 等,spring2022 主要讨论 Self-Driving DBMS,都提供有相关论文。
spring2022 版课程任务:
任务一:基于 PostgreSQL
进行手动性能调优;
任务二:基于 NoisePage Pilot 改进 Self-Driving DBMS,不限特性。
授课更贴近讲座的形式,编程任务较少。对一般同学可以开拓一下视野,对专精数据库的同学可能帮助较大。
课程资源
- 课程主页
- CMU15-799 - Special Topics in Database Systems
- CMU15-799 - Special Topics: Self-Driving Database Management Systems
- 课程视频:暂无
- 课程作业:2 Projects + 1 Group Project