「这是我参与11月更文挑战的第 7 天,活动详情查看:2021最后一次更文挑战」
看到这篇标题,你可能会有一个想法:为什么要重复轮子?是我想开发21世纪的下一个伟大的嵌入式数据库吗?并非如此。
如果我不能创造的东西,那我也不明白 —— Richard Feynman
我这样做是为了更好地理解它的工作,而我的目标是记录研究过程。
- 数据库是如何工作的?
- 数据是以什么格式保存的?在我们的例子中,在内存和磁盘上。
- 它什么时候从内存到磁盘?这到底是如何工作的?
- 为什么我们每个表只有一个主键?你知道吗?
- 事务回滚是如何进行的?
- 索引是如何排列的?它们又是如何工作的?
- 何时以及如何进行全表扫描?每次我们发出查询时都会发生吗?索引有帮助吗?如何帮助?
- prepare statement 是以什么格式保存的?
- 如果有的话,我们可以在我们的数据库中添加哪些额外的功能?
以上就是在研究过程中,想要回答的一些问题。据此,在整个探究过程我很大程度依赖 SQLite架构文档 以及 wiki here
不过hhh,如果我说我有这个想法,那是在撒谎,不,我没有 😏 😏 😏
我的灵感来自于另一个叫 Connor 的开发者,他基本上做了同样的事情,但用的是C语言,就在这里(cstack.github.io/db_tutorial…)
开始之前
我想每一个开发者都至少使用过一种现有的关系型数据库,但真的知道它们是如何工作的吗?我打赌不知道。说实话,对我来说,数据库幕后的很多东西仍然是一个黑匣子。
就像在前言中所说的,里面有我想要回答的一些问题,大家可以往上回顾一下,并在后续文章中不断回想这些问题,是怎么解决的?以及是探究过程。