database - R-Tree 中的扇出是什么?

标签 database tree r-tree

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

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

谢谢

最佳答案

任何树中,扇出是指向节点中子节点的指针的数量。

不同的树有不同的扇出。

A binary tree有扇出 2。

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

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

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

How can we determine the minimum and maximum number of entries in R-Tree? Let say if I have 10000 points and my page size is 8KiB.

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

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

关于database - R-Tree 中的扇出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22190885/

相关文章:

php - 多表连接时仅从一张表获取数据

mysql - Amazon Aurora 数据库集群无法正确自动平衡

ruby - ruby 中用于搜索空间数据的不错的(r 树、四叉树或类似)库

c++ - 内存中 Boost r-tree 与映射文件中的性能差异

algorithm - 快速点索引-(> 100.000.000)-in-polygon-(> 10.000)-test

database - DataAccessException 响应状态

mysql - 查询最多 'regular'消费客户的方法(AdventureWorks)

jquery - jQuery文件树浏览器和Django

algorithm - 图与 BFS 和 DFS 树的等价性

algorithm - 二叉树上的预序遍历和深度优先搜索一样吗?