MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); function MyAutoRun() {    var topp=$(window).height()/2; if($(window).height()>450){ jQuery(".outline_switch_td").css({ position : "fixed", top:topp+"px" }); }  }    window.onload=MyAutoRun; $(window).resize(function(){ var bodyw=$win.width(); var _leftPaneInner_width = jQuery(".rich_html_content #leftPaneInner").width(); var _main_article_body = jQuery(".rich_html_content #main_article_body").width(); var rightw=bodyw-_leftPaneInner_width-_main_article_body-25;   var topp=$(window).height()/2; if(rightw<0||$(window).height()<455){ $("#nav-article-page").hide(); $(".outline_switch_td").hide(); }else{ $("#nav-article-page").show(); $(".outline_switch_td").show(); var topp=$(window).height()/2; jQuery(".outline_switch_td").css({ position : "fixed", top:topp+"px" }); } }); 排序的相互k-Skyband查询算法
  软件学报  2015, Vol. 26 Issue (9): 2297-2310   PDF    
排序的相互k-Skyband查询算法
蒋涛1, 张彬1 , 余法红1, 柳晴2, 周傲英3    
1. 嘉兴学院 数理与信息工程学院, 浙江 嘉兴 314001;
2. 浙江大学 计算机科学与技术学院, 浙江 杭州 310027;
3. 华东师范大学 软件学院, 上海 200062
摘要:不同于传统的k-Skyband 查询方法,提出一种相互k-Skyband 查询(MkSB),它从对称角度执行Skyline查询,找出所有既在q的动态k-Skyband(DkSB)中又在q的反向k-Skyband(RkSB)中的数据对象.进一步地,为了更好地支持用户决策和数据分析,排序操作被引入到MkSB算法中.因为MkSB 需要执行q的DkSB 和反向RkSB,故它需要遍历索引多次,从而导致了大量冗余的I/O 开销.利用信息重用技术和若干有效的修剪方法,MkSB 将多次的索引搜索合并成单次,极大地降低了I/O访问次数.同时,证明了基于窗口查询的MkSB(WMkSB)算法具有最低的I/O 代价.在真实与合成数据集上的实验结果表明,所提出的算法是有效的且明显胜过基于BBS 的算法,尤其WMkSB 算法具有极少的I/O 开销,通常能够减少95%以上的冗余I/O.
关键词算法    排序    k-Skyband    相互k-skyband    空间数据库    
Randed Processing for Mutual k-Skyband Query
JIANG Tao1, ZHANG Bin1 , YU Fa-Hong1, LIU Qing2, ZHOU Ao-Ying3    
1. College of Mathematics Physics and Information Engineering, Jiaxing University, Jiaxing 314001, China;
2. College of Computer Science and Technology, Zhejiang University, Hangzhou 310027, China;
3. Software Engineering Institute, East China Normal University, Shanghai 200062, China
Abstract: This paper proposes a novel Skyline query: mutual k-Skyband (MkSB) query. Unlike the traditional k-skyband query methods, MkSB executes the Skyline query from a symmetric perspective, and retrieves all the objects which are among both the dynamic k-Skyband (DkSB) of a specified query object q and the reverse k-Skyband (RkSB) of q. Furthermore, the ranking operation is introduced into MkSB due to its importance in data analysis and decision support. Since MkSB needs to perform DkSB and RkSB of q, it traverses the index multiple times, incurring much redundant I/O overhead. The proposed algorithms reduce multiple traversals to a single one, using the information reuse technology and several effective pruning heuristics that significantly cut down I/O accesses. Meanwhile, it is proved that MkSB based on window query (WMkSB) has the lowest I/O cost. Extensive experiments are conducted on both real and synthetic datasets, and the experimental results show that the proposed algorithms are efficient and outperform their competitors, i.e. the basic algorithm based on BBS (branch and bound Skyline). Especially, WMkSB has the least I/O cost and often reduces more than 95% redundant I/O accesses.
Key words: algorithm    ranking    k-Skyband    mutual k-Skyband    spatial database    

Skyline计算在许多领域具有潜在的应用价值,例如:多标准决策(multicriteria decision making)[1]、空间位置导航服务(例如:在线地图服务)[2]、商业数据分析(例如:超市位置选取、产品用户偏好分析)[3, 4]、环境监测(例如:火灾温度、瓦斯浓度)[5]等领域.

基本的Skyline计算方法可以分为两类:Skyline查询算法[2, 3]和反向Skyline查询(RSQ)算法[4, 5, 6].Papadias等人[1]首次提出基于分支界限的Skyline(branch and bound Skyline,简称BBS)算法,其主要思想依据维护的最小堆来访问索引节点,从而保证每次处理的节点(entry)与坐标原点具有最小距离,进而使得距离原点最近的数据对象为Skyline对象,然后继续这个搜索过程,将渐进地(progressive)获得其他的skyline对象,并使得整个算法具有最优的I/O效率[1].进一步地,他们提出了扩展Skyline边界线为厚度为k的Skyline边界带,此即k-Skyband.当指定查询对象q时,基本的k-Skyband就成为了动态k-Skyband(DkSB),记为DkSB(q).显然,DkSB本质上是一种放松Skyline控制关系的计算,它使得不被任意其他对象的控制关系变成了最多可以被k个其他对象控制(k也表示边界线的厚度).Liu等人[7]提出反向的k-Skyband(RkSB)查询算法,主要思想是修改BBS算法使得适应k-Skyband查询以及预计算方法和一些启发式的修剪策略.记查询对象q的RkSB为RkSB(q)).进一步地,Miao等人[8]解决了不完整数据集上的k-Skyband查询.Feng等人[9]则利用多核体系计算机并行计算k-Skyband查询.

然而,这些k-Skyband算法仅从查询对象q的正向角度考虑k-Skyband的查询需求,即要求查询的结果(例如: 对象p)在q的动态k-Skyband中(即p∈DkSB(q)),或者q的反向角度执行k-Skyband查询,即要求q处在某对象p的动态k-Skyband中(q∈DkSB(p)).因而,这些算法不能直接用来处理体现相互关系的应用.例如:个人匹配服务.事实上,考虑数据之间的相互关系是非常重要的.例如:文献[10]中提出的相互skyline即考虑了这种需求,因为返回的查询结果p既在查询对象q的skyline中,也在q的反向skyline当中.为此,本文提出了体现相互关系的k-Skyband查询类型,即相互k-Skyband(MkSB)查询.类似地,MkSB查询中返回的结果既在q的动态k-Skyband中,也在q的反向k-Skyband中.

MkSB查询在许多需要体现相互关系的应用场景中具有非常重要的意义.例如:考虑一个交友网站中的基于个性特征匹配的服务,且假定每个用户的爱好(喜欢音乐、体育、游戏等)表示用户的个性,每个用户某个爱好的喜欢程度表示为0~1之间的一个实数值(注意,不同用户的爱好程度可以相同).对于给定的查询用户q(例如: Bob),希望根据他的爱好找出的好朋友与他的志趣都比较接近,这样Bob可以发出一个k-Skyband来寻找这样的朋友.假定,返回的查询结果中有位称作Alice的女性朋友,Bob非常喜欢,且希望与她约会.那么,Alice是否愿意呢?如果Alice也发出一个k-Skyband查询,发现Bob并不在她的查询结果当中(这表明Bob相对她获取的查询结果中的其他人来说,Bob距离Alice的个性特性较远).Alice很可能会拒绝Bob的约会请求,因为她认为Bob并不符合她的个性特性.反之,如果Bob在Alice的查询结果当中,那么Alice则有可能接受Bob的约会申请.这是因为MkSB查询保证了Bob和Alice在个性特性上是相互匹配的.

显然,相互k-Skyband查询可以通过分别执行一次查询对象q的正向k-Skyband和反向k-Skyband,然后计算DkSB(q)和RkSB(q)的交集来实现.然而,这种简单的实现方法效率很低,存在大量冗余的I/O,不适合现实的应用场景.例如:具有较少能量和计算能力的传感器网络应用中[11].另一方面,直接的MkSB查询返回的结果缺乏排序操作,使得用户不易选择.为此,本文进一步引入排序操作.例如:选取一个单调函数并取排序函数值最小的前m个数据对象作为结果,从而提出了排序的相互k-Skyband查询处理算法.本文利用了信息重用技术思想,将MkSB查询中的多次k-Skyband查询对应的R-teee搜索合并成单次搜索,并提出了一些高效修剪方法,很好地解决了MkSB查询效率问题.

本文的主要贡献如下:

(1) 提出了一种新颖的k-Skyband查询:相互的k-Skyband(MkSB),它满足了一些应用需求.

(2) 提出了3种MkSB查询算法:基本的MkSB(Basic MkSB,简称BMkSB)、动态的MkSB(MkSB based on Dynamic k-Skyband,简称DMkSB),以及基于窗口查询的MkSB(MkSB based on Window query,简称WMkSB).他们的主要思想包括:信息重用技术、提前终止方法以及一些高效修剪策略.

(3) 设计了详尽的性能评价实验,实验结果表明,WMkSB算法通常能减少95%以上的冗余I/O成本,且具有最优的I/O效率.

本文第1节是问题的定义和描述.第2节介绍MkSB查询工作原理.第3节给出DMkSB和WMkSB算法.第4节通过实验对3种算法的性能进行比较验证.最后,第5节总结全文.

1 问题定义与描述 1.1 问题定义

相互k-Skyband查询是一种对称的Skyline查询,体现了查询对象q和数据对象p之间的相互关系.其查询结果中的对象p同时出现在q的DkSB和RkSB中.

定义1(动态k-Skyband(DkSB)). 给定查询对象q,参数k和数据集P,对象q的DkSB查询(记为DkSB(q))返回一个最大子集RP,使得R中的任意对象rR,最多被k个其他对象控制.

动态k-Skyband查询实质是将原数据集P相对于参考对象q映射形成新的数据集P′,然后在P′上执行k-Skyband运算.其中,k表示边界线(即skyline)的厚度.当k=0时,k-Skyband即是原始的Skyline计算.例如:图 1(a)p2的动态0-Skyband和1-Skyband查询结果分别为{p3,p5}和{p3,p5,p1,p4,q,p6}.注意,D0SB(q)⊂D1SB(q).

Fig.1 Illustration of 1-Skyband query 图 1 1-Skyband查询示例

定义2(反向k-Skyband(RkSB)). 给定查询对象q参数k和数据集P,q的RkSB查询(记为RkSB(q))返回一个最大子集RP,使得R中的任意对象rR的动态k-Skyband(DkSB(r))包含q.

为了说明RkSB查询的执行过程,定义3给出了全局k-Skyband查询的概念.

定义3(全局k-Skyband(GkSB)). 给定查询对象q,参数kd维的数据集P,对象q的GkSB查询(记为GkSB(q))返回q的各个坐标分区中的k-Skyband查询结果的并集.例如:图 1(b)中q的坐标分区I,II,III和IV的1-Skyband分别为{p3,p4},{p7,p9},{p5,p2}和{p6,p8},GkSB(q)={p3,p4,p7,p9,p5,p2,p6,p8},且G0SB(q)⊂G1SB(q).

事实上,根据定义2直接求q的RkSB具有较高的成本.通常是首先执行q的GkSB查询获得一个候选集Sc,然后为Sc中的每个对象oSc执行oq形成的窗口(记为w(o,q))查询[4].如果窗口中包含不多于k个其他数据对象(oq除外),则o为RkSB(q)的一个查询结果;否则,o不是RkSB(q)的查询结果.例如:图 1(b)中灰白色区域为对象p5的1-Skyband的窗口w(p5,q).由q出发联向p5并延长获得q相对于p5的对称点(记为q′),然后分别作经过qq′的水平线和垂直线,获得两个交点q″和q′″,连接q″至q,再至q″′,最后至q′组成的矩形区域,即为w(p5,q),它仅包含对象p2,故p5∈R1SB(q).而w(p1,q)则包含了p3p4,故p1$ otin $R1SB(q).注意:上述定义1~定义3存在关系DkSB(q)⊆GkSB(q)且RkSB(q)⊆GkSB(q).

根据查询对象q的DkSB和RkSB定义,易获得q的相互k-Skyband(MkSB),其定义如下.

定义4(相互k-Skyband(MkSB)). 给定查询对象q,参数k和数据集P,对象q的MkSB查询(记为MkSB(q))检索出所有既在DkSB(q)中又在RkSB(q)中的数据对象.它可以表示为MkSB(q)={pP|p∈DkSB(q)^p∈ RkSB(q)}或MkSB(q)={pP|p∈DkSB(q)^q∈RkSB(p)}.

相互k-Skyband查询返回的结果可能太多,故一般用户只需要排序后的前m个结果,此即下面的定义5.

定义5(排序的相互k-Skyband(SMkSB)). 给定查询对象q,单调上升排序函数F,多维数据集P,参数km,SMkSB查询找出m(m≤|MkSB(q)|)个MkSB对象,使得它们组成的集合RP有最低的分数score(R)=∑pR F(p),其中,F(p)是对象p在函数F中的函数值.这里分数越低,结果越好.

1.2 基本处理算法

基本的MkSB算法BMkSB遵循分支界限[1]搜索框架,先获得DkSB查询结果,再应用参数m约束条件,然后获取最终结果.它首先以q为参考对象调用文献[1]中的动态k-Skyband[1]搜索算法获得q的动态k-Skyband查询结果集合Sc,然后以oSc为参考对象每次调用动态k-Skyband算法(实际上,它是反向的动态k-Skyband查询)获得o的动态k-Skyband查询结果集合Src,并判断是否qSrc中最多k个对象控制.如果是,则说明对象oq的相互k-Skyband对象.然后,通过维护一个最多包含m个查询结果的队列Sr来实现MkSB的排序.当Sc中的所有对象都判断结束后,队列Sr中的所有数据对象即是查询对象q的排序值最小的m个相互k-Skyband对象.

假设数据集P上的R-tree索引有log|TP|层,最小堆尺寸为H1,动态k-Skyband的数目为|Rd|,则BMkSB算法具有下面的定理.

定理1. 给定排序参数m,BMkSB算法的时间和空间复杂度分别为O((1+min(m,|Rd|))×log|TP|)和O(2H1).

证明:BMkSB执行动态k-Skyband查询需要O(log|TP|)次I/O访问,使用一个尺寸为H1的最小堆.另外,候选集中的每个对象p在执行反向动态k-Skyband同样需要O(log|TP|)次I/O访问,尺寸为H1的最小堆,这个查询过程最少需执行m次,最多|Rd|次.因此,其总时间复杂度为O((1+min(m,|Rd|))×log|TP|),总空间复杂度为O(2H1). □

注意,当需要排序的对象数目m>|Rd|时,BMkSB执行RkSB查询的实际次数为|Rd|;否则,m≤|Rd|时,BMkSB执行RkSB查询的实际次数为m,故其时间复杂度函数中应使用最小值min函数,而不是最大值max函数.

2 相互k-Skyband查询原理

显然,BMkSB算法需两个步骤才能完成,即动态k-Skyband和反向k-Skyband,从而需多次访问R-tree树,存在大量冗余的I/O成本.下面将讨论改进它的基本原理.

2.1 信息重用技术

BMkSB算法通过执行一次反向的k-Skyband,来判断是否q∈DkSB(p),从而判断候选对象p是否属于MkSB(q)(其中,p来自第1阶段获得的候选集Sc).显然,此过程需要一次完整的索引访问过程.事实上,如果能够将该索引(例如:R-tree)访问过程中的节点(中间索引节点或叶子的数据对象节点)信息(即最小边界矩阵MBR信息)保存下来,并能在后面的反向搜索过程中利用,那么MkSB查询将仅需一次完整的R-tree遍历.

考虑图 2中的动态1-Skyband(D1SB)查询过程.假设单调上升排序函数F(=min{L1(e,q)})为节点eqL1(坐标之差绝对值)距离最小值,即qe的MBR的四条边的最小距离值.首先节点N1(即e1)和节点N2(即e2)被插入辅助堆H中.然后,访问节点e1,最小堆H={e2,e3,e4}.接着,由于F(e2)=min{L1(e2,q)}=1.5小于F(e3)=2,访问节点N2(即e2),最小堆H={e3,e5,e6,e4}.紧接着N3(即e3)被访问,数据节点a,b,c被插入H中.此时,数据节点c位于堆H={c,e5,e6,e4,b,a}的顶部且不被任何对象控制,因而它成了动态1-Skyband结果集Rd的第1个元素.此时,将节点c相对q进行映射(图 2中二维空间中为左右、对角线和上下方向),得到c′,c′′,c′′′点(灰色圆点).进一步得到I,II,III,IV这4个阴影区域,即节点c相对于q的动态控制区域DDRq(dynamic dominating region).由于节点N4(即e4),N5(即e5),N6(即e6)和点a完全包含在DDR(c)中,N4,N5,N6aRd={c}控制.接着扩展e5,数据点f控制了ae4,故ae4被修剪.然后扩展节点e6,/span>数据点ijRd={c,f}控制,故ij被修剪.最终,得到D1SB(q)的查询结果为Rd={c,f,b,g}.

Fig.2 Dynamic dominating region of dynamic 1-Skyband query 图 2 动态1-Skyband的动态控制区域

上述动态1-Skyband搜索过程中辅助堆H内容和结果集Rd的变化情况见表 1.其中,堆的内容为(节点,节点与q之间的最小距离)对.带删除线的节点或数据点表示被Rd中至少两个数据点控制,从而可以修剪掉.

Table 1 The auxiliary heap content during dynamic 1-Skyband 表 1 动态1-Skyband搜索过程辅助堆的内容

上述动态1-Skyband搜索过程中重用信息堆Hr内容和结果集Rd的变化情况见表 2.

Table 2 The reuse heap content during dynamic 1-Skyband表 2 动态1-Skyband搜索过程重用堆的内容

上面的分析过程表明重用堆Hr的信息随着动态1-Skyband的执行,访问过程中的节点信息存储在Hr中,如果某节点仍需扩展,则该节点从Hr中被删除而其孩子节点被插入Hr,直到动态1-Skyband执行完成.例如: 访问节点N3Hr={e3,e5,e6,e4},访问节点N3后,其孩子节点{a,b,c}被插入Hr中,而节点N3={e3}被删除,此时Hr={c,e5,e6,e4,b,a}.

尽管文献[10]也使用了重用方法,但它们仅保存第1个动态1-Skyband结果之前访问的节点信息.例如:图 3中获得q的D1SB的第1个结果gHr={e5,e1,e6}.然后,求得D1SB(q)={g,c,h,i}(图 3(a)中II区中虚线相连的点, 其中灰色圆点为其他分区在II分区中的映射点)的过程中堆Hr的内容不发生变化.然而本文的重用堆Hr随着整个相互1-Skyband执行完成而发生变化.例如:在求得c∈D1SB(q)时,Hr={e5,e3,e6,e4}.这样,执行对象c的窗口查询时不会产生新的I/O.然而,文献[10]的信息重用方法却需1次I/O访问(因为e3$ otin $Hr).

Fig.3 Illustration the use of Hr 图 3 重用堆Hr使用实例
2.2 合并多次索引搜索

如果MkSB算法执行动态k-Skyband时将访问信息保存在重用堆Hr中.那么,它再执行多次反向动态k-Skyband就可以求得排序后的前m个相互k-Skyband的查询结果.

另一方面,相互k-Skyband可以在动态k-Skyband的候选结果集Sc的基础上,结合重用堆Hr的内容,通过执行窗口查询[4]来求得最终的结果,即下面的定理2.

定理2. 给定查询对象q和多维数据集P,候选结果集Sc=DkSB(q),如果窗口查询w(pSc,q)包含超过k个其他对象(pq除外),则p不是相互k-Skyband对象.

证明:假设任意对象p∈MkSB(q),则有p∈DkSB(q),即pq的动态k-Skyband.根据集合DkSB(q)和GkSB(q)的关系有:DkSB(q)⊆GkSB(q),又MkSB(q)⊆DkSB(q)⊆GkSB(q),故有p∈GkSB(q).根据已知条件知,GkSB对象p的窗口w(p,q)包括的其他对象个数超过k个,因而q相对于p被至少k+1个对象控制.换句话说,q不在p的DkSB查询结果当中.根据RkSB的定义知,p$ otin $RkSB(q).既然p∈DkSB(q)又p$ otin $RkSB(q),从而p$ otin $MkSB(q). □

定理2具有重要意义,它保证了在执行DkSB查询的基础上,通过窗口查询可以获得MkSB查询结果,而不必执行返回结果很多的GkSB查询.例如:图 3(a)中执行g∈D1SB(q)的窗口查询w(g,q)就可以判断g∈M1SB(q),即g是相互1-Skyband的结果.

既然,Hr可以在DkSB中使用,也可以在窗口查询中使用,可以证明下面的定理3是正确的.

定理3. 给定查询对象q和多维数据集P,如果使用前述重用堆Hr来保存q的DkSB执行过程中的节点信息,无论是通过多次窗口查询或RkSB查询来完成MkSB查询,MkSB算法不会产生漏报或多报.

证明:显然,Hr完整地保存了数据集P中的所有数据对象不同层次的索引信息.例如:图 3(a)中数据对象a,b, c为第0层的叶子节点,而数据对象d,e为第1层的中间索引节点e4.这样,通过Hr一定可以访问到所有节点的MBR信息.定理2已经证明了通过窗口查询的方法可以获得MkSB,故而不会产生多报或漏报.另一方面,对于候选集Sc的某个对象pSc,以p为参考对象并使用Hr也可以求得p的动态k-Skyband结果集合Src.根据定义2如果qSrc,那么对象p就是一个MkSB对象.因此,这种方法也不会产生多报或漏报. □

定理3也是非常重要的,它保证了信息重用方法的正确性.这样,就可以合并MkSB的R-tree遍历成单次R-tree遍历,从而极大地降低I/O访问次数.

2.3 讨 论

本节讨论重用堆Hr的空间复杂度.显然,前述方法的有效性依赖于SMkSB在第1阶段执行DkSB过程中Hr的空间复杂度.下面从理论上进行分析论证.

假设数据集P包含E个数据对象,索引中根节点包括α个节点,平均每个节点包括μ个孩子节点,索引包含L层,每次I/O操作页面可以容纳β个节点,则根节点需$\left\lceil {\alpha /\lambda } \right\rceil $次I/O访问,其他节点平均需$\left\lceil {\mu /\beta } \right\rceil $次I/O访问.易求出首个动态k-Skyband点需要的最小I/O次数为

$N\left( 1 \right) = \left\lceil {\alpha /\beta } \right\rceil + \left( {L + 1} \right) \times \left\lceil {\mu /\beta } \right\rceil $(1)

重用堆Hr的尺寸|Hr|至少如下面的公式(2):

$\left| {{H_r}} \right| = \alpha + \left( {L - 1} \right) \times \mu $(2)

同时索引层次满足下面的公式(3):

$E = \alpha + \alpha .\mu + \alpha .{\mu ^2} + \ldots + \alpha .{\mu ^{L - 1}}$(3)

联立等式(1)~等式(3)得到下面的公式(4)和公式(5):

$\left| {{H_r}} \right| = \alpha + \left( {\log _\mu ^{E \cdot \left( {\mu - 1} \right)/\alpha + 1} - 1} \right) \times \mu $(4)

$N\left( 1 \right) = \left\lceil {\alpha /\beta } \right\rceil + \left( {\log _\mu ^{E \cdot \left( {\mu - 1} \right)/\alpha + 1} - 1} \right) \times \left\lceil {\mu /\beta } \right\rceil $(5)

公式(4)和公式(5)分别反映了文献[10]重用堆的大小和I/O次数,它们的空间复杂度是比较低的.如果所有DkSB对象在一个节点,则本文重用堆Hr的最大尺寸与文献[10]的相同.否则,此时重用堆在后续的DkSB对象求出时可能会继续扩展,以至Hr继续增大,直到DkSB执行完.访问的I/O与此类似,每当节点扩展时,将存在I/O操作,但同时由于Hr变大,大部分的访问信息可以从Hr获得,从而以后需要的I/O操作将逐渐减少(虽然,总的I/O次数仍可能增加).

基于表 2的观察可以发现:在求得DkSB时,Hr中包含了很多数据对象.在这种情况下,一种方法是限定Hr中的第1层节点不能扩展,从而缩减Hr的尺寸.

3 排序的相互k-Skyband查询处理

排序的相互k-Skyband采用边搜索边修剪的方式实现,运用约束条件尽早终止计算,充分重用已有信息,最大限度减少I/O访问和CPU时间.

3.1 DMkSB算法

DMkSB算法的基本思路与BMkSB算法类似.主要不同之处在于:(1) DMkSB执行动态k-Skyband查询时会将运行过程中的访问信息保存在重用堆Hr中;(2) DMkSB在判断当前对象p∈DkSB(q)是否是相互k-Skyband而执行反向动态k-Skyband时使用Hr,极大地减少了I/O次数;(3) DMkSB边搜索边修剪可以在其第5行的DkSB(q)和第14行的DkSB(p)分别提前终止计算,而不像BMkSB完整地执行完它的DkSB(q)和反向DkSB(p). 前者可提前终止是因为当前节点e的低边界排序函数值LB_F(e)=min{F(x)|$\forall $xe}比查询结果中的第m个最小的排序函数值大,DkSB(q)不必要全部执行完;后者可提前终止是因为如果$(k+1)个对象p′∈D相对于p控制q, DkSB(p)不必要执行完.DMkSB执行DkSB(q)提前终止计算的推理体现在下面的定理4.

定理4. 给定排序函数F(.)和排序参数m,对象o1,o2,…,om是目前获得的m个MkSB结果对象,节点e的最小排序值LB_F(e)为min{F(x)|$\forall $xe},m_score表示m个结果对象中的最大排序函数值max{F(oi)|oi,$\forall $i∈[1,m]}. 如果满足条件LB_F(e)≥m_score,则可以安全地修剪掉节点e.

证明:既然节点e的任意数据对象的最小排序值LB_F(e)都比m_score大,那么一定存在至少m个结果对象o1,o2,…,om的分数值比e中的任意对象的分数值小.因此,节点e可以安全地修剪掉. □

DMkSB的详细算法描述见算法1.

算法1. DMkSB(T,k,F,m,q,Sr).

输入: /*T: index; k and m: skyband and ranked parameter; F(.): preference function; q: query object*/;

输出: Sr: result set.

1. Sr=Ø,Sc=Ø,H=Ø,Hr=Ø,m_score=+∞;

2. Insert root into H and Hr with (e,mindist(e,q));

3. WHILE H is not empty DO

4.   Pop the entry (e,mindist(e,q)) of H;

5.   IF LB_F(e)≥m_score THEN BREAK;

6.   IF e is not contained in (k+1) DDRq(oSc) THEN

7.     IF e is an intermediate entry THEN

8.       FOR each child entry eie DO

9.        IF ei$ otin $k+1 DDRq(oSc) THEN

10.         Insert (ei,minidist(ei,q)) into H;

11.        Insert all eie into Hr, Delete e from Hr;

12.   ELSE //e is a data object

13.     Sc=Sc$ cup ${e}; //e is a DkSB object w.r.t. q

14.     rflag=RDkSB(T,k,e,q,Hr);

15.     IF rflag==TRUE THEN

16.       IF |Sr|<m THEN

17.         Sr=Sr$ cup $e}; //e is a MkSB object w.r.t. q

18.         Update m_score using largest score in Sr;

19.       ELSE //|Sr|≥m

20.        let o′ be the object in Sr with m-th smallest score;

21.        IF F(e)<m_score THEN

22.        Sr=Sr$ cup ${e};

23.        Remove o′ from Sr;

24.        Update m_score using new m-th smallest score;

25. RETURN Sr;

DMkSB执行动态k-Skyband的方法是:判断节点e是否完全包含在求得的DkSB候选集合Sc中的k+1个数据对象oSc的动态控制区域DDRq(o)中(算法第6行和第9行).显然,如果节点eDDRq(o),则eo动态控制.第11行更新重用堆Hr,即从中删除当前节点e,并将e的所有孩子节点eie插入Hr中.为了提高Hr更新效率, 可以采用二分搜索方法.第13行添加对象e到DkSB候选集合Sc中,第14行以e为参考对象,使用重用堆Hr,调用反向DkSB查询算法RDkSB(行14),判断是否存在对象p′相对当前对象e∈DkSB(q)控制q.如果存在,则该算法返回FALSE,并保存到变量rflag中;否则rflag为真(行15),然后算法在第16行~第24行实现对获得的最多m个查询结果的排序和动态更新.其中,RDkSB算法伪代码描述如算法2所示.

算法2. RDkSB(T,k,p,q,Hr).

输入: /*T: index; k: skyband parameter; p: candidate object∈DkSB(q); q: query object; Hr: reuse heap*/;

输出: rflag: an Boolean value whether q is dominated k+1 object w.r.t current object p∈DkSB(q).

1. Sc=Ø,H=Ø; //Sc—result set of RkSB(q)

2. WHILE Hr is not empty DO

3.   Pop the entry (e,mindist(e,q)) of Hr;

4.   Push the entry (e,mistdist(e,p)) into H;

5~13. Lines 3~4, 6~10, and 12~13 of DMkSB but q is replaced by p in lines 4, 6, 9 and 10

14.     IF $(k+1) points in e dominates q w.r.t. p THEN

15.       BREAK, RETURN FALSE;

16. RETURN TRUE;

RDkSB算法的最好优先(best first)搜索框架与算法DMkSB类似.算法的2~4行将重用堆中的信息弹出,并根据DkSB(q)中的当前候选对象p重新计算节点e的最小距离mistdist(e,p),然后插入搜索辅助堆H中.注意,由于是以p为参考对象进行动态DkSB查询,因而第5行~第13行使用p代替q计算节点e的最小距离mindist(e, p)和动态控制区域DDRp(oSc).第14行判断当前节点e是否存在k+1个对象相对于p控制q.如果是,根据k-Skyband定义,则当前候选对象p一定不是MkSB对象,从而可以终止计算(行15),并返回FALSE;否则,计算出所有的RkSB对象,并返回TRUE(行16),因为q∈DkSB(p).

从DMkSB算法的描述和分析中,容易得到下面的I/O性能定理5.

定理5. 假定q的DkSB查询包含|Rd|个数据对象,排序函数参数为m,则BMkSB算法从磁盘装入访问Hr中实体1+min(m,|Rd|)次,而DMkSB算法仅仅装入1次.

3.2 WMkSB算法

WMkSB的实现框架与DMkSB完全一致.不同之处在于:它通过调用窗口查询,以当前DkSB(q)的候选对象pq的窗口w(p,q)是否包含k+1其他数据对象ow(p,q)来判断p是否是MkSB对象(定理2),并利用重用堆Hr信息和实现提前终止计算.其实质是利用窗口查询来代替反向的DkSB计算(例如:DkSB(p),其中,p∈ DkSB(q)).仅替换DMkSB算法第14行中的RDkSB函数为k-Skyband窗口查询函数SBWinQ,便可以得到算法3.需要说明的是,尽管DMkSB和WMkSB算法中代码区别较少,但是他们的实现方法的原理完全不同,WMkSB的实现原理体现在定理2.

算法3. WMkSB(T,k,F,m,q,Sr).

输入: /*T: index; k and m: skyband and ranked parameter; F(.): preference function; q: query object*/;

输出: Sr: result set.

1~25. Lines 1~25 of DMkSB but the function RDkSB of line 14 is replaced by the function of window query SBWinQ

SBWinQ利用重用信息时,可使用RDkSB算法中行第2行~第4行的代码.而它判断窗口w(p,q)是否包含k+1其他对象(例如:图 3g点的窗口w(g,q)不包含其他对象,故是一个MkSB对象),则可以使用类似BBS算法的R-tree索引遍历过程,而需要将控制关系的判断语句更改为节点的MBR是否与w(p,q)相交或包含w(p,q)这种位置关系的判断语句即可,并使用布尔查询方法:即遇到k+1个其他数据对象p′(p′≠p^p′≠q)∈w(p,q)时,立刻终止计算,并返回FALSE.从WMkSB算法的描述分析中,可以得到类似于定理5的关于WMkSB算法的I/O性能定理.

4 实验评估

实验采用真实数据集NBA[12]、Hou[12](抽取前三维组成实际数据集),它们分别包含了5维17K、6维127K个数据对象以及服从不同分布特性的合成数据集Correlated(Corr)和Independent(Indep),数据空间为[1, 10000]. 查询对象q从数据集中随机选取50个,实验结果取50次运行的平均值.除了排序参数m(排序的查询结果数目)实验外,所有实验中排序参数m设置为16,排序函数F为min{L1(x,q)|$\forall $xe}.实验通过两个重要的性能指标I/O访问次数和CPU运行时间(不包括I/O时间)来评估BMkSB,DMkSB和WMkSB的性能(由于目前未出现同类算法,故本文算法未与其他算法比较).

其他参数设置如下.R-tree页面尺寸和cache块大小为4 096字节.实验在双核3.2GHz、500G硬盘的PC机上运行,编程语言为C++.注意,实验绘图中的折线表示I/O访问次数,对应左边的对数纵坐标,柱状图表示CPU运行时间,对应右边的纵坐标(其中,数据维度变化实验中使用对数坐标).绘图中的RHS表示重用堆包含索引节点的数目.需要说明的是,类似于文献[6]和文献[12]中的R-tree实现代码,本文的R-tree代码也是基于磁盘实现(即访问1次索引节点将产生1次I/O操作).

4.1 真实数据集上的算法性能

(1) 参数k的影响

第1组实验比较算法在真实数据集上随参数k大小(skyband厚度参数)的性能(cache块数目为0).图 4的实验结果反映:随着k的增大,BMkSB和DMkSB算法I/O节点访问次数和CPU运行时间(单位:s)都逐渐增大;然而WMkSB的I/O成本和CPU时间逐渐减少且有最小的成本.实际上,当k的值由0分别增加到1,2,3和4时,3种算法在NBA和Hou数据集上的相互k-Skyband的数目分别为13,13,27,36,46,以及15,15,31,42,53.这也在一定程度上解释了图 4中I/O成本和CPU时间的增长趋势.3种算法的I/O次数分别处在不同的数量级上,其中DMkSB的I/O次数仅与排序参数m处于一个数量级.这是因为MkSB结果对象在k较小(例如:k=1)时,一般处于索引的同一节点上;同时重用堆技术的使用减少了大量的冗余I/O访问.例如:k=4时,WMkSB减少了BMkSB算法99.14%以上的I/O.

Fig.4 Performance on real datasets vs. k (cache blocks=0) 图 4 算法在真实数据集上随k变化的性能(cache块数目=0)

(2) 数据集尺寸(s)的影响

第2组实验比较算法在真实数据集上随着数据集尺寸s变化的性能.参数k固定为2,cache块数目为0.图 5的实验结果反映:增大数据集尺寸,3种算法的I/O成本和CPU运行时间沿着增长趋势扩大.但有趣的现象是3种算法的局部性能可能下降.这是因为,I/O访问不仅与数据尺寸相关,也与数据分布和q的位置有关.由于使用了重用技术,故DMkSB的I/O成本稍差于WMkSB却比BMkSB好得多.

Fig.5 Performance on real datasets vs. dataset size (k=2, b=0) 图 5 算法在真实数据集上随数据集尺寸变化的性能(k=2, b=0)

(3) Cache块数目(b)的影响

第3组实验比较算法在真实数据集上随cache块数目b变化的性能(k=2).图 6的实验结果体现了重用方法远比增加cache大小的方法更能减少I/O次数.例如:在Hou上,16K的cache仅能减少1.56%的I/O访问,而DMkSB和WMkSB的重用技术却分别减少88.67%和96.68%的I/O访问.因为cache基于局部性原理来保存节点信息, 常常下次访问的节点并不存在cache中.另一方面, 重用技术的运用减少了许多不必要的计算,使得WMkSB比DMkSB快3~5倍,比BMkSB快至少10倍以上.

Fig.6 Performance on real datasets vs. cache blocks (k=2) 图 6 算法在真实数据集上随cache块数目变化的性能(k=2)

(4) 排序参数(m)的影响

第4组实验比较排序参数m(要求返回的查询结果数目)在真实数据集上对各种算法的影响.图 7中的实验结果表明,3种算法都将随着m的增加,I/O次数和CPU运行时间都将增大,但是算法WMkSB具有最好的性能. BMkSB和DMkSB算法在参数m增大到32之后,I/O次数将缓慢增长;而WMkSB算法在m增大到16后,在16~32的范围内,I/O次数较快速地增长.这是因为m较小时,WMkSB返回的结果可以在一个节点上找到.

Fig.7 Performance on real datasets vs. m (k=2, b=0) 图 7 算法在真实数据集上随m变化的性能(k=2, b=0)
4.2 合成数据集上的算法性能

(1) 参数k的影响

第1组实验评估算法在512K尺寸3维的合成数据集上随着k变化的性能.图 8的实验结果表明:增大k,实验结果和现象及原因与图 4类似.WMkSB仍具有与参数m一个数量级的I/O访问次数.

Fig.8 Performance on synthetic datasets vs. k (b=0) 图 8 算法在合成数据集上随k变化的性能(b=0)

(2) 数据集大小s(size)的影响

第2组实验比较算法在3维的合成数据集上随着数据集尺寸s变化时的性能.数据集尺寸分别为128K, 256K,512K,1024K和2048K,参数k=2,b=0.图 9的实验结果和相应的现象及原因类似于图 5.

Fig.9 Performance on synthetic datasets vs. s (k=2, b=0) 图 9 算法在合成数据集上随s变化的性能(k=2, b=0)

(3) Cache块数目b(cache blocks)的影响

第3组实验报告512K大小3维的合成数据集随着b变化的性能(k=2).图 10中的实验结果及相应现象及原因类似于图 6:与使用Hr相比,增大b仅能很少程度上减少I/O访问次数,仅当cache较大的时才有较为明显的效果(例如:b=32);但对CPU运行时间几乎没有影响.WMkSB最优I/O性能充分表明了重用信息策略的优势.

Fig.10 算法在合成数据集上随b变化的性能(k=2) 图 10 Performance on synthetic datasets vs. b (k=2)

(4) 数据维度d的影响

第4组实验比较算法在512K的合成数据集上随着维度d变化的性能(k=2,b=0).从图 11的实验结果中可以看出,随着d的增大,BMkSB算法的I/O次数明显地增大,DMkSB缓慢增大,而WMkSB算法仅仅轻微增大.在5维情形的Indep数据集上,DMkSB减少了BMkSB算法98.6%的I/O次数,而WMkSB又减少了DMkSB算法96.1%的I/O次数,总体上WMkSB仅有BMkSB算法0.055%的I/O访问.另一方面,WMkSB算法在Indep上,其CPU运行速度比BMkSB快1780倍,比DMkSB也快了13倍.这说明维度d对算法性能有较大影响.由于Corr对角线分布、Indep均匀分布,CorrIndep具有更多I/O访问.

Fig.11 Performance on synthetic datasets vs. d (k=2, b=0) 图 11 算法在合成数据集上随着维度d变化的性能(k=2, b=0)

(5) 排序参数(m)的影响

第5组实验评估合成数据集上排序参数m对各种算法的影响(数据集尺寸为512K,维度为3).图 12中的实验结果及相应现象及原因类似于图 7:WMkSB在I/O成本和CPU运行时间都优于其他两种算法.

Fig.12 Performance on synthetic datasets vs. m (k=2, b=0) 图 12 算法在合成数据集上随着m变化的性能(k=2, b=0)
5 结 论

相互k-Skyband查询从对称角度设计应用,在商业数据分析、个性化匹配等方面具有重要的应用价值.本文提出了3种高效的排序相互k-Skyband查询算法:BMkSB,DMkSB和WMkSB.算法采用BF搜索策略,利用重用堆思想和尽早终止计算等方法,极大地减少了算法的冗余I/O访问,加速了CPU的运行效率.最后,实验和理论分析都证明了基于窗口查询和信息重用的WMkSB算法在skyband厚度、数据集大小和维度以及排序参数m上, 都具有最优的性能.WMkSB是目前为止最优的相互k-Skyband查询算法:在I/O效率上,它几乎保持了O(m)的线性I/O访问次数.

参考文献
[1] Papadias D, Tao Y, Fu G, Seeger B. Progressive skyline computation in database systems. ACM Trans. on Database Systems, 2005, 30(1):41-82 .
[2] Sharifzadeh M, Shahabi C, Kazemi L. Processing spatial skyline queries in both vector spaces and spatial network databases. ACM Trans. on Database Systems, 2009,34(3):Article 14 .
[3] Chen L, Lian X. Efficient processing of metric skyline queries. IEEE Trans. on Knowledge and Data Engineering, 2009,21(3): 351-365 .
[4] Dellis E, Seeger B. Efficient computation of reverse skyline queries. In: Proc. of the VLDB Conf. ACM, 2007. 291-302.
[5] Lian X, Chen L. Monochromatic and bichromatic reverse skyline search over uncertain databases. In: Proc. of the ACM SIGMOD Conf. Vancouver: ACM, 2008. 213-226 .
[6] Gao Y, Liu Q, Zheng B, Chen G. On efficient reverse skyline query processing. Expert Systems with Applications, 2014,41(7): 3237-3249 .
[7] Liu Q, Gao Y, Chen G, Li Q, Jiang T. On efficient reverse k-skyband query processing. In: Proc. of the DASFAA Conf. Busan: Springer-Verlag, 2012. 544-559 .
[8] Miao X, Gao Y, Chen L, Chen G, Li Q, Jiang T. On efficient k-skyband query processing over incomplete data. In: Proc. of the DASFAA Conf. Wuhan: Springer-Verlag, 2013. 424-439 .
[9] Feng X, Gao Y, Jiang T, Chen L, Miao X, Liu Q. Parallel k-skyband computation on multicore architecture. In: Proc. of the APWeb. LNCS 7808, Sydney: Springer-Verlag, 2013. 827-837 .
[10] Zhang B, Jiang T, Yue G, Li G. Mutual skyline queries based on reusing technology. Journal of Huazhong University of Sicence and Technology (Nature Edition), 2010,38(7):111-115 (in Chinese with English abstract) .
[11] Wang G, Xin J, Chen L, Liu Y. Energy-Efficient reverse skyline query processing over wireless sensor networks. IEEE Trans. on Knowledge and Data Engineering, 2012,24(7):1259-1275 .
[12] Tao Y, Xiao X, Pei J. Efficient skyline and top-k retrieval in subspaces. IEEE Trans. on Knowledge and Data Engineering, 2007,19(8):1072-1088 .
[10] 张彬,蒋涛,乐光学,李国徽.基于重用技术的相互Skyline查询算法.华中科技大学学报(自然科学版),2010,38(7):111-115.