目录

如何实现一个数据库

版本1 无事务 单线程 内存数据库

首先,我们需要实现一个 SQL 语法分析器:

Insert into student value (tony, 22, 123);

语法分析器分析后,确认是 insert 操作,要存的数据是 tony, 22, 123

那么接下来就是存储的问题了,首先想到的就是通过一个结构体数组(如下),顺序存储。

struct student {
    int id;
    char[128] name;
    int age;
    int level;
}

但是,这样的存储方式,要查询具体某个数据时,就只能顺序遍历,速度非常慢了。所以,我们需要选择别的数据结构去存储,比如 B+ 树,实现下面两个接口:

Bt.Insert( key, value );
Bt.Search( key );

那么 key 该怎么获取呢?

  • 可以通过自增唯一ID

  • 可以是 hash(value) 作为 key

该版本数据库完成。

版本2 数据持久化