如何在数据库的数据文件中组织数据

时间:2011-09-03 17:32:00

标签: database filesystems embedded-database data-files

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

David Wolever的回答是错误的。数据库的数据不存储在B树中。 B树(通常是B + -trees)仅存储内部节点中的键和子指针以及叶节点中的键和数据指针。 B + -trees通常不存储数据(它们可能用于关系表)。数据库的数据存储在其数据文件中,这些文件以块的形式进行组织。