一直想系统的学习数据库,在网上看到一个不错的开源项目Let's Build a Simple Database,项目作者使用C语言从零开始写了一个简单的数据库,因此学习了一下,并作如下笔记。
本项目的优点是引领着读者从零开始入门制作一个简单的数据库,缺点是似乎作者最后并没有完成项目,还留下了很多的未完成部分。另外,就是本文是用C语言写的,对C语言不好的小伙伴不太友好。这里给自己立个flag,等后续数据库学有所成的时候,我也自己写个类似的项目~~
废话不多说了,下面看正文。
数据库是如何工作的?
- 数据以什么格式保存?(在内存和磁盘中)
- 它何时从内存移动到磁盘?
- 为什么每个表只能有一个主键?
- 回滚事务是如何工作的?
- 索引是如何格式化的?
- 何时以及如何进行全表扫描?
- 准备好的语句以什么格式保存?
简言之,数据库是如何工作的?
为了理解这一点,我正在用C从头开始构建sqlite的克隆,并且我将记录我的过程。
目录
- 第1部分-介绍和设置REPL
- 第2部分-世界上最简单的SQL编译器和虚拟机
- 第3部分-内存中、仅附加、单表数据库
- 第4部分-我们的第一个测试(和bug)
- 第5部分-磁盘持久性
- 第6部分-游标抽象
- 第7部分-B树简介
- 第8部分-B树叶节点格式
- 第9部分-二进制搜索和重复键
- 第10部分-拆分叶节点
- 第11部分-递归搜索B树
- 第12部分-扫描多级B树
- 第13部分-拆分后更新父节点
“What I cannot create, I do not understand.” – Richard Feynman