【问题标题】:What is fanout in R-Tree?R-Tree 中的扇出是什么?
【发布时间】:2014-03-05 07:04:35
【问题描述】:

我对 R-Tree 数据结构有疑问。什么是 R-Tree 中的扇出。是最大条目数吗?

我们如何确定 R-Tree 中的最小和最大条目数?假设我有 10000 点并且我的页面大小为 8kb。

谢谢

【问题讨论】:

  • 您确定您的意思是 R-tree 而不是 B-tree(或 B+-tree)?
  • 是的,我确定它是 R-tree。
  • 请注意,由页面大小确定的扇出仅对外部树有意义,即存储在文件中且太大而无法完全加载到内存中的树。在内存中,具有低扇出的树更有效,因为它们每次搜索总共需要的比较更少。

标签: database tree r-tree


【解决方案1】:

扇出,在any树中,是指向节点中子节点的指针数。

不同的树有不同的扇出。

binary tree 有扇出 2。

A B-tree 有一个扇出 B,除了叶子之外的所有节点都有 B/2B 之间的子节点。外部(磁盘上)实现通常放宽最小子节点数限制以保存一些更新。

在数据库中,经常使用B-trees 或其变体B+-trees,这样每个节点的大小为一页,扇出由适合该空间的排序键和指针的数量决定。

R-tree 是一个搜索树,其中索引是多维区间。这些可能会重叠。它可能有任何扇出。通常是 2 到维数(因此 4 表示 2 维,8 表示 3 维等)。但是它也可能有更高的扇出,并且像 B-tree 一样组织它当然是可能的。

我们如何确定 R-Tree 中的最小和最大条目数?假设我有 10000 个点并且我的页面大小是 8KiB。

树节点的大小不必与页面大小匹配。如果是这样(通常用于外部,即磁盘上的实现),您仍然需要知道排序键有多大以及指针有多大。 R-tree 每个维度需要 2 个坐标值,最小值和最大值。因此,具有双精度坐标的二维 R 树(映射应用程序中出现的常见情况)将有四个 64 位值描述矩形加上一个子指针,外部实现可能也希望使用 64 位。也就是说,每个孩子 20 B,您可以在 8 KiB 页面中压缩其中的 409 个。点数无关紧要。坐标系的尺寸和精度。

在内存中,低扇出的树更有效,因为虽然它们更深,但每次搜索需要的比较更少。然而,在磁盘上(在数据库中),缓慢的操作是读取,因为这只能在块中完成,所以通过让每个节点填满整个块并相应地具有更高的扇出来减少节点数量会更快。

【讨论】:

  • 我不同意最后一段。即使在内存中,由于 L1/L2/L3 缓存等原因,拥有更大的扇出也可能是有益的 - 与插入排序比小数组上的堆排序更快的原因相同。
【解决方案2】:

“Fanout”是指 R-Tree 拥有的每个节点的指针数

【讨论】:

  • 是指条目数吗?
  • @user3030823:不。这意味着每个父节点的条目数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2014-06-11
  • 2011-05-01
  • 2021-07-17
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多