【问题标题】:Do btrees and b+trees only store data at the leafs?btrees 和 b+trees 是否只在叶子上存储数据?
【发布时间】:2011-02-03 17:52:27
【问题描述】:

b 树和 b+ 树是否只在它们的叶子上存储数据?我假设他们使用内部节点来搜索所需的数据。

是这样还是他们在每个节点都存储数据?

【问题讨论】:

  • B+树只在叶子中存储数据。 B 树可以将数据存储在内部节点中。

标签: theory b-tree


【解决方案1】:

所有数据都在叶子中。

Wiki on B+.

【讨论】:

    【解决方案2】:

    非叶​​节点“记录”包含

    • 指向树下一层节点的指针(某种节点“地址”)
    • 该节点中第一个(或最后一个,取决于实现)记录的键值

    此类非叶“记录”按键顺序列出,以便通过扫描(或在其中进行二进制搜索)非叶节点,可以知道下一层的哪个节点可能包含搜索值。

    叶节点记录包含完整的数据记录:键值和其他任何内容。

    因此“真实”数据仅包含在叶节点中,非叶节点仅包含键值的[副本]。 对于一小部分数据(这个比例取决于在叶节点中发现的平均数据记录数)。

    这在来自Wikipedia article on B+ Trees 的下图中进行了说明

    顶部的非叶节点(这棵简单树中唯一的一个)仅包含两个非叶节点记录,每个记录都有一个键值副本(蓝色)和一个指向相应节点的指针(灰色)。这棵树恰好只有两层,因此根节点中的“记录”指向叶节点。可以想象还有额外的层次(在下面显示的最顶层树之上,称之为“3-5 节点”);如果是这种情况,上面的节点将包含(以及其他类似的记录),键值为 3 的记录和指向“3-5”节点的指针。
    另请注意,只有键值 3 和 5 包含在非叶节点中(即,甚至 所有 键值都不会在非叶节点中复制)。
    顺便说一句,在此示例中,非叶节点包含下一个节点中 last 记录的键(如果使用 first 记录也可以,但略有不同然后实现搜索逻辑的方式)。

    叶节点包含键值(也是蓝色)和相应的数据记录(d1,d2...显示为灰色)。显示在每个叶节点末尾的红色指针指向下一个叶节点,即包含键顺序的下一个数据记录的叶节点;这些指针对于“扫描”一系列数据记录很有用。

    【讨论】:

      【解决方案3】:

      BTrees 和 B+Trees 存在一些混淆。 B+Trees 仅将叶节点上的数据存储为指针。这意味着数据必须存储在其他地方。 BTree 可以在每个节点上存储数据。每个都有优点和缺点。我注意到有些网站显示的 BTrees 与 B+Trees 完全相同。一般来说,BTrees 更擅长保存实际数据,而 B+Trees 作为索引效率更高。

      【讨论】:

        猜你喜欢
        • 2011-10-18
        • 2011-02-27
        • 2012-12-26
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-07
        相关资源
        最近更新 更多