数据库是如何工作的
注: 本文翻译自db_tutorial.
数据库计算机世界的一个基础软件,要想深入了解数据库,就不得不思考如下几个问题:
- 数据以什么格式保存?(在内存和磁盘上)
- 它何时从内存移动到磁盘?
- 为什么每个表只能有一个主键?
- 回滚事务如何工作?
- 索引的格式是什么样的?
- 什么进行全表扫描?如何进行全表扫描?
- 预处理语句以什么格式保存?
总而言之,数据库究竟是如何工作的呢?
为了理解数据库是如何,本文将仿照sqlite用C从头开始构建一个数据库。
本文将分为如下13个部分:
- 简介和设置REPL
- 世界上最简单的SQL编译器和虚拟机
- 仅支持追加的单表内存数据库
- 第一次测试(包含bug)
- 持久化到磁盘
- 游标抽象
- B数简介
- B数叶节点格式
- 二进制搜索和重复键
- 拆分叶节点
- 递归搜索B树
- 扫描级B树
- 拆分后更新父节点
- 拆分内部节点
实际的数据库架构大致如下: