在我看来,将数据作为文件存储在B树中的一种方法可以使用具有结构序列(数组)的二进制文件来有效地完成,每个结构代表一个节点.因此,可以使用与使用数组创建链接列表类似的方法来连接各个节点.但是,支持的问题是删除节点,因为在一个巨大的文件中只删除中间的几个字节是不可能的.
一种删除方法可以是跟踪“空”节点,直到达到阈值截止,然后制作另一个将丢弃空节点的文件.但这很乏味.
从简单/效率的角度来看,是否有更好的方法来删除,甚至在文件中表示B树?
TIA,
-Sviiya
解决方法
我做了一个非常快速的搜索并挖出了这个:
http://people.csail.mit.edu/jaffer/WB C源码:
http://cvs.savannah.gnu.org/viewvc/wb/wb/c/ – 它似乎提供基于磁盘的B树样式数据库 – 虽然看看“delete.c”它似乎意味着你删除一个节点一切从它下来将被取出 – 如果这是正确的行为,那么它听起来像可能有帮助的东西?
另外 – B树通常用在文件系统中 – 你能不看一些文件系统代码?
我自己的倾向是文件系统的倾向 – 如果你有一个固定大小的B树,每当你“删除”一个节点而不是试图删除引用时,只需将值设置为代码中没有任何意义.然后,运行一个清理线程,检查是否有人打开文件进行读取,如果所有人都安静地阻止文件并整理.