扇出B +树

时间:2015-09-21 04:54:05

标签: algorithm b-tree

扇出如何完全影响B +树中的分割和合并?

如果我有1024字节页和8字节键,可能是8字节指针,我可以在一页中存储大约64个键。考虑一个页面将是我的节点,所以如果我有80%的粉丝,这是否意味着在节点80%已满之后会发生拆分,就像在插入52个密钥之后或仅在节点溢出之后。

对于合并,如果我们有80%扇出,当密钥小于节点大小的一半或80%与它有关时,我们何时合并节点。

1 个答案:

答案 0 :(得分:0)

各种B树中的拆分和合并通常由基于完整性标准的策略驱动。最好考虑节点空间利用率而不是密钥数量的丰满度;固定大小的结构 - 其中空间利用率是根据关键数量来衡量的,因此相当于扇出 - 往往只发生在学术界和特殊情境中,例如整数或散列中的内存B树。在实践中,通常涉及可变大小的元素,从可变大小的键开始,通过诸如前缀/后缀截断和压缩之类的东西进一步限制大小。

只有当更新操作导致溢出的节点时才会发生拆分。策略之间的区别在于他们尝试将密钥转移到相邻节点以避免分割(仅查看一个兄弟或两者)以及他们尝试卸载多少个密钥(一个或多个)的难度。某些锁定策略需要在初始下降期间进行预防性拆分/合并,以确保在备份的过程中不会发生拆分或合并。在这种情况下,必须根据最小/最大可能的密钥大小做出决定,而不是查看实际密钥的大小。

某些策略只有在它们有两个完整的相邻节点时才会分裂,然后它们会分成三个节点,并且只有当它们有三个相邻的节点处于下溢边缘时才会合并(导致两个完整节点)。最终结果是最低利用率为2/3,平均利用率为3/4或更高。但是,更新算法的复杂性增加很少值得一试。

总的来说,标准可以这样概括:当一个节点有可能溢出并且无法将密钥卸载到邻居时拆分,当节点威胁下溢时合并,并且没有邻居可以捐赠密钥。