小引
大学时,数据库学的不是很深,现在有印象的也就 SQL、ER 图、范式、事务等使用上的寥寥概念。对于其实现上一直没有过系统性的了解,但既然走上了存储这条路,数据库知识肯定要补一下。先前,知乎上很多地方看到大家推荐 cmu15445 这门课,也早就将课程主页收藏到了文件夹,但一直没得空来看。念念不忘,必有回响,到这个假期,恰逢换工作,才有点大块的时间开个头。
大纲
简单介绍下 cmu15445 的教学大纲,该课以 Database System Concepts 为辅助教材, 讲述了数据库管理系统(DBMS)设计和实现的方方面面,包括:
- 数据模型(关系型,文档型,键值型)
- 存储模型(n-ary,decomposition,可以理解为行式、列式)
- 查询语言(sql,存储过程 stored procedures)
- 存储结构(heaps,基于日志 log-structured)
- 索引设计(排序树,哈希表)
- 事务处理(ACID,并发控制)
- 数据恢复(日志、快照)
- 执行引擎(joins,排序,聚集,优化)
- 并发架构(多核,分布式)
可以看出,内容十分翔实,课程使用一个开源的商业数据库作为案例进行讲解,以深入探讨数据库设计时,在上述各个方面进行取舍的过程。本课程十分重视编程实践,设计了一系列前后勾连但又足够简洁的代码实验。
作者:木鸟杂记 https://www.qtmuniao.com/2021/02/15/cmu15445-introduction/ , 转载请注明出处
计划
这次学习目标主要以实验为主,兼顾看点讲义和教科书。视频暂时就随缘了,不然战线会拉很长,导致最后都搞不完。一共有五个实验:
- 环境准备:C++ Primer
- 缓冲控制:Buffer Pool Manager
- B+ 树索引:B+Tree Index
- 查询引擎:Query Execution
- 并发控制:Concurrency Control
五个实验组成了一个用于教学的简单的关系型数据库 —— BusTub。 实验方式基本都是实现一些规定的接口,跑通写好的测试用例。需要说明的是,代码中给的测试用例十分简单,基本只测试了一些主干路径,因此跑过了测试用例并不一定说明你代码写的没问题,这就要求在实现的过程中务必理解实验各个接口的关系、可以进行取舍实现的要点。为了达到此目的,当自己做完并跑过测试用例后,可以在网上找一些前人实现的材料,对比学习。
初步打算,除了第一个环境准备外,每个实验做完之后写一篇总结,探讨一些实现中遇到的问题和有趣的地方。
资料
课程本身相关的资料都可以去课程网站上寻找,我计划做 fall2020 年的实验,但视频似乎只有 2019 年的。
在实现过程中如果遇到比较好的博客或者资料,我会逐渐补充到这里。
讲义解读
我将课程讲义逐章进行了翻译和解读,都放在了我的大规模数据系统专栏《系统日知录》,欢迎订阅
- 【每天学点数据库】Lecture #12:执行模型
- 【每天学点数据库】Lecture #11:Join 算法
- 【每天学点数据库】Lecture #10: 排序和聚合算法
- 【每天学点数据库】Lecture #09:索引的并发安全
- 【每天学点数据库】Lecture #09:Locks 和 Latches
- 【每天学点数据库】Lecture #08:B+ 树的权衡和优化
- 【每天学点数据库】Lecture #07:哈希表概要
- 【每天学点数据库】Lecture #07:哈希模式
- 【每天学点数据库】Lecture #08:树型索引
- 【每天学点数据库】Lecture #06:内存管理
- 【每天学点数据库】Lecture #05:数据压缩
- 【每天学点数据库】Lecture #05:负载类型和存储模型
- 【每天学点数据库】Lecture #04:数据编码
- 【每天学点数据库】Lecture #04:日志构型存储
- 【每天学点数据库】Lecture #03:Data Layout
- 【每天学点数据库】Lecture #03: Database and OS
- 【每天学点数据库】Lecture #03:存储层次体系
- 【每天学点数据库】Lecture #01:关系代数
- 【每天学点数据库】Lecture #01:关系模型
- 【每天学点数据库】Lecture #01:数据模型