2011-09-03 70 views
0

作为一种学习练习,我试图在C#中编写一个简单的嵌入式数据库。一切都很顺利,但我将数据保存到磁盘时遇到困难。数据如何在数据库的数据文件中组织

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

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

我想我的问题是......究竟是什么数据在一个典型的DB数据文件中“看起来像”?新文件如何/在哪里写入文件?

回答

2

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

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

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

0

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