《基于执行代价的空间查询优化方法》:
R—树是最为经典并普遍公认的空间索引。自Guttman(1984)首次提出动态的空间索引R—树以来,国内外学者开展了大量R—树族的研究。1987年,Sellis等设计了R+—。树以解决兄弟结点的重叠而产生的多路径查询问题;但R+—树同时也带来了其他的一些问题,例如,冗余存储增加了树的高度,使树的连锁更新操作更为复杂。1990年,Beckmann等提出了R*树。他们认为区域重叠并不意味着平均检索性能很差,如何插入节点才是提高检索性能的关键。Karnel和Faloutsos(1995)提出了使用n—to—m(m>n)的节点分裂方法,这使得动态R—树的构建节点更为密集,可以有效地节省空间资源和提升检索速度。
上面提到的都是动态索引。所谓动态索引是指在整个系统运行期间,树的结构随着数据的增删随时调整,以保持最佳的搜索效率;其优点是在插入或者删除数据时索引树能够自动调整;缺点是实现算法复杂。而静态索引结构通常在初始创建、数据装入时就已经定型,而且在整个系统运行期间,树的结构不发生变化,只是简单更新树结构内的数据而已;其优点是结构稳定,建立方法简单,存取方便;缺点是不利于更新;随着数据的不断增删,索引效率逐渐降低。当然上述动态索引也可以作为静态索引来使用,但这样必然会带来不必要的开销,因此大静态索引不断涌现。第一个静态R—树索引是由Roussopoulos等在1985年提出PackedR—树。其基本思想是根据空间对象MBR的一个角点的x坐标或y坐标对空间对象进行排序,然后按照这个顺序将空间对象装载(packing)到树的叶节点,并在叶节点上构建索引节点和根节点;按照MBR某角点的某维坐标进行排序并不能保证空间对象的聚集性,因此节点的空间利用率并不高。1993年,Kamel和Faloutsos提出一种基于分形曲线的静态R—树压缩算法。分形Hilbert曲线将已知空间数据的中心点进行一维映射。根据Hilbert值进行装载树节点可以获得较好的数据集簇,从而提高R—树性能。2001年,Huang等提出了CompactR—树,即采用新的分裂算法提高存储利用率,减少结点分裂次数。2002年,Brakatsoulas等认为R—树的本质上是一个典型的聚类问题,通过研究R—树构建原理,采用通用的K—means聚类算法提出cR—树。由此可见,R—树变种很多,在不同环境、不同优化思路下,需要R—树的理解做出适当的调整。
……
展开