Z-order
Z-Ordering in Point Databases
Z曲线定义
将数据空间分割成四个sub-quadrants。这将递归地重复,直到达到某个基本分辨率为止。固定的递归迭代次数称为分辨率g。然后我们停止并使用得到的g位序列(称为象限序列)作为点的排序键(按字典顺序排序)。本文中每个代表数据空间中的一个区域的象限序列被称为元素(element)。
Z曲线查询
假设一个具有指定窗口的窗口查询。数据空间被分解为四个象限。测试每个象限与查询窗口的交集。
- 如果象限不与查询窗口相交,则不需要做任何操作。
- 如果象限完全包含在查询窗口中,则必须从数据库中检索所有点,并将该element的象限序列作为其键的前缀。如果键被表示为整数,我们必须检索后续数字的间隔。
- 所有被窗口相交但没有完全封闭在窗口中的剩余象限(即相交)被递归分解,直到达到基本分辨率为止。
A Naive Approach for Polygon Databases
为了扩展z-order的概念来管理具有空间扩展的对象(例如矩形或多边形),我们面临一个给定的多边形与许多单元相交的问题。一种简单的方法是将对象覆盖的每个单元存储在数据库中。显然,这种方法会导致巨大的存储开销,除非基本网格非常粗糙。
One-Value-Approximation
面对象由包含该完整对象的最小element近似。在这种情况下,我们确定象限序列的递归算法修改如下:将当前数据空间划分为四个象限。如果恰好有一个象限与该对象相交,则递归处理该象限。如果超过一个象限相交,则停止。使用到此点为止的象限序列作为排序键。
该方法有一个明显的优点,
- 即每个对象都由单个键表示,而不是像Naive Approach那样由一组键表示。
但这种方法也有一些缺点。
- 第一个缺点是:在这种方法的象限序列有不同的长度,取决于最小的封闭象限的分辨率。因此,我们将其简单地解释为数值是不可能的。键必须存储为可变长度的字符串,并按字典顺序进行比较,这比数值比较效率低。
- objects may be represented very poorly。例如,任何与数据空间中间的轴平行线(直线x = 0.5和直线y = 0.5)相交的多边形只能用空象限序列逼近。如果要逼近的多边形非常大,用空序列或非常短的序列逼近似乎是合理的。对于小多边形,相对逼近误差太大。因此,物体近似的相对空间开销是无限的。实际上,用空象限序列近似的对象是用户请求的每个查询的候选对象。数据库中存储的具有短象限序列的对象越多,索引的选择性就越差。
XZ-order
与之前的方法相比,XZ曲线避免了对象重复和变长象限序列的缺点。为了实现这种健壮性,我们采用了三个方法:
- 将重叠纳入元素的概念中。我们将定义元素,使相同分辨率级别l的相邻元素相互重叠高达50%。(这种方法使我们能够存储没有冗余和没有失控的近似误差的对象。特别地,一个非常小的物体不可能用一个非常短的序列甚至是空序列来表示)
- 第二种思路是利用一种复杂的四象限序列编码方案,将变长四象限序列以保持距离的方式映射到整数域。
- 第三种思想是查询处理中interval generation的一种有效算法。
Overlapping Cells and Elements
事实上,如果一个对象位于大元素之间的边界上,那么任何将空间分解为互不连接的单元格的技术都会遇到麻烦。因此,我们修改元素的定义,使相同分辨率级别l上的元素之间允许重叠。
设想重叠元素定义的最简单方法是采用z顺序获得的原始元素,并向上和向右将高度和宽度扩大2倍。然后,两个相邻的cell相互重叠50%。其特殊的优点是,该定义还包含了与中轴相交的对象的小元素。
Definition 1: Enlarged elements
Enlarged elements的左下角对应于z - order的左下角。设s是这个左下角的象限序列,让|s|表示其长度,将右上角进行平移,使元素的高度和宽度为0.5^(|s|-1)。
Lemma 1. Minimum and Maximum Length of the Quadrant Sequence
高度h和宽度w的对象的象限序列s的长度受以下限制:
Numbering Quadrant Sequences
我们给出了一个长度从0变化到由基本分辨率决定的最大长度g的象限序列。我们的问题是要以保序的方式给序列赋数,即数字的less-equal-order必须与四象限序列的字典序相对应。
对于我们的编号方案的定义,我们必须确保后面两个长度为l的字符串s1和s2的代码之间有足够的数字来表示在s1和s2之间排序的所有字符串。以s1作为前缀的字符串,它们的数量是(4^(g-i) - 1)/ 3。
所以为象限序列<q0 q1 q2 …q(l -1)>的每个quadrant number qi 乘上 (4^(g-i) - 1)/ 3。
Query Processing
Insert and Delete
一旦确定了象限序列的长度l,则象限序列s由对象边界盒的左下角对应的左下角。这个序列s被剪到长度l,并根据定义2进行编码。
From Window Queries to Interval Sets
对于查询处理,我们可以采用类似于之前介绍的算法的递归方式进行。我们确定查询与哪些象限相交。
- 那些不相交的被忽略。
- 如果一个象限完全包含在查询窗口中,那么所有以对应象限序列作为前缀的元素都完全包含在查询中。因此,将生成相应的xz值的间隔(查询范围),并标记为以后从数据库中检索。
- 如果一个象限相交,首先该象限相应的xz值被确定并标记(it is handled as a one-value interval,我认为应该是该象限的四个子象限的xz值)。然后递归调用算法的所有子象限。