【问题标题】:How to decide order of a B-tree如何确定B树的顺序
【发布时间】:2015-04-25 00:14:11
【问题描述】:

据说B树在大量数据无法放入主内存的情况下特别有用。

我的问题是我们如何决定 B 树的顺序或在节点中存储多少键?或者一个节点应该有多少个孩子?

我发现人们在每个节点都使用 4/5 个密钥。它是如何解决海量数据和磁盘读取问题的?

【问题讨论】:

  • 如您所说,B 树在需要大量磁盘读取时很有用。在这种情况下,数据是按块读取的。所以树的顺序是由块大小、键域大小和指针大小决定的。

标签: algorithm data-structures b-tree


【解决方案1】:

通常,您会选择顺序以使生成的节点尽可能大,同时仍适合块设备页面大小。如果您尝试为磁盘数据库构建 B 树,您可能会选择这样的顺序,使每个节点都适合单个磁盘页面,从而最大限度地减少执行每个操作所需的磁盘读取和写入次数.如果您想构建内存 B 树,您可能会选择 L2 或 L3 缓存行大小作为目标,并尝试在不超过该大小的情况下将尽可能多的键放入节点中。无论哪种情况,您都必须查看规格以确定要使用的尺寸。

当然,您也可以随时进行实验并尝试根据经验确定这一点。 :-)

希望这会有所帮助!

【讨论】:

  • 非常感谢您的精彩回答。但是构建内存中的 B-tree 有什么意义呢?我的印象是,只有在我们有大量数据无法放入内存的情况下,它们才是比其他自平衡树(AVL、红黑等)更好的选择。
  • 而当所有的例子都在一个节点中放入4/5整数时,是否只是为了举例,并没有任何实际意义?
  • B 树最初是为数据库设计的,但由于内存缓存,它们现在有时在主内存中使用。至于 4 或 5,我的猜测是它们只是示例。从教授数据结构的经验来看,将更大的 B-trees 放到幻灯片上真的很困难。
  • 再次非常感谢。我可以请您注意另一个愚蠢的问题吗 - stackoverflow.com/questions/28680730/…
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2018-07-05
  • 2021-04-07
相关资源
最近更新 更多