可以用三级 B 树索引的最大记录数是多少?B+树?

Rev*_*ica 5 index tree database-size btree max

我正在学习动态树结构组织以及如何设计数据库。

考虑具有以下特征的 DBMS:

  • 大小为 2048 字节的文件页
  • 12 字节的指针
  • 56 字节的页头

二级索引定义在 8 字节的页面上。可以用三级 B 树索引的最大记录数是多少?并且具有三级 B+树?

以下是这些树的两个示例:

B树

B+树

我的尝试

B+树

我读过那个

B+树比B树。因为除了最后一个之外,每个叶节点中只有表示为k最高键的集合存储在非叶节点中,组织为 B 树。关系 DBMS 内部,第 5 章:动态树结构组织,第 46 页

因此有一个区别,我们存储在 B 树的节点中的东西存储在 B+ 树的叶子中。因此,在我看来,它是(m-1) hm是顺序,h是高度),因为每个节点最多包含另一个节点的 (m-1) 个键。但这与字节数无关。

然而我在上面提到的书中找到了下表:

树的最小最大高度根据页面的大小

因此它会是 20 3.7条记录吗?

B树

对于他们来说,只要有一些值存储在节点中,我就必须除以节点数。而我被困在那里。

cli*_*ath 1

BTree 和 B+Tree 算法的开发人员可以使用许多实现选项,这些选项将影响这里的答案。在简单的 BTree 中,所有节点的大小相同,当一个节点溢出时,它会被分成两个半满节点,而不会发生其他键重新分配。由于半满和满之间平均存在均匀分布的节点,因此平均填充因子将为 75%。你可以从中计算出其他一切。

然而,实际的实现可能会将密钥重新分配到一个或两个附加的相邻节点,这会增加平均填充因子。此外,实现可以检测(或被通知)预排序键的批量插入正在发生,并且将修改分割算法以留下完整节点的踪迹,只有最终节点不完整;这种行为的优点应该是显而易见的。

在 B+Tree 中,所有键值都存在于叶节点中 - 因此 B+Tree 的叶节点数与等效 BTree 的节点总数一样多。B+Tree 还将具有包含用作拆分器的键的内部节点,并且树上会出现相同的值重复。然而,实际的实现可能会截断这些密钥以适应更多情况(这会从根本上改变扇出,尤其是在根级别),当然也可以进行密钥重新分配。

许多实现使用扩大的根节点,有些实现还允许其他节点扩展到额外的页面,以减少拆分和键重新分配的麻烦,并处理非常大的键值。

最后,许多实现缩短了删除时合并节点的过程,达到仅删除变空的节点的程度。B+树在合并方面存在许多令人讨厌的边缘情况(考虑从叶子中删除一个小键,该键被用作拆分器;现在您需要用下一个可能很大的值替换该拆分器,并导致内部节点分裂!),因此可以更容易地删除它,并且通常不需要担心任何性能影响。所以实际的填充因子不仅取决于键,还取决于历史记录。

结果是,您试图回答的问题只是出于学术兴趣而提出的。它几乎与实际实现无关。