论文部分内容阅读
传统数据库系统的处理对象主要是相对稳定的数据集。而在当今一些新的应用中,数据都以连续的、流的形式出现,而不是有限的存储数据集。这种动态的流数据其应用领域非常多,像股市行情、电信呼叫记录、传感网络、web日志与页面点击流、移动对象等都是典型的数据流,另外像一些随机访问困难的如天文、遥感、基因等海量数据集,从其技术处理手段来看亦可纳入此列。这些应用的普遍特点是它们一般都会产生大量的数据,常常以千兆字节计算,而且记录到达的速度非常快。 这些新型应用中出现的数据模型被定义为数据流模型,数据流的特征可概括为:①实时性;②无限性;③瞬时性;④流速不定性。针对数据流的特征,传统的数据处理技术(如数据库技术)已不能满足其处理要求,同样,原先用于静态数据的Skyline查询算法也不能再直接用在处理数据流上的skyline查询。 传统数据库上的skyline查询算法往往只计算一次,得到skyline查询结果就结束算法。而数据流的无限性要求新的skyline算法不停的输出最新结果,而且由于数据不停到达,数据量大且不能存储所有数据,skyline算法必须处理最近到达的数据并输出最新的结果,因此算法必须保证有很高的实时性。 本文在总结前人的经验上,首先提出来一种新的处理框架,专门用于数据流上的skyline查询处理。原先的框架主要由两个部分组成,预处理模块和维护模块,这两个模块在每次滑动窗口中出现点的变动时都需要大量重复的计算,效率并不高;为了减少预处理需要的计算以及维护需要的时间,本文提出的新框架把处理和维护过程结合,处理的同时也是维护的过程,维护的过程也是得到处理结果的过程。滑动窗口中进入一个新的点,把该点放入系统维护的一个结构中,这是一个维护过程,同时通过该结构,系统又可以很快得到skyline查询的结果。 在这个框架之上,本文再提出了两个不同的查询处理算法。DC-Tree和DSky-Tree。 DC-Tree采用分而治之的方法,依据点的维度把空间分成不同子空间,多个子空间结合成为一个上层子空间,上层子空间和下层子空间形成父子结构,这种层级结构构成了一个树,即DC-Tree。通过这个树形索引,每一个点可以很快找到自己所属于的最小子空间所在的分支节点。每个上层子空间对应的节点记录该子空间上得到的skyline点,更上一层的空间节点通过计算这些下层的skyline点得到更上层空间的skyline。最后就得到整个空间的skyline。就是采用这种分布每个点,然后合并每个小空间的skyline点来减少参与计算的点,提高计算skyline的查询效率,通过对滑动窗口中的点进行这种树形索引,并维持这种层次关系和控制关系结构,能高效的进行skyline查询结果的更新,从而实现实时的skyline查询结果。 DSky-Tree和DC-Tree一样,也是采用采用分而治之的方法,同样依据点的维度把空间分成不同子空间。由于DC-Tree完全划分了空间,固定了空间和子空间的关系,能够很快速的找到节点所属于的子节点,但是也明显的浪费了很多子空间所占有的空间,因为很多空间可能没有点,所以相比DC-Tree,DSky-Tree不再固定划分整个空间和子空间,而是根据点的情况,适应性的调整点的子空间划分情况,从而节省很多查询空间的浪费,虽然也因此牺牲了部分查询时间代价。该索引结构可以动态调整大小,相比DC-Tree而言,使得索引的结构更灵活,需要的存储空间也小很多,因此也具有很好的适应性。 两个算法有个共同的特点就是尽可能的减少参与计算的点:只有子空间中的skyline点才有可能成为最后的skyline点;充分利用数据流上点到达的特性:如果后达到的数据控制前面到达的数据,就可以删除这个被控制点,因为他永远不可能成为skyline点。 文章最后还通过实验分别证明了这两个算法的高效性。