首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何编写简单的数据库引擎

如何编写简单的数据库引擎
EN

Stack Overflow用户
提问于 2009-06-27 05:44:52
回答 9查看 78.9K关注 0票数 161

我有兴趣了解数据库引擎是如何工作的(即它的内部结构)。我知道计算机科学中教授的大多数基本数据结构(树、哈希表、列表等)。我对编译器理论也有很好的理解(并且实现了一个非常简单的解释器),但是我不知道如何编写数据库引擎。我已经搜索了关于这个主题的教程,但我找不到任何教程,所以我希望其他人能给我指明正确的方向。基本上,我想了解以下方面的信息:

  • 如何在内部存储数据(即如何表示表等)
  • 引擎如何查找所需的数据(例如,运行SELECT查询)
  • 如何以快速高效的方式插入数据

以及可能与此相关的任何其他主题。它不一定是磁盘上的数据库--即使是内存中的数据库也可以(如果它更容易),因为我只想学习它背后的原理。

非常感谢你的帮助。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-06-27 05:56:25

如果你擅长阅读代码,学习SQLite会教你很多关于数据库设计的知识。它很小,所以更容易把你的头包起来。但它也是专业编写的。

http://sqlite.org/

票数 66
EN

Stack Overflow用户

发布于 2009-06-27 06:03:35

这个问题的答案是巨大的。希望博士论文的答案是100% ;)但我们可以一个接一个地思考问题:

  • 如何在内部存储数据:你应该有一个包含你的数据库对象的数据文件和一个缓存机制来加载集中的数据和它周围的一些数据到内存中假设你有一个表,有一些数据,我们会创建一个数据格式来将这个表转换成一个二进制文件,通过同意列分隔符和行分隔符的定义,并确保这样的分隔符模式永远不会在你的数据本身中使用。例如,如果您选择了<*>来分隔列,则应该验证放置在此表中的数据是否包含此模式。你也可以通过指定行的大小和一些内部索引号来使用行标题和列标题来加快搜索速度,在每列的开头,要使该列的长度像"Adam",1,11.1,“123ABC Street POBox 456”,你可以像<&RowHeader,1><&Col1,CHR,4>Adam<&Col2,num,1,0>1<&Col3,Num,2,1>111<&Col4,CHR,24>123 ABC Street POBox POBox来快速查找项目尝试使用散列和索引来根据不同的标准指向存储和缓存的数据。你可以对第一列的值进行排序,并将其存储在一个单独的对象中,该对象指向按字母顺序排序的项的行id,如
  • 如何加快插入数据的速度我从甲骨文知道的是,他们在内存和磁盘中的临时位置插入数据,并定期进行内务管理,数据库引擎一直忙于优化其结构,但同时我们不希望在发生类似的情况下丢失数据。因此,请尝试将数据保存在此临时位置,不进行排序,附加原始存储,然后在系统空闲时重新排序索引,并在完成

后清除临时区域

祝你好运,伟大的项目。

票数 27
EN

Stack Overflow用户

发布于 2009-06-27 05:55:35

有一些关于这个主题的书籍可以从加西亚-莫利纳、乌尔曼和维多姆的Database Systems: The Complete Book开始

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

https://stackoverflow.com/questions/1052189

复制
相关文章

相似问题

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