Efficient Approximate Range Aggregation Over Large-Scale Spatial Data Federation

1,296 阅读12分钟

摘要

范围聚合是空间数据应用中的一个基本操作,在数据联邦上支持这种操作的需求越来越大,因为整个空间数据是由多个数据提供者(又称数据孤岛)分别持有。数据联邦明显增加了数据密集型应用的可用数据量,如智能交通规划和公共卫生应急反应。然而,它们也对传统的范围聚合查询的实现提出了挑战,因为原始数据不能在联邦内共享,而且在查询处理过程中每个数据孤岛的数据分区是固定的。这些制约因素限制了分布式范围聚合查询处理的设计空间,使现有的解决方案在大规模数据上效率低下。在这项工作中,我们提出了第一个在空间数据联邦上进行高效范围聚合的近似算法。我们设计了新颖的single-silo采样算法,以并行方式处理查询,并设计了一个基于水平采样的算法,将每个数据仓的本地查询的时间复杂度降低到O(log1ϵ)O(log{1 \over \epsilon}),其中ϵ\epsilon是精度保证的近似比率。用真实世界的数据进行的广泛评估表明,与最先进的技术相比,我们的解决方案将时间成本和通信成本分别降低了85.1倍和5.5倍,平均近似误差低于2.8%。此外,我们的解决方案产生了每秒超过250次的查询吞吐量,为现实世界的自行车共享应用实现了实时响应。

INTRODUCTION

对空间数据的范围聚合查询会返回关于落在一个指定为圆形或矩形的空间范围内的空间对象的汇总信息。这种查询对于各种大空间数据的应用至关重要,如智能交通规划、公共卫生应急响应、城市环境监测、基于位置的服务等。

在本文中,我们定义了联合范围聚合(FRA)问题,并研究了大规模空间数据联合的范围聚合查询的有效解决方案。观察到底层应用需要对高频查询进行实时响应,而结果中的小误差是可以接受的,我们专注于提供高通量和高质量近似查询结果的解决方案。在高层次上,我们从两个方面优化FRA查询处理。(i) 我们避免列举所有数据仓来回答一个FRA查询。我们认为,服务提供者只需要与一个数据仓沟通,以提供高质量的查询结果。这使得数据仓可以并行处理查询,这明显提高了吞吐量。(ii) 我们提出了一个新的索引来加速每个数据仓的局部范围聚合查询,以进一步降低大规模数据查询的时间复杂性。

我们的主要贡献和结果如下。

  • 我们设计了一个新颖的单筒仓采样方案,从根本上将与数据筒仓的通信减少到与单个筒仓的一轮互动,在IID情况下实现了O(1)O(1)的通信成本,在非IID情况下实现了O(g0)O(|\sqrt{g_0}|)。这种通信成本的降低有利于并行处理FRA查询以获得高吞吐量。
  • 我们为每个数据仓提出了一个新的基于水平采样的索引,称为LSR-Forest,以加速每个数据仓的局部范围聚合查询,其时间复杂度为O(log1ϵ)O(log{1 \over \epsilon})
  • 我们证明,single-silo采样方案和基于水平采样的局部查询都能在理论上保证查询的准确性。我们还表明,当这两种技术一起使用时,查询精度的保证仍然是有界的。
  • 在真实世界的数据上进行的大量实验表明,与精确的解决方案相比,我们的近似算法将单个FRA查询的时间成本降低了85.1倍,通信成本降低了5.5倍,平均近似误差低于2.8%。此外,我们的解决方案产生了每秒超过250次查询的吞吐量,为现实世界的自行车共享应用实现了实时响应。

问题陈述

本节定义了联合范围聚合(FRA)查询,并规定了性能指标。
定义1(空间对象)

image.png

示例1 假设一个由两个数据孤岛组成的联邦 S(图 1a)。第一个数据孤岛有10个空间对象(用蓝色标记),第二个数据筒仓有 8 个空间对象(用红色标记)。这些空间对象的位置和度量属性如图 1b 所示。 FRA 查询如图 1c 所示,它询问以 (4,6) 为中心、半径为 3 的圆形范围(以绿色标记)内的那些空间对象的度量属性的总和。
image.png

解决方案概述

我们从两个方面优化 FRA 查询处理。

  • 避免枚举所有数据孤岛来回答 FRA 查询。一个简单的解决方案是与每个数据孤岛交换信息以回答范围聚合查询,只允许顺序处理。适当的采样策略可以实现并行处理,从而提高查询流的吞吐量。
  • 加速每个数据孤岛的本地范围聚合查询。虽然空间索引(如 R-trees)可以对数据孤岛sks_k进行O(O(lognsk)n_{s_k})范围聚合查询,但获取部分聚合答案的时间仍然是一个瓶颈。我们认为可以通过近似解决方案进一步加速本地范围聚合查询。

图2显示了我们解决方案的概况。我们解决方案的核心是两项技术:
image.png

  • Single-silo采样。我们将部分聚合结果检索的孤岛数量从 m 减少到 1,以允许并行查询处理。这是通过网格索引来跟踪空间数据分区的分布和相应的查询结果估计算法来实现的。
  • 基于层次抽样的本地查询。我们设计了一种基于层次抽样的新型索引(LSR-Forest),用于每个孤岛的快速近似范围聚合查询。它将本地范围聚合查询的平均时间复杂度降低到O(log1ϵ)O(log{1 \over \epsilon})

Single-silo采样

网格索引构建

作为孤岛抽样的先决条件,服务提供者构建网格索引来跟踪空间对象的分布,其中每个网格聚合其覆盖的空间对象的度量属性。

算法 1 显示了如何构建网格索引。用G={g0,g1,...,gm}G=\{ g_0,g_1,...,g_m\}作为一组网格索引,其中g1,...,gmg_1,...,g_m是数据仓s1,...,sms_1,...,s_m所拥有的空间对象的网格索引,g0g_0是由其他mm个网格索引合并而成。在第 1-3 行中,构建网格索引的请求被发送到每个数据孤岛sis_i,每个孤岛将其网格索引gig_i发送回服务提供者。然后将这些网格索引合并为所有空间对象的g0g_0
image.png
示例2
回到例1,我们建立一个网格索引,其网格长度为2.5。如图1b所示,这两个数据仓可以被分割成16个网格。在这些网格索引中,我们存储覆盖的空间对象的数量(COUNT)和它们的测量属性的SUM。例如,在网格索引的左下角,第一个数据孤岛没有空间对象,而第二个数据孤岛有一个空间对象。因此,对于第一个数据仓,这个网格的COUNT和SUM值都是0。对于第二个数据仓,COUNT值是1,SUM值是7,因为(2,2)处的空间对象的度量属性是7。 最后,我们可以通过将网格索引g1g_1g2g_2中相应网格的COUNT/SUM值相加建立网格索引g0g_0

孤岛抽样和结果估计

现在我们解释如何只对一个数据仓进行抽样以获得部分答案,并根据网格索引估计FRA查询的结果。由于空间对象的分布可以相同或不相同,我们为这两种情况设计了不同的策略。

IID空间数据

如果空间对象在各数据仓之间是相同(和独立)分布的(即IID),那么直观的做法是只从一个数据仓中检索部分答案,并根据其部分答案估计结果。请注意,我们的算法适用于任何特定分布的IID情况。

算法2说明了在IID情况下对一个给定的FRA查询的单筒仓采样和查询结果估计。在第1行,从联盟SS中随机抽取一个数据仓sks_k。在第2-3行,向sks_k发送本地范围聚合查询的请求,并将结果reskres_k发回给服务提供者。在第4-8行,服务提供者根据reskres_k估计近似的结果。具体来说,它首先迭代与查询范围RR相交的每个网格ii(第5行)。然后,它将i在网格索引g0g_0中的SUM/COUNT值累积为sum0sum_0,将i在网格索引gkg_k中的SUM/COUNT值累积为sumksum_k(行6-7)。近似结果ansans'被计算为sum0×(resk/sumk)sum_0 \times (res_k/sum_k)(第8行)。
image.png
示例3 回到例1。假设筒仓s2被抽样处理本地范围聚合查询。从图1来看,它的部分答案reskres_k是4(第3行)。接下来,我们在第5-7行估计聚合结果。我们只需要列举左上角的3 ×\times 3网格。据此,我们可以计算出sum0sum_0 = 4+0+0(第一行)+2+2+4(第二行)+4+1+4(第三行)=21。而sumksum_k = 3+0+0+1+2+0+1+4+11。最后,我们得到的近似结果是21 ×\times (4/11) = 7.6。

非IID空间数据

如果空间对象的分布不完全相同(NonIID),算法2可能会有偏差。因此,我们需要一个新的解决方案来解决非IID空间数据的问题。关键的想法是利用一个常用的假设,即在一个小区域(如网格)内的空间对象通常遵循相同的分布。这启发我们要求采样的数据孤岛不仅向服务提供者发送部分答案,而且还要发送汇总答案中每个网格的空间对象的贡献。这样的信息将使我们能够无偏见地估计给定FRA查询的结果。
image.png
算法3说明了非IID空间数据的孤岛采样和结果估计算法。在第1-2行,随机选择一个数据孤岛sks_k来处理本地范围聚合查询。在第3行,sks_k向服务提供者发回一个来自sks_k的向量resk1,...,reskgkres^1_k,...,res^{|gk|}_k,其中reskires^i_k是网格ii的空间对象在部分答案中的贡献,gk|g_k|sks_k的网格索引中的网格数量。在第4-7行,服务提供者根据收到的矢量估计近似的结果。具体来说,它首先迭代与查询范围R相交的每个网格ii(第5行)。然后,它估计网格ii中所有数据仓的空间对象的贡献,用est0iest^i_0表示(第6行)。最后,它将估计的贡献est0iest^i_0累积到近似结果ansans'(第7行)。

在这里,我们假设数据仓的覆盖范围是重叠的,但在整个空间内可能并不统一。这是合理的,因为对于像联合共享自行车这样的应用,公司在整个城市提供服务,尽管每个公司可能有不同的战略重点。我们的方法也可以扩展到非重叠覆盖的情况。具体来说,在第1行,我们从拥有查询范围内数据的筒仓中抽出sks_k。这样,我们就可以过滤不相关的筒仓,找到一个有代表性的筒仓sks_k

处理多个FRA查询的框架

算法4显示了处理Q|Q| FRA查询的框架。在第1-3行中,服务提供者向随机抽样的筒仓sks_k发送查询。sks_k将回答查询并将查询结果返回给服务提供者(第4行)。服务提供者从筒仓sks_k收到qq的查询结果后,在第5行估计最终结果ansqans_q。最后,所有Q|Q|查询的答案将在第6行返回。

image.png

基于本地查询的水平采样

LSR-Forest 索引

对于数据孤岛sks_k,LSR-Forest索引由多个R-treesT0,T1,...,TlognskT^0,T^1, ...,T^{log n_{sk}}组成。每个R-treeTiT^i索引一组采样的空间对象(用PskiP^i_{s_k}表示),其中ii是R-tree的标识符,每个空间对象被采样的概率为1/2i1/2^i。换句话说,标识符较高的树会有较少的空间对象。 image.png

算法5说明了如何为数据孤岛sksk构建LSR-Forest。具体来说,在第1-2行,sks_k基于所有的空间对象Psk0Psk0=PskP^0_{s_k}(P^0_{s_k}=P_{s_k})构建了一个Rtree T0。在第3-5行中,随着级别ii的增加,被采样的空间对象越来越少。具体来说,当前级别的空间对象PskiP^i_{s_k}是通过对Pski1P^{i-1}_{s_k}中的空间对象进行概率1/2的采样而产生的。然后,数据仓sks_k基于新采样的空间对象构建R-trees TiT^i。最后,所有构建的R树T0,T1,...,TlognskT^0,T^1, ...,T^{log n_{sk}}构成了数据孤岛sks_k的LSR-森林索引。

本地范围聚合查询

通过LSR-Forest索引,我们可以在一个给定的孤岛进行近似的本地范围聚合查询,具体方法如下:首先选择一个级别ll,然后在R树TlT^l上进行本地范围聚合查询,最后用R树TlT^l上的答案乘以2l2^l作为这个筒仓的结果。注意,级别ll的选择是由所需的精度保证决定的。给定一个近似的比率ϵ\epsilon,一个最小的上界δ\delta和对查询结果sum0sum_0(在我们的工作中与查询范围相交的网格的聚合结果)的粗略估计,llimage.png得到。
image.png
算法6介绍了用我们的索引LSR-Forest回答一个范围聚合查询的过程。在第1行中,我们使用Lemma 1从LSR-Forest中根据δ\delta挑选一个合适的R树TlT^l。在第2行,我们使用挑选的R树TlT^l来进行范围聚合查询,并获得答案reslres_l。因此,我们可以在第3行将数据仓sksk拥有的所有空间对象的答案估计为resl×2lres_l \times 2^l