0

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

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

我能想象的唯一解决方案是在文件中写入每个表,然后是一些空白空间。空白空间将用于写入新数据,并且每次表用完其可用空间时,文件都需要重组/增长。

我想我的问题是......典型的数据库数据文件中的数据“看起来”到底是什么?新数据如何/在哪里写入文件?

4

2 回答 2

2

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

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

另请参阅:http ://en.wikipedia.org/wiki/B-tree#Insertions_and_deletions_cause_trouble ,这似乎解决了您遇到的问题。

于 2011-09-03T17:57:23.920 回答
0

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

于 2013-05-02T12:37:13.477 回答