【问题标题】:Why does B Tree can decrease the number of IO为什么B Tree可以减少IO数
【发布时间】:2021-03-05 23:07:18
【问题描述】:

我正在阅读一篇关于我们为什么需要 B-Tree 的文章。它告诉我 B-Tree 可以减少 IO 的数量,而其他树,例如红黑树,不能。 IO个数等于B-Tree的高度。

这是一个例子。

我们正在寻找值9。 B-Tree 的 IO 是 3 倍,而二叉树的 IO 可能是 4 倍。

现在我很困惑。为什么B-Tree能保证最多只有3次IO?也就是说,谁能保证节点 3 和节点 7 必须位于同一个磁盘块?我认为B-Tree中每个节点的数据结构可能是一个数组,因此它们是顺序的,并且顺序数据通常位于同一个磁盘块(说真的,我不确定......),但似乎B-Tree中节点的数据结构是List,这意味着它们不是顺序的。所以据我了解,在访问37 时也可以生成两次IO。在这种情况下,我们不能说访问9也可能需要4次IO吗?

【问题讨论】:

    标签: data-structures binary-tree b-tree


    【解决方案1】:

    在磁盘上,每个 B 树节点都位于一个连续的块中,每个节点都包含 数千个 个键。

    对于每个键,都有一个指向下一级相应节点的指针。在磁盘上,这个“指针”是包含目标节点的连续块的地址。

    因此,例如,如果有 10^9 个叶级键,则可能有 1000000 个叶级节点。在父级上,有 1000000 个指向这些节点的键,分布在 1000 个父节点中。在根级别,单个节点中有 1000 个键。

    【讨论】:

    • 为什么它是“在磁盘上”?它是如何放在磁盘上的?你看,当我们创建一些数据结构时,比如二叉树,这个数据结构是位于 RAM 中,而不是在磁盘上。
    • 它是“在磁盘上”,因为您询问的是 I/O,而 B-Trees 最常用于数据库索引......在磁盘上。而且,当然,因为您的问题特别提到了磁盘块。你甚至没有读过你写的东西吗?
    • 但是如何控制磁盘 IO 动作呢?你看,正如我所说,我们可以创建一棵二叉树并在 RAM 中播放,一切都在 RAM 中,对吧?那么 B-Tree 是如何控制 IO 的呢?比如我们正在开发一个新的数据库,我们想使用B-Tree,是不是说我们在玩B-Tree的时候需要调用一些系统调用来控制IO动作?
    猜你喜欢
    • 2013-03-24
    • 2011-09-05
    • 2011-03-31
    • 1970-01-01
    • 2020-04-15
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多