为了在文件中实现 B 树,您可以使用文件偏移量而不是指针。此外,您可以实现“文件内存管理器”,以便您可以重新使用文件中已删除的项目。
为了完全恢复 B 树文件中已删除的块,您必须在新文件中重新创建 B 树。还要记住,大多数操作系统没有截断文件的方法。截断文件的一种可移植方法是写入一个新文件并销毁旧文件。
另一个建议是将文件分区为 B-Tree 分区和数据(项目)分区。B-Tree 分区将包含页面。叶页将包含数据项的偏移量。数据分区将是文件中包含数据项的部分。您最终可能会为每个分区创建多个分区,并且这些分区可能是交错的。
我花了很多时间玩基于文件的 B 树,直到我放弃并决定让数据库程序(或服务器)为我处理数据。
小智 3
我做了一个非常快速的搜索并挖出了这个: http: //people.csail.mit.edu/jaffer/WB C 来源:http://cvs.savannah.gnu.org/viewvc/wb/wb/c/ -它似乎提供基于磁盘的 B 树样式数据库 - 尽管看一下“delete.c”,它似乎暗示如果你删除一个节点,那么它下面的所有内容都会被删除 - 如果这是正确的行为,那么听起来就像有什么可能有帮助的吗?
另外 - B 树经常在文件系统中使用 - 你能不看看一些文件系统代码吗?
我自己的倾向是文件系统 - 如果你有一个固定大小的 B 树,每当你“删除”一个节点而不是尝试删除引用时,只需将值设置为在代码中没有任何意义的值。然后,运行一个清理线程,检查是否有人打开该文件进行读取,以及是否一切正常都会阻止该文件并进行清理。