「Rust 重写 sqlite」预备

503 阅读2分钟

「这是我参与11月更文挑战的第 7 天,活动详情查看:2021最后一次更文挑战


看到这篇标题,你可能会有一个想法:为什么要重复轮子?是我想开发21世纪的下一个伟大的嵌入式数据库吗?并非如此。

如果我不能创造的东西,那我也不明白 —— Richard Feynman

我这样做是为了更好地理解它的工作,而我的目标是记录研究过程。

  • 数据库是如何工作的?
  • 数据是以什么格式保存的?在我们的例子中,在内存和磁盘上。
  • 它什么时候从内存到磁盘?这到底是如何工作的?
  • 为什么我们每个表只有一个主键?你知道吗?
  • 事务回滚是如何进行的?
  • 索引是如何排列的?它们又是如何工作的?
  • 何时以及如何进行全表扫描?每次我们发出查询时都会发生吗?索引有帮助吗?如何帮助?
  • prepare statement 是以什么格式保存的?
  • 如果有的话,我们可以在我们的数据库中添加哪些额外的功能?

以上就是在研究过程中,想要回答的一些问题。据此,在整个探究过程我很大程度依赖 SQLite架构文档 以及 wiki here

image.png

不过hhh,如果我说我有这个想法,那是在撒谎,不,我没有 😏 😏 😏

我的灵感来自于另一个叫 Connor 的开发者,他基本上做了同样的事情,但用的是C语言,就在这里(cstack.github.io/db_tutorial…)

开始之前

我想每一个开发者都至少使用过一种现有的关系型数据库,但真的知道它们是如何工作的吗?我打赌不知道。说实话,对我来说,数据库幕后的很多东西仍然是一个黑匣子。

就像在前言中所说的,里面有我想要回答的一些问题,大家可以往上回顾一下,并在后续文章中不断回想这些问题,是怎么解决的?以及是探究过程。