我已经构建了一个自己的b +树索引,其中包含了对索引进行插入/删除/搜索的所有操作。为了加速插入庞大的数据集,我想实现批量加载以便能够试验大型数据集。
我一直在尝试做的是对数据进行排序并开始在叶级填充页面。必要时,将密钥复制或推送到较高级别。我总是在不同的高度跟踪指数的前沿。例如,如果我的索引是高度3(root,一个级别包含内部节点和叶子级别),我只在内存中保留3个页面,一旦它们满了,或者没有更多数据,我将它们写入磁盘。
问题是要为每个页面写入多少数据来维护所有单个节点的页面限制。可以找到 here这些限制。我找不到任何有用的资源,其中包含有关批量加载实现的详细信息,或者是一个很好的策略,用于确定要使用的填充率以保证节点限制。
有什么想法吗?
答案 0 :(得分:0)
根据问题的评论,我可以说你担心的是最后一页(或考虑树中较高位置的最后一页)可能达不到最小填充数。
由于这些页面的数量受log2(n)(树的高度)的限制,我怀疑理论性能保证不会受到影响。
无论如何,您所链接的保证不是正确性所必需的。它们足以保证运行时间的界限。它们不是必要的,但保证了运行时间(例如:在b树的末尾添加一行一行 - 你仍然可以获得相同的保证运行时间。)
如果你想知道真正的b-tree是如何运作的,你可能想看看你最喜欢的RDBMS(作为一个SQL Server用户,我知道SQL Server很乐意在不实用的情况下运行50%的页面填充保证影响)。我想你会发现理论上的问题被认为不是很有意义。