大学生如何实现一个数据库?


Author: Kimmy

大学生如何实现一个数据库?

知乎链接


题目什么意思?限定到大学生真的好吗?

==============

写个单机的key value DB应该不怎么难,然后往上加扩展嘛。然后把查询扩展一下,存储结构优化一下,底子不错的话再优化一下单机性能,然后做成分布式的嘛。

就是这样。

===============

好的,打开电脑细致地回答你一下。
感觉做过ACM的话,应该完全没问题。

最开始只要做一个超大的哈希表就可以了。只要能实现字符串做键,字符串保存值就好。
然后对外的查询接口就只要GET, PUT和DELETE(毕竟加上Socket再改改输出形式就可以用HTTP来访问了。

然后你再考虑怎么让你的哈希表支持多种类型的值,想想怎么去保存你数据的类型信息(元数据)嘛。

既然有了元数据来保存类型信息,就能够添加类型和对查询内容进行检查了,同时这个时候也有必要扩充一下查询语句,比如加一些CREATE SCHEMA之类的。PUT的时候也可以考虑把对应的添加的内容与类型做个映射(想想SQL的Insert。

这个时候可以考虑优化存储了,相同类型的数据可以放在一起组织,可以做成连续存放的,提高查询效率。于是我们可以直接根据类型获得所对应的全部改类型的数据,然后我们就能扩展查询,GET取到对应类型的全部数据。

然后你就可以考虑扩充更多的查询语句了,比如过滤数据(对应SQL的WHERE),结果分组(GROUP BY)、聚合查询(COUNT、SUM)、关联查询(JOIN)以及各种限制(DISTINCT、TOP、LIMIT等)。

然后你是不是发现越写越烦,东西太做不好做下去了?
这个时候把你处理查询的部分写成一个专门的Parser吧,最好照着Tutorial D优化一下你的查询语言,再跟SQL比比到底谁丑。

然后去思考一下为什么关系模型发展到现在的这个样子,以及为什么现在大部分数据库都没有严格的遵守它。顺便把你的存储结构用B+树做个优化。

然后把Database System Concept上的高级话题一个个吃透。

================
P.S.: 记得之前的那个RESTful的查询API不要丢掉哦,随便扩展一下再加上JSON支持的话就能拿来找工作了。

P.S.2: MySQL(你的拼写是错的)就是Oracle他家的,不知道你要问的数据库类型是什么意思?

P.S.3: 可以去看LevelDB的代码。(据说 的H-ero DB也不错呢。

创建时间:2015-09-12 最近更新时间:2023-11-03