译者说明
这一系列博文翻译自一篇国外博主Christophe的博文。该博文详细介绍了关系型数据库是如何工作的,其详实程度堪比专业数据库教材,但又更加精炼扼要,让读者能在短时间内理解数据库的底层原理。在此,对写出这篇长篇大作的原文作者Christophe表示由衷的敬意。由于该博文篇幅很长,因此会以连载的形式分为多篇来翻译。为了便于大家理解,对于部分场景我会加入自己的说明或者伪代码实现。好了,下面让我们领略Christophe这篇大作的风采吧…
前言
关系型数据库应用非常广泛,但当我们谈起关系型数据库,我总感觉有些东西被丢失了。从精致小巧的SQLite到功能强大的Teradata,业界有很多种不同的数据库,但是关于数据库是如何工作的却鲜有介绍。你可以亲自去Google搜索”how does a relational database work“,搜索结果很少,并且每个文章都非常简短。相对而言,如果你去搜索一些最流行的技术(Big Data, NoSQL or JavaScript),你会看到很多解释其工作原理的深度好文。
难道是因为在大学课堂、研究论文以及专业书籍之外,关系型数据库都被介绍为过时和无聊的技术吗?
作为一个开发者我讨厌不明不白的使用一些技术,如果一个数据库被用了40年,那一定存在某种理由!多年以来,我花了几百小时来研究这些我每天都在使用的关系型数据库。实际上,关系型数据库是非常有趣的,它们基于有用且可重用理论。如果你对理解数据库工作原理很感兴趣,但又没有时间来钻研这个广泛的课题,那么你应该读一读这篇文章。
文章的标题已经很清晰,这篇文章的目的不是介绍怎么使用一个数据库,而是理解其工作原理。因此,你必须首先具备写出简单的join query和CRUD基本查询的能力,否则你恐怕很难读懂这篇文章。这也是你唯一需要掌握的知识,至于其他的知识我来解释。
因为这是一篇包含了很多数据结构和算法的长篇大论,因此你需要花点时间来耐心阅读。其中一些理论确实很有难度,但你跳过它们也照样可以理解这篇文章的中心思想。
如果你学士渊博,那么这篇文章或许可以划分为以下三部分:
1. 数据库组件低层和高层视图
2. 查询优化过程概览
3. 事务和缓存池管理概览