【问题标题】:Bulk loading in a B-Tree在 B-Tree 中批量加载
【发布时间】:2022-04-06 06:15:01
【问题描述】:
【问题讨论】:
标签:
data-structures
b-tree
bulk-load
【解决方案1】:
考虑以下场景:
- 如果数据已经排序,则不需要自己对数据进行排序。这可能会导致 O(n) 加载(我不是批量加载专家)。
- 如果树非常大并且存储在磁盘或多台机器上,那么内存局部性可能会起作用。批量加载可避免在添加内容之前将树的部分“加载”到内存中。
【解决方案2】:
常规的说红黑树和4-tree的区别是滞后之一; B-tree 保留空间以供将来使用。只有当节点有太多键时,它才会分成两半。当一个人按顺序提交密钥时,就会出现效率低下;也就是说,半满的节点永远不会变满,因为总是在一侧添加。
这是一个example of a 3-tree(使用 Knuth 的定义),我按升序插入了数字 1 - 8。大部分树处于入住率的低端。访问数据的节点数的期望值为2.5。
批量加载是一个过程,在此过程中,我们忽略了拆分规则并尽可能紧凑地打包,因为我们知道我们可能会从右边获得更多。它还有助于避免不必要的复制,代价是可能必须修复树以恢复右侧的 B 树不变量。在此,我批量加载了相同的数据。
虽然渐近空间和运行时间是相同的,但它使用几乎所有空间,而不是使用略多于一半的空间。因此,此时的平均查找成本较低,预期值为 1.75。这在加载大量保持相对静态的数据时更有用。