首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建我自己的数据库系统

创建我自己的数据库系统
EN

Software Engineering用户
提问于 2011-11-25 06:15:18
回答 8查看 105.7K关注 0票数 80

为了更有效地使用数据库,我需要了解数据库是如何工作的,我的学习方法是做。

我想要创建我自己的数据库系统。我指的不是创建使用查询解析文件的伪数据库;这只是一个带有查询语言的文件系统接口。我说的是数据库引擎的实际结构。而且,由于我所想到的既不是关系型的,也不是面向文档的(它是“面向节点的”,如果这种情况存在的话),我需要任何资源尽可能的抽象和高级。

那么,我该如何去创造这个呢?我可以阅读哪些资源/教程/书籍来理解?

语言一点也不重要。理想情况下,代码应该是伪代码来说明这个概念,而不是特定的语言,但是任何东西都可以。我在谷歌上找不到任何关于这件事的东西(因为我在这个问题上太不识字了,也许我只是没有进入正确的搜索)。

如果这些资源是不可用的,那么我想关于如何创建客户机的事情至少是朝着正确的方向迈出的一步。

EN

回答 8

Software Engineering用户

回答已采纳

发布于 2011-11-25 11:47:25

(它是“面向节点的”,如果它存在的话)

从这里开始。在处理像数据库这样的复杂应用程序时(即使是简单的数据库也是一个复杂的应用程序),您应该熟悉域的历史和适当的术语,并且至少对体系结构有一个非常高层次的概念。您可以从维基百科关于数据库的文章开始。花了几天时间阅读所有关于相关概念和不同数据库类型的文章。

因为我的想法既不是关系的,也不是面向文档的。

接下来,选择Relational。如果选择NoSQL,则应该选择一种类型的NoSQL。这一点非常重要,您将找不到任何讨论所有不同数据库家族的架构文档。你选哪一个并不重要,只要选一个就行了。

语言一点也不重要。

是的(不幸的是),因为在您选择了一个数据库家族之后,您应该开始从该家族的开源数据库中探索代码。有一些关于寻找哪些内容的通用准则:

  • 相对较小的代码基,
  • 架构文档或至少一个开发博客,
  • 你选择的数据库应该接近家庭中被认为是通用的数据库,如果它是高度专业化的,那么它将很难学习。

有几个例子适合:

获取源代码,编译它,并使用它。您不需要提交补丁或任何花哨的东西,只需探索代码,并进行一些小的修改,看看会发生什么。这是一个递增的过程,您越多地使用它,就越容易理解代码的功能。如果你选择的第一个项目似乎很难理解,那就转到下一个项目吧。

另一个很好的选择是集中精力为MySQL构建一个引擎,就像@ 先前的回答中所建议的那样。

如果您确实能够使用代码库做一些有用的事情,那么参与项目的社区,这是找到有关概念的更详细资源的最简单的方法。

然后,最后,开始处理您的数据库。一开始,您只需编写您一直在探索的代码的极度缩小的克隆即可。它不一定是原创的,很多伟大的项目都是以克隆或分叉的形式开始的。

我可以阅读哪些资源/教程/书籍来理解?

有很多书:

还有几百篇,加上无数的学术论文,你可以很容易地通过谷歌追踪到。你需要先定义你想要做什么,然后搜索一本书。与其他数据库作者一起工作也会帮助你缩小书籍的范围,或许还能得到比上面更好的建议。

祝好运!我希望在您完成工作后会有一个链接到您的存储库的评论。如果你还没写完,一定要留下评论提醒我,我还没有完成我在2001年开始写的编译器。

票数 82
EN

Software Engineering用户

发布于 2011-11-25 09:21:58

你应该这么做,别想太多了。享受学习过程和思考是一种恩赐。

问其他人这是否是个好主意肯定不是好策略。如果我听了所有的青蛙,今天我还会在宜家工作,把购物车从停车场推到仓库。

你不必像艾因德在那个有趣的帖子里那样为自己辩护。问题是:

然而,作为一个务实的开发人员,我想知道这个项目在一个已经饱和的市场上提供了什么新的东西,在这个市场上,您有相当成熟的替代品,如CouchDB、MongoDB、东京、Redis等等。这些产品中有许多也是跨平台的,以C的速度运行,并取得了良好的记录,在非常大的网站上使用,它们的分片能力和容错能力已经大大提高了。

如果你喜欢这个过程,不要担心目标,你已经赢了。

票数 33
EN

Software Engineering用户

发布于 2011-11-25 10:25:28

“(它是”面向节点的“,如果这种情况存在的话)。-这可能就是你找不到很多的原因!

深入到0.1版本,看看你得到了什么。你可以从你想要的东西中学到更多,从问你应该做什么中学到更多。给它几天时间,然后回顾一下你得到了什么。

大约18年前,我用btree索引编写了一个基本的数据库系统(为了好玩,去图),学到了很多东西。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/121653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档