SpatialHadoop中空间索引系列之(六)R树索引原理

R 树(Reference Tree)

R树是处理空间数据的B+树的改进,它像B+树一样,是一个高度平衡的数据结构。
R 树算法是由美国加州大学的Antomm Guttman 教授在1984 年提出的一种空间数据库动态索引算法,现已成为空间数据库索引中应用最广泛的算法之一。
R 树较好地解决了许多传统算法未解决的空间数据动态索引问题。

===========================================================================

B树

对于一维升序或降序数据序列(假设其个数为N)来说,可以采用两分检索的方法来迅速地找到需要插入或删除元素的位置。
顺序表:
       -插入一个元素,需要将其以下的数据均进行后移
      - 删除一个元素,需要将以下的数据进行前移。
提高插入和删除的工作效率,研究者提出了多种解决方法,B树就是其中较好的一种方案。

--------------------------------------------------------------------

B树是由一系列节点所构成。
它的每一个节点均由2m个数据域和2m+1个指针域所构成。
每个节点的数据从左向右成升序排列。
一般情况下,B树的每个节点中的数据域不一定存放满数据,但基本上每个节点存放的数据数大于m个。


B+树

B+树是B树的变形。
要求所有的信息都在叶子节点上 。
B+树的所有关键字都出现在叶结点上,上面各层结点中的关键码均是下一层相应结点中最大关键码的复写 。
B+树的键在非叶结点中也有可能重复出现,以维持B+树的平衡。

======================================================================

       R树:称为参考树,是以空间要素的封装边界作为参考,从树根(也就是所有空间对象的几何)开始,对空间要素进行分组,每一组作为根节点的孩子节点,依此类推,直到不可再分(即分到单个要素作为孩子节点,也就是叶节点)。全部分组过程中,每一分组的数量视空间对象的分布情况(即各封装边界的组合程度)确定。

R树的每个结点不存放空间要素的值:
叶结点
由多个(Rect ,OID) 数据项组成
存储该结点对应的空间要素的外接矩形和空间要素标识。
其中OID为指向空间对象的具体数据指针
Rect 为对象OIDMBR
非叶结点
由多个(Rect ,child) 结构的数据项组成
存放其子女结点集合的整体外接矩形和指向其子女结点的指针。
child 为子结点指针

Rect 为与子结点child 相关的MBR

1、让空间上靠近的空间对象拥有尽可能近的共同祖先, 能提高R 树的查询效率。
2、因此在组织R 树的时候, 尽可能的让空间对象的空间位置的远近体现在其最近共同祖先的远近。
3、形象的说就是让聚集在一起空间对象尽可能早的组合在一起。

-------------------------------------------------------------------------------------

1、R 树允许结点相互覆盖,这种覆盖可以使R 树保持较高的空间(内存/ 磁盘) 利用率和保持树的平衡。
2、但另一个方面,过多覆盖可能会造成查询效率的降低,最坏的情况下对某一对象的查询可能造成对整个树的搜索,当然在实际数据集中这种情况很少出现。

3、由于R树具有动态平衡的特性,因此处理空间对象时具有很大的灵活性和较高的效率,但也正是为了保持其动态平衡性, 树的插入删除过程较为复杂,在插入、删除频繁时可能产生振荡的现象,反而降低了效率。
4、此外,树有一个重要的特点就是兄弟节点对应的空间区域可以互相重叠,使空间搜索的效率降低。因为区域之间有重叠,可能要对多条路径进行搜索后才能得到最后的结果。

==================================================================

R+树

       为克服在R 树中当兄弟结点出现交叉时搜索效率低的问题,Sellis 在1987 年提出了R+ 树。在R+ 树中,空间对象的MBR 可能被树中非叶结点的矩形分割。

R+ 树有如下特点
  (1) 对于中间结点的每个项 ( I ,child2pointer) , 当且仅当 R I 覆盖时 , child2pointer 指向的结点为根的子树包括一个矩形 R 。唯一的例外是当 I 是一个叶结点的矩形。在这种情况下 ,R I 只交叠。
(2) 对中间结点的任何两个项 ( I1 , child2pointer1 ) ( I2 ,child2pointer2) ,I1 I2 之间的交叠是零。
(3) 根至少有两个子结点 , 除非它是叶结点。
(4) 所有的叶结点都在同一层。
R+ 树克服了R 树中结点空间之间互相重叠的问题,从而保证了点查询时只搜索一条路径。但因此也带来了叶结点的冗余,而且随着数据库内容的增加,冗余有递增的趋势,难以控制。经对照发现,R+ 树在对象较小时性能优于R 树而在对象较大时性能比R 树略差。




你可能感兴趣的:(index,spatial,SpatialHadoop)