数据库内核杂谈

数据库内核杂谈

策划: 顾仲贤

为什么要写数据库内核杂谈这个系列呢?原因很简单,我看到过很多关于如何使用某些数据库的博客,但是从来没有看到过系统介绍数据库内部的文章,所以数据库内核杂谈这个系列会深入浅出地介绍数据库系统内部各个子系统是如何工作,又是如何协作来完成复杂工作的。

整个系列不仅会覆盖所有经典系统的部分,也会跟进最新的技术趋势,例如code gen和vectorized execution等。希望通过阅读这个系列能够给读者知其然,知其所以然的感悟,如果能达到触类旁通的境界,就更好啦。

数据库内核杂谈(一):一小时实现一个基本功能的数据库
数据库内核杂谈(一):一小时实现一个基本功能的数据库

数据库内核博大精深,很多子系统的设计初看不知所云,但是细读就会发现其已经做到了极致。但是市面上很少有类似的资源或者课程把数据库内容的精髓讲解出来,因此 Facebook 现任 Tech Lead 顾仲贤撰写了《数据库内核杂谈》的系列文章。

数据库内核杂谈(二):存储“演化论”
数据库内核杂谈(二):存储“演化论”

数据库是用来存储海量数据的,相较于列举常见的存储形式然后对比优缺点的分类法,我们今天另辟蹊径,从 " 演化论 " 的角度来看,不同的存储形式和优化方法是怎么一步一步进化出来的。

数据库内核杂谈(三):索引优化
数据库内核杂谈(三):索引优化

数据库索引是通过引入冗余的数据存储 (类比书籍最后的索引章节),来提高查询语句的速度。

数据库内核杂谈(四):执行模式
数据库内核杂谈(四):执行模式

我们通过存储和索引,了解了如何把数据存储在文件系统里,然后根据不同的查询语句,通过建立索引来提速读取。今天,我们来聊一下当数据读进内存后,数据库怎么继续执行查询。

数据库内核杂谈(五):如何实现排序和聚合
数据库内核杂谈(五):如何实现排序和聚合

本文将主要介绍排序 (Sort) 和聚合 (Aggregate) 的实现。为什么要把这两个算子放在一起说呢?因为它们之间有很多的共同点,比如都是 Blocking 的算子,即需要得到所有的输入 tuple,才能完成计算后输出,这就使得它们会遇到同样的困难。

数据库内核杂谈(六):表的JOIN(连接)
数据库内核杂谈(六):表的 JOIN(连接)

数据库能够把现实中的某一块业务,映射地表达成一系列的表的集合,并且其查询语句 SQL 支持多个表相关联的查询操作。这种连接多表的查询使得数据库的功能得到了一个质的飞跃。

数据库内核杂谈(七):数据库优化器(上)
数据库内核杂谈(七):数据库优化器(上)

优化器的输入是数据库的元数据以及语义绑定的语法树,输出是最终的物理算子的执行计划。那它内部又是怎么得到最终的物理算子的执行计划的呢?

数据库内核杂谈(八):数据库优化器(下)
数据库内核杂谈(八):数据库优化器(下)

当语句中涉及到多个表的 join 时,优化器该如何决定 join 的顺序 (join ordering) 来找到最优解呢?

没有更多了