R-Tree
R-Tree是一颗用来存储高维数据的平衡树,它把B树的思想扩展到了多维空间,采用了B树分割空间思想,并在添加、删除操作时采用合并、分解节点的方法,保证树的平衡性。
数据结构
每个R树的叶子节点包含了多个指向不同数据的指针,这些数据可以存放在硬盘中,也可以存放在内存中。根据R树的这种数据结构,当需要进行一个高维空间查询时,只需要遍历少数几个叶子节点所包含的指针,查看这些指针指向的数据是否满足要求即可。
R树采用了MBR的方法,从叶子节点开始用矩形(Rectangle)将空间框起来,节点越往上,框住的空间就越大,从而实现对空间的分割,如下图所示:
先看图b,首先假设所有数据都是二维空间下的点,图中标识了R8区域中的数据,将那个不规则图形看作是多个数据围成的一个区域,为了实现R树,用一个MBR框住这个不规则图形,这样就形成了一个区域R8。采用同样的方法,一共得到了12个最基本的MBR,这些MBR将被2存储在叶子节点中。下一步是进行高一层的处理,我们发现R8、R9和R10这三个矩形距离最为靠近,因此就可以用一个更大的矩形R3恰好框住这三个矩形,同样,R15和R16恰好被R6框住,R11和R12恰好被R4框住等等。所有最基本的MBR被框入更大的矩形中后,再次迭代,用更大的框框住这些矩形
R树的性质
- 除根节点外,所有叶子节点包含有m至M个记录索引,作为根节点的叶子节点所具有的记录个数可以少于m,通常 m = M / 2
- 对于所有在叶子中存储的记录,I是最小的可以在空间中完全覆盖这些记录所代表的点的矩形
- 每个非叶子节点拥有m至M个孩子节点,除非它是根节点
- 每个非叶子节点上的每一个记录,I是最小的可以在空间上完全覆盖这些记录所代表的点的矩形
- 所有叶子节点都位于同一层,因此R树为平衡树
叶子节点
叶子节点所保存的数据形式为:(I, tuple-identifier),其中,tuple-identifier表示的是一个存放于数据库中的tuple,也就是一条记录,