做过一个 ANSI-SQL兼容 事物化 分布式 内存数据库,还只是用于某内部项目而不需要实现得特别完整的情况下,写了我好一段时间昼夜不分。

简单来说还是几个步骤:
1. 学习:了解数据库中各个概念,弄不清概念接下来就是一头雾水。
2. 实践:从使用数据库开始,至少使用过几款数据库后,最好是在实际项目中使用,才能对各个概念有实际的印象。
3. 借鉴:读现有数据库的源代码,强烈推荐 SQLite 的代码。
4. 准备:根据已有知识,来决定自己要一个用于什么目的的数据库,需要什么特性,比起其他数据库有什么优劣,如何实现。使用什么语言,自己是不是熟悉这门语言的特性,这些都很重要。
5. 原型:数据库这种大体量的东西,千万不可能一口气吃成大胖子,一次性写出成品数据库是很难的。可以先开发一个原型,拥有数据库的主要特性。
6. 重构:现在你已经跳入过很多坑,在重构中你已经可以规避其中大多数。不要无限地重构,这样会没完没了。
7. 迭代:设计升级迭代的路径很重要,如果你想做一个越来越成熟的产品的话。

原型阶段,个人经验一两个月就行了。但重构阶段和迭代阶段会非常漫长,挖坑容易填坑难。

我设计的虽然是内存数据库,但是分布式特性,所以网络 I/O 以及分布式相关的内容成为了很多坑,我是一遍读别人代码一遍读论文度过的。写到后面突然需求要加持久化和备份的功能,又落入了磁盘 I/O 坑,苦不堪言。一上来准备充足还是有必要的,当然写了这玩意对我也有很大的帮助。

看到题主是 ACMer,有必要说点别的:

一定要写文档,否则别人没法用,时间长了你自己也不知道自己在干嘛,虽然写文档很烦。
一定要写测试,自动化测试是任何可靠的大型项目所必须的。完善的测试也能说服别人使用你的数据库。