正如问题中所述,我不是在创建表格,规范化等方面寻求数据库设计方面的帮助。
作为编程项目,我正在编写自己的DBMS。这对于学习体验来说比什么都重要,所以重新发明轮子是有目的的。
我通过查看SQLite开始我的搜索 - 我在2001〜2004年找到了我的旧SVN分支,这是令人惊讶的评论,但它仍然可以一次消化所有。但即便如此,我已经经历了大约一两个小时,而我的脑子已经处于超驱动状态。
所以我在这里问,希望看看是否有人知道一个小而非常基本的DBMS,我可以从查询解析,存储数据,构建搜索等方面获得一些想法或灵感。
谢谢!
答案 0 :(得分:1)
我被告知PostgreSQL源代码有很好的文档和结构。
但它显然不符合小型基本DBMS"。
不确定基于Java的实现是否会对您有所帮助。
答案 1 :(得分:1)
Edward Sciore的 SimpleDB (与Amazon的SimpleDB无关),“基于Java的简单多用户系统,用于教授数据库内部”。它是用Java编写的,但我认为这些想法很容易转化为C语言。
来自http://www.cs.bc.edu/~sciore/simpledb/intro.html:
SimpleDB是一个多用户事务 用Java编写的数据库服务器 与Java客户端程序交互 通过JDBC。该系统适用于 仅限教学用途。代码是 干净紧凑。 API是 直截了当。学习曲线 相对较小。关于一切 它旨在改善 数据库系统的经验 内部课程。因此, 系统故意是赤裸裸的。 它只实现了一小部分 SQL和JDBC,很少或没有 错误检查。虽然它是一个 伟大的教学工具,我无法想象 任何人都想用它 别的什么。
还有一本书:
答案 2 :(得分:1)
如前所述,SQLite,JavaDB和SimpleDB就是很好的例子。我会在列表中添加Berkeley DB。 Berkleley DB有很多文档,已经存在了好几年,除了传统的B树之外,还有几个可用的API以及HASH,QUEUE和RECNO等多种访问方法。 Berkeley DB是用C编写的键/值数据库库。Berkeley DB XML是一个用C ++编写的Berkeley DB上的XML数据库库。 Berkeley DB Java Edition是100%Java密钥/值数据库库。所有这些都在类似GPL的许可下可用,源代码包含在distribution中。
Berkeley DB的SQL API包含SQLite API,基本上在SQLite查询层下实现BDB键/值对数据存储。 Berkeley DB也是MySQL下面的第一个数据存储实现,再次采用SQL查询层并以简单的密钥/数据值数据格式存储数据。这当然是查看问题的有趣方式 - 如果您拥有灵活,快速,可扩展,可靠的数据存储,则可以在其上层叠任何类型的API或数据表示/抽象。这正是Berkeley DB所做的,它提供了核心键/值对数据存储或XML,SQL,Java集合或基础键/值对基础结构之上的类似POJO的持久层之间的选择。
Berkeley DB与您将要找到的“纯”数据存储引擎差不多。它不对存储的数据的结构,内容或格式做出任何假设。它允许上层提供这些抽象,而下层则专注于快速,可扩展,可靠的存储。这就是Berkeley DB如此广泛使用的原因之一 - 它的简单性和专注性使其非常快速,可靠和可扩展。
免责声明:我是Berkeley DB的产品经理之一,显然我有点偏颇。但是,我也在从事数据库产品工作已有25年了,我对DBMS内部知识有所了解。 : - )
祝你的研究顺利。
戴夫
答案 3 :(得分:0)
您可以查看Apache Derby数据库。这是一个完整的RDBMS实现; 好吧,它完全用Java编写。 而且,它绝对不是一个小而简单的实现。但它可以作为一个很好的参考。
答案 4 :(得分:0)
也许SQLite是一个好的开始。它尽可能简单(没有网络层,简单锁定等),但它理解真正的SQL,具有索引和约束,并在C中实现。但它的存储是特殊的。
答案 5 :(得分:0)
如果你想要一个使用SQL查询语言的简单关系数据库系统,那么就是SQLite。继续阅读该代码。
但是如果你没有挂在完全关系数据存储上,那么谷歌就可以获得B +树源代码。 B +树是允许您在磁盘上维护已排序索引的基本数据结构,15 - 20年前有几个C源代码包实现了这一点。它更简单,因为没有SQL,基本上有两个部分,一个用于管理磁盘上的块,另一个用于操作B + Tree结构。
一旦你理解了这一点,你就可以回到SQLite代码,毫无疑问在其余的代码中识别出类似的模块。
有时,最好的学习方法是回溯一些历史性步骤。