数据库原理相关学习资源和建议

之前一段时间(2019 年 5 - 10 月)自学了数据库原理相关的东西,然后 10 月参加了 PingCAP 的第四期 Talent Plan,最终拿到了 PingCAP 的 offer。

我把这段时间学习用到和没用到但感觉挺好的一些资源,以及一些个人经验,整理一下发到这里了。

一部分是数据库通用的知识,一部分是 PingCAP 的 TiDB 相关的。

首先必须推荐 CMU 的数据库课

15-445 Database Systems 是数据库基础课,但是主要是在讲数据库原理,而且最好对数据库有一些基本的概念(比如 SQL、事务、ACID 之类的)再学这个。这个课资源十分齐全,官方提供 PPT、课堂录像、作业(以及答案)和 project 代码(如果你要做的话需要会一些基本的 C++,它也会给一些学习材料),基本等于可以全程自学了。目测应该是网上公开能找到的质量最高的数据库原理基础课了。

使用的教材《数据库系统概念》有中文版,只是不是最新的。英文版是第 7 版,中文版是第 6 版。如果你要详细看(中文第六版)教材的话,建议不要在前 9 章花费太多时间,后面的章节才是“原理”相关的内容。教材的 6-9 章建议跳过,甚至第 5 章也可以跳过,关系代数和范式一般只需要知道一点基本的就够了,真的需要的时候再回来看就行了。第 10-19 章包含了跟 15-445 对应的内容。

然后是 15-445 的升级版:15-721 Advanced Database Systems 这个是后续的高级课程,基本是在直接带你读论文,深入数据库的一些具体领域,比 15-445 更接近实现上考虑的细节,当然你也可以提前看看当作对某些领域的更具体更深入的介绍。

网上也有其它学校的课程资料,不过我没有仔细了解很多,大家有需要的话可以自己找找。

读数据库领域的论文的话,也可以参考:rxin/db-readings“Red Book”。比较广泛的计算机科学各个领域的论文阅读也可以关注 the morning paper

如果只是为了做 PingCAP Talent Plan 或者只是初学的话,建议不要花太多时间读论文。个人理解是,论文主要是需要详细了解某个技术、系统的细节,或者了解教科书上没有的东西(比如最新的研究成果)的时候读。推荐这几个论文资源的主要原因是它们除了充当 reading list 的作用以外,还有大量文字内容做解释和背景介绍。就算你没有每一篇论文都去读,也能帮你理一下思路,充当一个 roadmap。

UPDATE: PingCAP 最近也做了一个学习资源的整合放在了 pingcap/awesome-database-learning,相比起来知识点的划分要做得更细致更明确,分布式和一些其它相关领域的知识也有包含,有很多更接近实际和比较新的技术。

虽然列了这么多内容,学习顺序上还是推荐优先学习 15-445 覆盖范围之内的内容,15-445 基本涵盖了各种基础概念和重要的基本技术原理,一些理论细节可以看你自己的想法和时间安排适当略过,像 ARIES 那些细节确实看着比较头痛。

另外也要提醒大家学习时也要注意找准自己的路线和方向,虽然理论上掌握的知识是越多越好,但是人的能力是有极限的大学时间有限,更高效地朝自己的目标前进才是正解。比如如果你只是想找后端开发的工作,其实并没有必要像这样深入地了解数据库原理细节,针对 MySQL 学习一下、在面经里找一些数据库原理相关的问题弄清楚,效果都要来得快很多。数据库本来就是一个很大很复杂的系统,又牵扯到很多其它领域的知识。优化器、并发控制、存储等等,随便一个话题拿来都能扯出一堆研究成果,不同数据库的做法也都各有不同。现在现实生活中也已经很少见到课堂上那种纯“传统”数据库了,MVCC、分布式之类的特性都已经是主流了。而且技术的发展也很快,现在有很多新的架构设计,比较传统的数据库和 Hadoop 生态这些新兴系统也在互相学习对方的特性。所以希望大家学习的时候不要迷失方向。

下面是 PingCAP 的一些资源

PingCAP 有 中文博客,内容还是挺多的,包括 TiDB 源码阅读系列 和其它项目的源码阅读文章。PingCAP 的 B 站频道 有很多视频。包括一些 meetup 的录像paper reading 的视频。PingCAP 和 Go 夜读 也合作了几期比较深入的 TiDB 源码解析视频。(Go 夜读的 B 站频道有些视频音画不同步,但是 Youtube 频道是正常的。

临时想到了这么些内容,思路也比较乱,之后再来整理和添加其他内容吧(咕咕咕我没咕,我真的更新了

我基本上也只能算是初学,全文也基本是按照我自己的学习过程和理解来写的,内容难免有不准确、不客观甚至错误的地方

如果大家发现文章内容有什么问题,或者有什么建议以及希望更多交流的,欢迎大家留言或者直接找我:)

最后打个广告,Talent Plan 的线下课程是真的给力,吃住交通费用全包,还能白嫖 T 恤(就是肝有点疼

UPDATE: 现在 Talent Plan 做了一些改版,形式上不会和以往一样需要专门抽一个月去线下实地参加了,但还是会有 mentor 带,内容也照样是尝试实现一个 feature 或者优化,参与到项目中应该会更容易一些。不过即使没有参与 Talent Plan,有想法的话也可以参与 TiDB 的开发,GitHub 上的 issues 里面基本都是打了 label 的,可以从有 difficulty/easy、good-first-issue 之类的 label 的 issue 开始上手。

3 Likes

学长有哪些书籍推荐嘛,像DDIA之类的 :thinking:

DDIA 是大家评价都特别好的书,我也觉得应该质量很好,然而我还并没来得及看。
我自己其实没看过啥书。不过我感觉把 pingcap/awesome-database-learning 作为一个资源的列表是 ok 的。

我到目前为止工作内容基本都属于查询优化器这部分,其它模块我知识储备并不多所以就不做建议了。
说实话我感觉查询优化这一块也没啥书好推荐的。我个人感觉知识比较碎,没接触过实际优化器的代码、设计以及实际 SQL 优化问题的话,不太容易从理论的角度上手。从基础的 SQL 的语义,到优化器的基本功能、结构,理解查询计划,再到一些复杂的优化,我感觉从接触真实数据库、真实问题,从实用的角度入手比较合理。比如其实可以把各个数据库的 SQL 优化指南作为一个阅读材料。

1 Like