Database 数据库内的数据是如何组织的;s数据文件

Database 数据库内的数据是如何组织的;s数据文件,database,filesystems,embedded-database,data-files,Database,Filesystems,Embedded Database,Data Files,作为学习练习,我试图用C#编写一个简单的嵌入式数据库。一切都很顺利,但在将数据保存到磁盘时,我真的陷入了困境 作为我的一个问题的例子。。我可能需要将数据“插入”到数据文件的中间。这显然是不可能的顺序文件访问。出于明显的性能原因,在每次插入时重新写入整个文件的后半部分不是一个选项 我所能想到的唯一解决方案是在文件中写入每个表,后跟一些空白。空空间将用于写入新数据,并且每当表耗尽其可用空间时,文件将需要重新构造/增长 我想我的问题是。。在一个典型的数据库数据文件中,数据究竟是什么样的?新数据如何/在

作为学习练习,我试图用C#编写一个简单的嵌入式数据库。一切都很顺利,但在将数据保存到磁盘时,我真的陷入了困境

作为我的一个问题的例子。。我可能需要将数据“插入”到数据文件的中间。这显然是不可能的顺序文件访问。出于明显的性能原因,在每次插入时重新写入整个文件的后半部分不是一个选项

我所能想到的唯一解决方案是在文件中写入每个表,后跟一些空白。空空间将用于写入新数据,并且每当表耗尽其可用空间时,文件将需要重新构造/增长


我想我的问题是。。在一个典型的数据库数据文件中,数据究竟是什么样的?新数据如何/在何处写入文件?

通常,数据库将使用B-树来存储数据(其中键将是行的主键,值将是行的内容)和索引。这样,您可以在
O(logn)
时间内将行插入任意位置

例如,请参阅,它描述了SQLite如何使用B树,其中内部节点仅存储指针,叶节点仅存储数据


另请参见:,它似乎解决了您面临的问题。

David Wolever的答案是错误的。数据库的数据不存储在B-树中。B-树(通常是B+树)只在内部节点中存储键和子指针,在叶节点中存储键和数据指针。B+树通常不存储数据(它们可能为关系表存储数据)。数据库的数据存储在数据文件中,数据文件按块组织