![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
手写数据库系统
文章平均质量分 73
iSourceCoder
研究计算机基础和java高级进阶知识
展开
-
哇塞,太牛鼻了,还可以写一个数据库管理系统
Part4 我们的第一个测试 我们已经能够在在我们的数据库中插入数据和查询所有的数据。让我们花点时间来测试一下! 我将使用rspec 来写我们的测试,因为我比较熟悉它,而且语法是公平的。 我定义一个短助手来发送一个命令集合给我们的数据库程序,然后使用断言输出: describe 'database' do def run_script(commands) raw_output = nil IO.popen("./db", "r+") do |pipe| commands.ea原创 2021-03-16 00:06:32 · 306 阅读 · 0 评论 -
内存中的,仅有一个数据库表的数据库
Part3 内存中的,仅有一个数据库表的数据库 我们一开始就会对数据库设置很多的限制。现在,他将会: 支持两个操作:插入一行数据和打印所有的行数据。 保存在内存中(不持久化到磁盘)。 支持一个简单的,硬编码的表。 我们的硬编码表存放用户并如下表展示的: column type id integer username varchar(30) email varchar(255) 这是一个简单的架构,但它使我们能够支持多种数据类型和多种数据类型的大小。 insert语句就像下面的原创 2021-03-08 00:06:14 · 244 阅读 · 0 评论 -
如何教你从0到1实现一个简单的数据库系统(二)--世界上最简单的SQL编译器和虚拟机
我们做一个sqlite的克隆。sqlite的前端是一个SQL编译器,它是用来解析一个字符串并且输出一个称为字节码的内部表示。字节码通过虚拟机来执行它。 将事物分成两个步骤具有两个优点: 减少每一部分的复杂性(例如:虚拟机不需要担心语法错误) 允许编译一次共同查询并缓存字节码以提高性能。 在这个想法中,让我们重构我们的main()函数并支持处理两个新的关键字: int main(int argc, char* argv[]) { InputBuffer* input_buffer = new_inp原创 2021-02-28 23:15:54 · 338 阅读 · 0 评论 -
如何教你从0到1实现一个简单的数据库系统(一)
作为一个web从业者,我们每天都和关系型数据库打交道,但是对我们来说只是黑箱,因此我们就很想知道数据库是怎么样工作的?于是乎我就想弄明白数据库到底是怎么运作的,它的基本原理是什么?因此我决定从以下几个问题入手来弄明白数据库系统 数据库中的数据在内存或者磁盘中以什么格式保存? 什么时候数据从内存移动到磁盘中?(持久化) 为什么数据库的每个表有且只有一个主键? 数据库中事务的回滚是怎样工作的? 数据库中索引是怎样格式化的? 什么时候以及如何去扫描全表? 已准备好的语句以什么格式保存的? 换句话说,一个数据库是怎原创 2021-02-25 00:04:48 · 2747 阅读 · 1 评论