【问题标题】:Bulk loading in a B-Tree在 B-Tree 中批量加载
【发布时间】:2022-04-06 06:15:01
【问题描述】:

https://en.wikipedia.org/wiki/B-tree#Initial_construction

目前我知道构建 B-Tree 的 2 种方法:批量加载和在密钥后插入密钥。

在 wiki 示例中,键已排序,这是批量加载的先决条件。

如果键未排序,批量加载有什么好处? 因此我必须自己对它们进行排序,结果仍然是 O(nlogn) ,就像在 B-Tree 中一个又一个键插入键一样。

谢谢。

【问题讨论】:

    标签: 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。这在加载大量保持相对静态的数据时更有用。

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 2013-04-06
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        相关资源
        最近更新 更多