原文地址:https://cstack.github.io/db_tutorial/
原文作者: cstack
译者:Win-Man
一个数据库是如何工作的?
- 在内存中、在磁盘上数据存储格式是怎么样的?
- 什么时候数据库从内存转移到磁盘?
- 为什么每个表只能有一个主键?
- 事务回滚是如何工作的?
- 索引的格式是怎么样的?
- 什么时候会发生全表扫以及全表扫是如何工作的?
- 预处理语句是以什么形式存储的?
简而言之,问题就是数据库是怎么工作的?
为了搞明白这个问题,我用 C 写了一个 sqlite 的克隆版本,并且记录了我的整个过程。
目录
- Part1 - 介绍并设置 REPL
- Part2 - 世界上最简单的 SQL 编译器以及虚拟机
- Part3 - 一个只允许追加、单表、内存数据库
- Part4 - 我们的第一个测试(Bug)
- Part5 - 磁盘持久化
- Part6 - 抽象游标
- Part7 - B 树介绍
- Part8 - B 树叶子节点结构
- Part9 - 二进制搜索以及重复键
- Part10 - 叶子节点的分裂
- Part11 - B 树的递归搜索
- Part12 - 扫描 Multi-Level B 树
- Part13 - 分裂之后更新父节点
“What I cannot create, I do not understand” - Richard Feynman