将B +树写入磁盘时保持“链接”?

时间:2012-04-24 05:10:19

标签: disk b-tree

我已经在java中完成了B +树的实现,但是像往常一样,这完全在主内存中。如何将B +树存储到磁盘上? btree的每个节点都包含指向其子节点的指针(主内存地址或对象的引用),当Btree驻留在磁盘上时,如何实现类似的功能呢?当b + tree在磁盘上时,什么会替换场景中b +树节点中的主内存地址?

这里已经发布了类似的问题:     B+Tree on-disk implementation in Java

但我不完全理解答案。

请分享您的观点?

2 个答案:

答案 0 :(得分:0)

在github中查看JDBM3的代码。这个项目将B + Tree和类似的数据结构保存到磁盘上,你肯定会在那里找到答案。

答案 1 :(得分:0)

以最简单的形式:您必须跟踪从当前节点读取或写入的文件偏移量(文件开头的字节数)。因此,在基于文件的数据库上,不是内存地址,而是保存偏移量。

然后,当从文件中读取它时,您可以决定将其“缓存”在内存中,并保存给定节点的内存地址,或仅对偏移进行操作。

有了这个说法,我必须补充一点,通常基于文件的数据库比这更复杂,通过将节点写入页面(通常与磁盘上的页面大小相同)来优化磁盘访问。这样,您可以通过一次磁盘搜索操作读取多个节点(被视为昂贵的操作)。