我已经用java实现了B+树,但像往常一样,它完全是在内存中实现的。如何将B+树存储到磁盘上?btree的每个节点都包含指向其子节点的指针(主内存地址或对象引用),当Btree驻留在磁盘上时,我如何实现类似的事情?在b+树在磁盘上的场景中,用什么来替代b+树节点中的内存地址?
这里已经发布了一个类似的问题:B+Tree on-disk implementation in Java
但是我不能完全理解答案。
请分享你的观点?
发布于 2012-04-24 13:21:58
看一下github中JDBM3的代码。这个项目将B+树和类似的数据结构保存到磁盘上,你一定会在那里找到答案的。
发布于 2013-01-31 15:57:10
在最简单的形式中:您必须跟踪当前节点读取或写入的文件偏移量(从文件开始算起的字节数)。因此,在基于文件的DB上,您保存的是偏移量,而不是内存地址。
然后,当从文件中读取它时,您可以决定将其“缓存”到内存中,并保存给定节点的内存地址,或者只对偏移量进行操作。
说到这里,我不得不补充说,通常基于文件的DB要比这复杂得多,它通过将节点写入页面(通常与磁盘上的页面大小相同)来优化磁盘访问。这样,您可以通过一次磁盘寻道操作读取多个节点(被视为开销较大的操作)。
https://stackoverflow.com/questions/10292026
复制相似问题