likes
comments
collection
share

「Rust 重写 sqlite」理解 SQLite

作者站长头像
站长
· 阅读数 18

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


数据库是如何工作的?

为了达到这个目的,我想从头开始用Rust编写一个数据库,我将以现有的SQLite为模型。

为什么是SQLite?

因为我没有时间去写像MySQL或PostgreSQL那样的东西,也可能没有这方面的专业知识。另外,我想开发一个小的数据库,只包含在一个文件中,主要目的是提高我对它的理解,为此我们不需要像大型分布式数据库那样有那么多的功能。

另外,我认为有必要说一下,即使是SQLite本身也有很多功能!你可以通过输入 sqlite3 --help 看到。我在这里的意图,至少在一开始,并不是要提供一个具有所有可用功能的完整的替代品,主要目的还是学习以及提高我对数据库的认知。

所以:我的目标是在一个文件中建立一个简单的关系型数据库,并以SQLite为模型。

为此,我的计划是,一是慢慢来,二是一步一步来,每一篇文章我都计划增加一到两个功能,让我们看看这需要多长时间。最后送大家一句话:

如果你花足够的时间在规划上,写代码其实很容易。

作为软件开发人员,我认为我们的天性是自己动手丰衣足食,然后能快速看到我们的产出(快速看到成果对开发来说有极大的成就感,即便是阶段性成果)。从无到有最终看到它们工作是件很有趣的事。但很多时候,如果我们急于求成,我们可能不得不回头重做整个事情。

不管怎么说,我这么说是因为我确定打算在每个部分上花点大量时间,并真正深入了解SQLite是如何设计的,这样我就可以尝试复制了。如果我真的了解它是如何工作的,而且我有一个循序渐进和明确的目标,那么编码部分将是小菜一碟。

理解 SQLite

值得庆幸的是,SQLite网站上的文档相当好 here。另外,还有一本 SQLite Database System: Design and Implementation,这对理解一些概念有很大帮助。

「Rust 重写 sqlite」理解 SQLite

先总体理解一下:

  1. SQLite的工作方式是将SQL文本编译成 字节码,然后使用虚拟机运行该字节码。

  2. SQLite接口作为一个编译器,将SQL文本转换为字节码。这些 字节码 是基于一个实现单个SQL语句的 sqlite3 stmt 对象。

  3. 被编译成二进制形式(字节码)的语句已经准备好被处理,并被传递给虚拟机,虚拟机反过来运行程序,直到它完成,或组装要返回的结果行,或遇到致命的错误,或被 中断