【发布时间】:2021-01-19 17:46:19
【问题描述】:
我有这些信息:
- 1000 万条记录。
- 每条记录为 256 字节。
- 每条记录都有一个 32 字节的索引字段。
- 我们系统的磁盘块大小为 8KB。
- 我们的系统是 32 位的,所以指针是 4 字节。 (将其用于链接!)。
我想找到这棵 B+ 树的最大和最小高度。当我确实有相同的最大值和最小值时,这可能吗?如果不是,你能指出错误吗?
我采取的步骤
DATA NODE相关计算
假设 L 为数据节点(叶节点)中的数据计数
- 节点大小 = 数据计数 * 记录大小
- 8KB = L * 256 字节
- 8192 字节 = L * 256 字节
- L = 8192 / 256
- L = 32
记住:数据节点最多可以存储 32 条记录!因此,每个数据节点的最大数据数为 32。这意味着,一个数据节点至少可以存储 32/2=16 个数据至少/最少!
所以
- 最小数据数为 16
- 最大数据数为 32
INDEX NODE 相关计算
- 节点大小 = (M – 1) * 索引/键 + M * 链接(指针)
- 8KB = (M – 1) * 32 字节 + M * 4 字节
- 8192 字节 = (M – 1) * 32 + 4* M
- 8192 = 36M – 32
- 36M = 8224
- M = 228
我们的数据节点最多可以存储 32 条记录,最少可以存储 16 条记录。我们的索引节点最多可以存储 227 个索引,最少 113 个索引。
找到最小值:
- 1000 万条记录 = 32 条记录 * 叶/数据节点数
- 叶节点数 = 1000 万 / 32
- 叶节点数 = 312500
所以,要存储 1000 万条记录,我们需要 312500 个 FULL 数据节点!
对于 312500 个数据节点,我们需要从索引节点获得 312500 个链接!
- 312500 = 链接数 * 索引节点
- 312500 = 228 * 索引节点
- 索引节点 = 1370
- 由于 1370 大于 228。这意味着我们需要有较高的索引节点!
- 1370 = 228 * 上索引节点
- 上索引节点 = 6,小于 228。这意味着我们需要在这 6 个索引节点之上的根节点!
所以最小高度是 3:
找到最大值:
- 1000 万条记录 = 16 条记录 * 叶/数据节点数
- 叶节点数 = 1000 万 / 16
- 叶节点数 = 625000
所以,要存储 1000 万条记录,我们需要 625000 个 FULL 数据节点!
对于 625000 个数据节点,我们需要来自索引节点的 625000 个链接!
- 625000 = 链接数 * 索引节点
- 625000 = 228 * 索引节点
- 索引节点 = 2741
由于 2741 大于 228。这意味着我们需要有较高的索引节点!
- 2741 = 228 * 上索引节点
上索引节点 = 12,小于 228。这意味着我们需要在这 12 个索引节点之上的根节点!
问题:所以最大高度也是3?
【问题讨论】:
标签: algorithm data-structures b-tree