Data structures 为什么B树可以减少IO的数量

Data structures 为什么B树可以减少IO的数量,data-structures,binary-tree,b-tree,Data Structures,Binary Tree,B Tree,我正在读一篇关于为什么我们需要B树的文章。它告诉我B-树可以减少IO的数量,而其他树,如红黑树,则不能。IO的数量等于B树的高度 这里有一个例子 我们正在查找值9。对于B-树,有三次IO,但是对于二叉树,可能有四次IO 现在我很困惑。为什么B-树可以确保最多只有三次IO?换句话说,谁能确保节点3和节点7必须位于同一磁盘块上?我认为B-树中每个节点的数据结构可能是一个数组,因此它们是顺序的,顺序数据通常位于同一磁盘块上(说真的,我不确定…),但B-树中节点的数据结构似乎是一个列表,这意味着它们

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

这里有一个例子

我们正在查找值
9
。对于B-树,有三次IO,但是对于二叉树,可能有四次IO


现在我很困惑。为什么B-树可以确保最多只有三次IO?换句话说,谁能确保节点3和节点7必须位于同一磁盘块上?我认为B-树中每个节点的数据结构可能是一个数组,因此它们是顺序的,顺序数据通常位于同一磁盘块上(说真的,我不确定…),但B-树中节点的数据结构似乎是一个列表,这意味着它们不是顺序的。因此,据我所知,在访问
3
7
时,也可以生成两次IO。在这种情况下,难道我们不能说访问
9
可能还需要4次IO吗?

在磁盘上,每个B树节点都在一个连续的块中,每个节点都包含数千个密钥

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


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

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

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


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

为什么它“在磁盘上”?它是如何放在磁盘上的?你看,当我们创建一些数据结构时,比如二叉树,这个数据结构位于RAM中,而不是磁盘上。它位于“磁盘上”,因为你在询问I/O,而B树最常用于数据库索引。。。在磁盘上。当然,因为你的问题特别提到了磁盘块。你甚至没有读过你写的东西吗?但是你怎么能控制磁盘IO操作呢?你看,就像我说的,我们可以创建一个二叉树并在RAM中播放,一切都在RAM中,对吗?那么B-Tree如何控制IO呢?例如,我们正在开发一个新的数据库,我们想使用B-Tree,这是否意味着我们需要在玩B-Tree时调用一些系统调用,以便控制IO操作?为什么它是“在磁盘上”?它是如何放在磁盘上的?你看,当我们创建一些数据结构时,比如二叉树,这个数据结构位于RAM中,而不是磁盘上。它位于“磁盘上”,因为你在询问I/O,而B树最常用于数据库索引。。。在磁盘上。当然,因为你的问题特别提到了磁盘块。你甚至没有读过你写的东西吗?但是你怎么能控制磁盘IO操作呢?你看,就像我说的,我们可以创建一个二叉树并在RAM中播放,一切都在RAM中,对吗?那么B-Tree如何控制IO呢?例如,我们正在开发一个新的数据库,我们想使用B-Tree,这是否意味着我们需要在玩B-Tree时调用一些系统调用,以便控制IO操作?