【论文阅读】Landmark indexing for evaluation of label-constrained reachability queries

Valstar L D J, Fletcher G H L, Yoshida Y. Landmark indexing for evaluation of label-constrained reachability queries[C]//Proceedings of the 2017 ACM International Conference on Management of Data. 2017: 345-358.

ABSTRACT

考虑一个有向边标记图,如社交网络或引文网络。对这些数据的一个基本查询是确定图中是否有从给定源顶点到给定目标顶点的路径,只使用图中边标签的限制子集中带有标签的边。这种标签约束的可达性(LCR)查询在图分析中发挥着重要的作用,例如,作为所谓的常规路径查询的核心片段,在实际的图查询语言中得到支持,如W3C的SPARQL 1.1,Neo4j的Cypher和Oracle的PGQL。然而,目前的LCR评估解决方案并不能扩展到在广泛的应用领域中越来越普遍的大型图。在本文中,我们提出了第一个有效的LCR评估的实用解决方案,利用基于地标的指标为大型图。我们通过大量的实验表明,我们的索引明显比最先进的LCR索引技术更小,同时支持更快的数量级的查询评估时间。我们完整的C++代码库可以作为进一步研究的开源代码。

1. INTRODUCTION

图结构化的数据集在当代的应用程序场景中无处不在。这里的例子包括社交网络、链接数据、生物和化学数据库,以及书目数据库。通常,这些图的边缘是有标记的。例如,在社交媒体网络中,顶点代表人、网页和博客文章,表示社会关系的人之间的边缘可能被标记为“朋友的”或“相对的”,而顶点之间的非社交关系可能被标记为“喜欢”、“访问”或“书签”。
随着这些数据集的规模的不断增长,图形查询处理的可伸缩解决方案变得越来越重要。图上的查询的一种基本类型是可达性查询,其中我们感兴趣的是确定是否有一条从给定的源顶点到给定的目标顶点的路径。通常,应用程序场景要求限制允许的路径集。一个基本的路径约束是将我们的搜索限制在图中出现的边缘类型的一个子集上。我们将这些查询称为受标签约束的可达性查询。
(LCR)给定图G的顶点s和t,以及G的所有边标签L集合的子集L,仅使用L中带标签的边来确定G中是否存在从s到t的路径。
例如,在一个社交网络中,我们可能只对带有表示人与人之间社会关系标签的边缘感兴趣(例如,而不是带有非社会关系标签的边缘,比如访问特定网页的人或喜欢的帖子);在生物数据库中,我们可能只对蛋白质之间的交互途径感兴趣(而不是例如,蛋白质顶点和表示科学出版物的顶点之间的引文关系)。
LCR查询也作为正则路径查询[4,5,7,31]语言的一个重要片段出现,[4,5,7,31]本质上是由正则表达式约束的可达性查询。事实上,制定的常规路径查询,LCR相当于确定的问题是否有一个路径从年代t边缘路径标签沿路径形成一个字符串的语言表示的正则表达式(1∪···∪n)∗,L={1,…,n},其中∪是分离,∗是Kleene星。LCR和更一般的常规路径查询支持实际的图形查询语言,如SPARQL 1.11、PGQL [28]和openCypher2。在常规路径查询的高效处理的研究中,可达性的可伸缩解决方案发挥着重要的作用。
从这些观察中可以清楚地看出,在大型图形上的LCR查询处理的实际解决方案对于当代图形分析是至关重要的。Jin等人[17]的研究开始了对LCR查询的有效解决方案的研究,以及最近的几项后续研究[9,10,20,24,37]。正如我们在第2节中详细介绍和在第6节中实验演示的,不幸的是,目前最先进的解决方案不能很好地扩展到当代应用中常见的较大的图。考虑到LCR查询的基本性质,解决这个限制是一个重要的问题。

Our contributions

在我们的工作中,我们解决了这种情况,提出了第一个可扩展到大型图的LCR索引解决方案。我们的方法利用了基于陆地标记的索引的概念上简单的思想,这已被证明对于标准的(无约束的)可达性查询处理[1,2,19,33]是成功的。简单地说,我们的方法选择了少量的地标顶点,并预先计算了从一个地标中回答在LCR上的查询所需的所有信息。在查询时,我们基本上进行了尊重标签的宽度优先搜索(BFS),但在可能的情况下,我们利用存储的信息来获得从地标到目标顶点的快捷方式。
为了进一步提高查询性能,我们提供了两个扩展:一种是用于在BFS期间更快地查找地标,另一种是用于有效地找出不相关的顶点,即使没有从已找到的地标到目标顶点的捷径。
我们证明了我们的方法可以扩展到数量级的图,并产生比当前解决方案更快数量级的查询评估。此外,我们的解决方案并不过于复杂,因此有很好的实际影响潜力。我们完整的C++代码库,包括测试框架和我们实验研究中使用的所有索引策略的实现,可以作为进一步研究的开源代码。
我们的工作如下。在讨论了这个问题的相关工作(第2节)和初步定义(第3节)之后,我们将解释了我们基于地标的方法(第4节)和两个扩展(第5节)。然后,我们展示了我们的实验结果(第6节)。我们在第7节中给出了进一步研究的结论性和指示。

2. RELATED WORK

可达性查询(没有标签限制)最近在数据库社区中引起了大量的研究关注(见Xu和Cheng的优秀调查[35])。目标是建立一个索引,可以比BFS及其现代变体更快地回答查询,如方向优化BFS(DBFS)[8],它需要O(n + m)时间,并且比图的完全传递闭包(TC)有更低的内存需求,这需要O(n 2)空间。这里,n和m分别表示图的顶点和边的数量。基于压缩TC [26,29]、由预先计算的索引[3,18,30,34,36]引导的在线搜索和标记方案[11,12,13,19,25,33]的思想,已经提出了许多索引方法。
关于有效评估的常规路径查询的策略,我们所知目前最先进的系统(如SPARQL引擎)依赖于变化的BFS是无索引(如[32])或使用索引不能有效地应用于LCR查询评估,因为它们针对不同的查询类型(如[14,16])。此外,对当前图和RDF数据库系统上有超过几千条边[6]的图进行常规路径查询评估是不切实际的。因此,现有的系统将无法处理我们在研究中使用的图上的查询,这些图要大多个数量级。实际上,我们认为我们的工作是实际实现图查询语言的一步,该语言具有LCR查询(如更丰富的常规路径查询)。
接下来,我们将回顾在LCR上最密切相关的工作和目前最著名的LCR查询评估方法。
金等人,[17]。这项工作展示了关于LCR查询的第一个结果。这里给出了回答LCR查询的两个极端,即BFS/DFS或在数据图上构建一个完整的TC。提出了一个基于树的索引框架,它由生成树T和图的部分传递闭包NT组成。T和NT总共包含了足够的信息来恢复完整的TC。基于T,图中的所有路径都被划分为三组Ps、Pe和Pn。Ps包含所有成对路径的第一边是t的一部分。Pe包含所有成对路径的最后一条边是t的一部分。Pn包含所有成对路径的第一还是最后一条边是在T. NT(u,v)包含所有路径标签的路径在Pnu和v之间。
这种方法的一个缺点是它不能在密集图上工作。在这种情况下,生成树T的大小相对于图g相对较小,因此NT的大小不会比完整TC的大小小很多。
我们的方法是类似的,因为它也旨在提供一个平衡,在BFS和构建一个完整的TC之间的平衡。我们没有建立一个完整的TC。这将导致查询评估时间的成本增加。然而,我们的方法的不同之处在于,我们只为一个选定的顶点子集构建一个完整的TC。我们也不构建或使用生成树。
后续工作表明,Jin等人[20,37]的方法的可扩展性有限,因此我们在我们的研究中没有进一步考虑它。
Bonchi等人,[9]。最近在评估LCR查询方面取得了进展,其中关于距离的推理是重要的[10,15,20,24],由Bonchi等人的最先进的方法表示。这里研究的重点是标签约束最短路径(LCSP)查询,给定两个顶点,t和标签集L,我们想计算(长度)最短路径从s到t只使用边缘与标签L注意LCSP比LCR更一般,因此构建一个指标这样的查询是一个更具挑战性和明显不同的任务。Bonchi等人提出了两种进行LCSP查询的方法。这两种方法都给出了实际最短距离的近似值,而且是不精确的,因为假阴性是可能的。因此,它们对准确地回答LCR查询没有帮助。在我们的研究中,我们没有进一步考虑这些策略。
邹等人,[37]。据我们所知,这种方法是LCR查询评估的最新水平。因此,与DBFS一起,这代表了我们在第6节的实验研究中进行比较的基线。
Zou等人的方法将输入图分解为强连通分量(SCC的)C1,……,Ck。对于每个SCC Ci,计算一个局部传递闭包,也就是说,我们找到在Ci中连接每对顶点的所有标签集。通过使用SCC的进出入口(即SCC中的那些顶点,其边分别为SCC外的顶点),我们可以将每个SCC Ci变成一个二部图Bi。这些二部图D的并集是一个无环图。对于SCC的每一对(Ci,Cj),使用D的拓扑顺序来查找连接Ci的内入口和Cj的出入口的所有标签集。最后,我们找到连接每个SCC的内部顶点的标签集,即那些不是内入口或外入口的顶点,连接到任何其他顶点,反之亦然。所得到的索引包含了图的每个顶点的完整可达性信息(即,图相对于标签集的完整TC),因此,查询回答相当于索引中的一个简单查找。
这种方法的一个重要限制因素是,它对于具有相对较大的SCC的图无效。对于这样的图,我们需要计算SCC的局部TC,这是计算密集型的。此外,如果SCC中的大部分顶点是一个内入口和/或外入口,我们可能得到一个由比SCC包含更多的边组成的二部图。
我们提出的方法不存在这些问题,因为我们没有将图划分为几个SCC,然后使用自下而上的方法来找到完整的TC。相反,我们的方法侧重于构建TC的一个选择性部分。正如我们在实验研究中所显示的,Zou等人的方法并没有扩展到我们的方法可以处理的更大的图。

3. PRELIMINARIES

我们研究了在带有边标签的有向图上的LCR查询的评价。在本节中,我们将给出对这些查询和数据的正式定义。对于一个正整数n,我们定义了[n] = {1,……,n}。
边标记有向图是一个三重G=(V,E,L),V是一个有限的顶点,L是一个有限的标签,和E⊆V×V×L是一组有向标记边,也就是说,(v,w,l)∈E是一条边从V到w标签l。设λ: E→L是从边到它们对应的标签的映射,即λ((v,w,l))= l,for(v,w,l)∈E。
边标记有向图的示例见图1。在续集中,我们通常会把这些图称为“标记图”或“图”。
在这里插入图片描述
G中的路径P是一个序列h v0,e1,v1,…,vp−1,ep,vpi,对于一些p > 0,其中vi∈v为每0≤i∈≤是从vi−1到vi的每i∈[p]。我们说P是从v0到vp的路径。P的长度也用|P|表示。此外,对于L⊆L,如果λ(ei)∈L,我们说P是一个∈路径。我们用v0L❀vp来表示该路径的存在性。我们说一个标签集L⊆L是一个连接v到w的最小标签集,如果(i)vL❀w和(ii)v L0❀w对于任何适当的L 0 (L。
下面给出了LCR查询的正式定义。定义3.1。LCR查询是一个三重(s,t,L)∈V×V×2L,其中2L表示❀的幂集。如果是L❀,则称该查询为true(或真查询)。否则,该查询将被称为false(或false查询)。
在图1的图中,查询(v1、v5、{ffedsOf})为真,而查询(v1、v3、{ffedsOf})为假。此外尽管(v1、v4、{ffesOf、下面})是一个真正的查询,但标签集{ffesOf}不是连接v1和v4的最小标签集,因为查询(v1、v4、{ffesOf})也是正确的。

4. LANDMARK INDEX

在本节中,我们将解释我们的被称为地标索引(简称LI)的索引方法,以及它在有效的LCR查询评估中的应用。
我们首先在第4.1节中概述了总体思想。然后,我们分别在第4.2节和第4.3节中详细解释了我们的索引算法和查询算法。在第4.4节和第4.5节中分别给出了正确性的证明和对时间和空间复杂度的分析。

4.1 Overall idea

我们从LI背后的基本直觉开始。最简单的索引方法如下:给定输入图G =(V,E,L),对于每个顶点v∈V,如果存在从v到w的L路径,我们将每对(w,L)∈V×2L存储到v的索引中。然后,我们可以通过检查这对LCR查询(w,L)是否在v的索引中来回答任何LCR查询(v,w,L)。
当然,这种简单的索引方法并不能扩展到大型图。对一种更有效的索引方法的一个观察结果是,我们只需要存储(w,L),这样L就可以是连接v到w的最小标签集。这是因为vL0❀w适用于任何L0⊇L,因此我们可以为查询输出“true”(v,w,L0)。
仅凭这个观察结果并不足以使索引时间和索引大小足够小。为了进一步减少索引时间和索引大小(以查询时间为代价),我们只为少量的顶点构造索引,称为地标。给定一个查询(s、t、L),我们从s中执行一个BFS(将标签考虑在内)。当我们到达一个构造索引的地标s时,我们使用它来立即得到答案。

4.2 Indexing algorithm

首先,我们正式地定义了一个索引的概念。
定义4.1(索引)。标记图G =(V,E,L)上的索引是一个族{Ind(v)}v∈V,其中Ind (v)⊆V×2L。我们称每个Ind (v)为v的索引。对于v,w∈v,我们将Ind(v,w)⊆2L定义为集合{L |(w,L)∈Ind (v)}。
我们说,如果从v到⊆的任何L路径,对于某些L0⊆有(w,L0)∈Ind (v),那么Ind (v)是完整的。如果对于任何(w,L)∈Ind (v)有从v到v,我们说Ind (v)是健全的。
我们的索引算法的目标是,在选择一小组地标后,构建一个索引,使地标的索引是完整的,非地标的索引是空的。这样一个指数,我们可以立即回答一个查询(s,t,L)具有里程碑意义的年代检查是否我们有(t,L0)∈Ind(s)一些L0⊆L.虽然指数是无关紧要的在这一点上,我们将构建强健但不完整的指数使我们的方法在第五节更有效。
在这里插入图片描述

现在我们来解释一下我们的索引算法(算法1)。给定一个整数参数k∈N和一个图G =(V,E,L),我们首先选择一组k个地标顶点VL⊆V。这是通过选择总度最高(内度加出度)的k个顶点来完成的,遵循的策略Yano等人,我们在实验中也观察到这是一个稳健的地标选择策略[33]。让v1,……,vk是被选择的k个地标(按总度的降序排列)。然后,我们对每个v1运行LabeledBFSPerLM(在算法2中),…,vk。
在这里插入图片描述

带有具有里程碑意义的s∈VL的LabeledBFSPerLM的目标是构造s的索引Ind (s),使(w,L)∈Ind (s)当且仅当L是连接s到w的最小标签集。特别是,Ind (s)将是完整的。
第2行到第3行初始化一个最小优先级队列q。q的条目是成对(u,L)∈V×2L,根据|L|排序,即L中的标签数量。
第4行到第12行的循环从从q中取下一个入口(v,L)开始。过程TryInsert(s、(v、L))尝试将(v、L)插入Ind (s)。变量Ind (s)已通过一个列表实现。在这个列表中,我们有由一个顶点uinV和一个标签集列表X = {L | L⊆L}组成的对。这些对在u的顶点id上被排序。在第20行,我们对u进行二值搜索,以找到u的位置或者u可以插入的位置。为了在Ind (s)中只存储最小的标签集,我们处理如下:当L与Ind(s、v)中的任何L0(关于包含)不比较时,我们将(v,L)插入Ind (s)。当L是一些现有条目(v,L0)∈Ind (s)的子集时,我们删除每个这些条目并插入(v,L)。当L是一些人的超集时现有的条目,我们不插入(v,L)并返回false。如果TryInsert返回false,我们将跳过第8行到第12行,并继续在第4行处理q。
如果索引(v) =为真,我们将到达第9行。这意味着v是一个地标,其中LabeledBFSPerLM (v)已经被调用,并且Ind (v)可用。我们可以通过使用索引Ind (v)来扩展索引Ind (s)如下(调用推进):对于每个(w,L0)∈Ind (v),我们尝试插入(w,L0∪L)到Ind (s)。这是有效的,因为sL❀v和vL0❀w意味着sL∪L0❀w。然后我们跳过第11行到第12行,继续在第4行处理q。
最后,第11到第12行将形式(w,L∪{l})推送到每条边(v,w,l)的队列q。当且仅当(v,L)插入到Ind (s)中,并且v不是LabeledBFSPerLM (v)已经被调用的地标时,我们才到达这部分。
最后,我们注意到里程碑s现在被索引。

4.3 Query algorithm

在本节中,我们将解释地标索引的查询算法(算法3)。该查询算法与BFS非常相似。事实上,如果我们省略第2、3、11到14行,算法3与BFS一致。
在这里插入图片描述查询首先验证s是否为地标。如果是这种情况,我们可以只返回查询地标(s,t,L)的结果,当且仅当存在L0∈Ind(s,t)和L0⊆L时,它返回true。
如果s不是一个地标,那么我们就开始以类似于BFS的方式来探索该图。如果v是第11行的地标,我们称之为Query地标(v,t,L)。如果此调用成功,我们将返回true。如果此调用失败,我们将从队列中获取一个新的条目。在v不是地标的情况下,当存在一个具有l∈L的边(v,w,l)并标记为(w) = false时,我们将一个顶点w推到第15到第17行上的队列中。变量标记表示是否允许一个顶点将其中的任何符合条件的邻居推到队列中。

4.4 Correctness

在本节中,我们将证明LI的正确性。下面的引理对我们的分析很有用。
引理4.2。设G =(V、E、L)是一个有标记的图。设L⊆L是连接s∈V到t∈V的最小标签集。然后,存在一个=路径=,=,1,v1,…,v|P|−1,e|P|,v|P|i从s到t,这样对于每个j∈{0,1,…,|P|}
L≤jdef={λ(ej0)|1≤j0≤j}是一个连接s到vj的最小标签集。
L>j def = {λ(ej 0)| j < j0≤|P|}是一个连接vj到t的最小标签集。
证明。考虑以下辅助加权未标记图G 0 =(V 0、E0、d)。这里,V 0 = V×2L,我们有一条边从(vL)到(v0L0),当且仅当存在一条边(vv0,l)和L∪(vl)=L0。边((v、L)、(v0、L0))的权重设置为|L 0 |−|L|。请注意,权重总是为零或1。当且仅当G0中存在一个从(∈,∅)到(t,L0)的路径时,G中存在一个从s∈V到t∈V的∈路径。
现在,考虑g0中基于(s,∅)的最短路径树(相对于g0边缘的权值)。由于L是连接s到t的最小标签集,所以在最短路径树中存在一个从(s、∅)到(t、L)的路径p0。设(v0=,L0=∅),(v1,L1),,…,(v|P0|=t,L|P0|=L)为P0中的顶点。从最短路径树的性质来看,对于每个j∈{0,1,…,|P 0 |},L≤j是连接s到vj的最小标签集;否则,对于某些L0存在一个从s到vj的L0路径(L≤j,这是一个矛盾。类似地,对于每一个j∈{0,1,…,|P 0 |},L>j是连接vj到t的最小标签集;否则,对于某些l0存在从vj到t的L0路径(L≤j,这是一个矛盾。
然后,G中与P0相关联的路径P具有所期望的性质。
引理4.3。设G =(V,E,L)是一个图,k∈N是一个整数。设{Ind(vi)}i∈[k]是由地标索引(G,k)构造的索引,其中v1,……,vk是地标。然后,对于每一个i∈[k],我们有(t,L)∈Ind(vi),当且仅当L是连接vi到t的最小标签集。特别是,Ind(vi)是完整的和健全的。
“证明”。(⇐).我们通过在i上的归纳法来证明。
基本情况(i = 1):让P=u0,e1,u1,…,||−1,||是|0=|1的|路径,由引理4.2保证属性。我们为每个j∈{0,1,……定义L≤j和L>j…,|P|},如引理4.2所示。对于每一个j∈{0,1,……,|P|},由于L≤j是最小的,在第6行的TryInsert(v1,(uj,L≤j))从不失败。因此,(t、L)被添加到Ind(v1)中。归纳步骤(i≥2):让P=u0,e1,u1,…,u|P|−1,e|P|,u||作为u0 = vi到u||的|路径,具有引理4.2保证的性质。我们为每个j∈0,1,……定义L≤j和L>j…,|P|,如引理4.2中所述。设j∗∈[k]是第一个索引,使uj∗=vi∗为一些i∗<i。
如果不存在这样的j∗,则使用与基本情况相同的参数的主张成立。
如果存在这样的j∗,通过归纳假设和L>j∗是连接vj∗和t的最小标签集的事实,我们有(t,L>j∗)∈Ind(vj∗)。因此,通过在第9行的推进道具(p(vj∗,L)),我们添加(t,L>j∗∪L≤j∗)=(t,L)到Ind(vi)。
(⇒)因为所有连接vi到t的最小标签集L都存储在Ind(vi)中,而我们只在TryInsert中保留最小标签集,所以该主张成立。
定理4.4。设G =(V,E,L)是一个图,k∈N是一个整数。假设我们用地标指数(G,k)构造了一个索引。那么,q =(s,t,L)是一个真查询,当且仅当Query(s,t,L)返回true。
证明。查询基本上只对L中带有标签的边缘进行BFS。唯一的区别是,当我们对某些L0⊆L使用(t,L0)∈Ind (v)命中一个地标v∈VL时,我们立即返回true。这是有效的,因为l0是从引理4.3连接v到t的最小标签集。

4.5 Space and time complexity

在本节中,我们将分析我们的方法的空间和时间的复杂性。为简单起见,我们假设O(log n)位和O(|L|)位适合一个寄存器,并且我们可以在恒定的时间内对寄存器执行操作。
我们首先分析了我们的方法的索引大小。每个地标最多需要存储n个−1个顶点,每个顶点最多需要存储2个|L|标签集。4由于地标数为k,因此索引中的条目总数为O(nk2 |L|)。由于每个条目需要O(log n + |L|)位,因此总索引大小为O(nk2 |L|(log n + |L|))位。
接下来,我们分析了索引构建的时间复杂度。对于每个地标v∈VL,我们可以将n2个|L|条目推到优先队列。每次推送都需要O(log n)时间。对于每个标签集L,我们可以遍历每条边。因此,除了调用Tryy插入和推进道具外,我们需要O((n log n + m)2|L|)时间。注意,每次调用TryInsert都需要O(2|L|)时间。每一次对推进器插入的呼叫都没有推进道具。因此,推进道具并不会增加总时间的复杂性。综上所述,总时间复杂度为O(k((n log n + m)2|L| + n2 |L|·2|L|))=O(n(logn+2||)+m)k2|L|)。
最后,我们分析了处理查询的时间复杂度。在最坏的情况下,我们在图O(n + m)上做一个完整的BFS,并可能对k个地标中的每个地标运行查询地标。每个调用都将L与最多2个|L|标签集进行比较。因此,处理查询的时间复杂度为O(n + m + k2 |L|)。

5. EXTENDED LANDMARK INDEX

在本节中,我们提出了两个使LI方法更有效的扩展。我们首先将在第5.1节和第5.2节中解释这些扩展的概念。然后,我们在第5.3节和第5.4节中展示了我们的索引算法和查询算法。我们用这两个扩展名来称这个新方法为LI+。

5.1 Indexing non-landmarks

LI方法的第一个问题是,给定一个查询(s、t、L),它可能需要很长时间才能找到一个地标。
我们也通过为非地标建筑建立一个健全但不完整的索引来解决这个问题。假设我们为所有的地标建立了一个索引。然后,对于每个非地标顶点v∈V \ VL,我们插入(最多)带有v0∈VL的b个条目(v 0,L)到v的索引中,其中b∈N是一个参数。对于每个添加的条目(v 0,L),我们保证vL❀v0。这些条目是通过探索v∈V的图找到的,我们在插入b后停止。算法4中的过程标签bfsperNonLM显示了细节。为了清晰起见,我们用L-Ind来表示地标的索引,用NL-Ind来表示非地标的索引。

5.2 Pruning for accelerating false-queries

第二个问题是,在真查询和假查询之间可能存在很强的性能不对称性。这与这样一个事实有关,即真查询在找到地标后可以立即停止,而假查询通常需要在返回false之前探索图的更大部分。我们首先给出一个例子来解释我们的扩展背后的想法。设q =(s、t、L)是一个查询。假设l❀v和v❀v∈VL。我们将RL (v)定义为{w∈v|vL❀w}。然后,我们观察任何w∈RL (v)的❀;否则,我们有❀❀t,这是一个矛盾。因此,我们可以标记每个顶点w∈RL (v),这样我们将来就不会访问w。
不实际计算和存储RL (v)所有L⊆L.因此,对于每个里程碑式的v∈VL,我们引入一个集合(v),只保持L∈L.每个条目的集(v)是一对(S,L),这意味着S⊆RL (v)。我们将保证每个条目(S,L)都满足|L|≤|L|/4 + 1。这有三个原因。首先,我们不想存储所有的2个|L|组合,因为这使用了大量的内存。其次,如果|L|很小,那么|S|很可能很大,因此我们可以标记更多的顶点。第三个原因是,如果|L|很小,那么我们就有更多的机会使用该条目进行修剪,因为我们可以在查询(s,t,L0)满足L⊆L0时使用它。
算法4中的过程标签bFSPerLM+显示了我们如何选择条目(S,L)的细节。条目(S,L)相对于|S|按降序排序,即S中的顶点数。

5.3 Indexing algorithm

接下来,我们将解释LI+索引算法(算法4)。
在这里插入图片描述
在这里插入图片描述
算法4首先创建一个排序v1,…,根据v中的所有顶点的总度。第一个k个顶点被称为地标,我们让VL = {v1,……,vk}。其他的顶点被称为非地标。然后,我们为每个i∈[k]调用LabeledBFSPerLM+(vi),为每个i∈{k + 1,……调用LabeledBFSPerSNonLM(vi),n}。
LabeledBFSPerLM+(s)是LabeledBFSPerLM (s)的一个轻微改编的版本。唯一的区别是,它也构建了再现性(s)。当到达一个顶点v时,我们要么创建一个新的条目(L,{v}),要么添加reachableBy (s)添加现有条目(第18到21行)。然后,在第27到第29行,我们通过将一个现有项(S,L)∈的所有顶点复制到另一个现有项(S 0,L0)∈,来扩展∈中的每个项。
LabeledBFSPerNonLM(s,b)也是LabeledBFSPerLM (s)的一个稍微改编的版本。这些差异可以概括如下:
当NL-Ind (s)的大小达到b时,BFS立即停止(见推进器dPropNonLM中的第35行和第48行)。
只有当v是一个地标时,我们才会向NL添加(v,L)(见第39行)。
我们使用一个标记的变量来确保我们最多访问每个顶点一次(为了提高效率)。
我们在调用ForwardPropNonLM(第42行)后不继续,因为当v是非地标时,NL-Ind (v)可能没有到其他顶点的所有信息,因为NL-Ind (v)的大小以b为界。

5.4 Query algorithm

现在我们解释我们的查询算法(算法5)。我们使用索引NL-Ind和reachableBy来加快回答查询的过程。
在这里插入图片描述
对于带有s∈VL的查询q =(s,t,L),如果q是真查询,则查询扩展(s,t,L,标记)返回true。如果q是一个假查询,它用L0⊆L标记每个(S 0,L0)∈反应值在s0中的所有顶点,因为我们知道vL❀t对于v∈s0是成立的。这最多只能做一次,因为在实际操作中,在第28行进行的计算相对昂贵。此外,通过这样做一次,我们确保了以下几点。如果我们有两个条目(S1L1),(S2L2)和L1 (L2,我们得到S2⊆S1和条目(S2L2)放置在(S1L1)之前。通过最多执行一次操作,我们确保在执行了(S2、L2)之后,不会在第28行(S1、L1)处重新执行计算。
查询+是我们回答查询的程序。第1行确定v是否是一个地标,并在实际情况下调用Query地标标记(v)。否则,我们为每个v∈v设置标记(v) = false。当标记的(v)设置为true时,顶点v不再与我们的查询相关,也就是说,我们要么访问了它,要么修剪了它。
由于s是一个非地标顶点,我们循环读取条目(v,L0)∈NL-Ind(s)(第4行)。如果L0⊆L,也就是说,有一个从s到v的L路径,那么我们可以运行Query扩展(v,t,L)。如果它返回true,我们就可以返回true。否则,我们将标记的(v)设置为true。注意,Queryrat(v,t,L)可以使用接触(v)的信息标记更多的顶点。
如果没有里程碑式的v能够解决从第4行开始的循环上的查询,我们将继续进行本质上执行BFS的部分(从第9行开始)。当我们在途中遇到一个里程碑式的v∈VL时,我们运行查询扩展(v)。

5.5 Correctness

在本节中,我们证明了LI+的正确性。
引理5.1。设G =(V,E,L)是一个图,设k,b∈N是非负整数。假设{L-Ind(vi)}i∈[k]和{NL-Ind(vi)}i∈{k+1,…,n}是通过调用地标指数+(G,k,b)构造的索引,排序为v1,……,vn。然后,执行以下操作:
对于每一个i∈[k],我们有(t,L)∈L-Ind(vi),当且仅当L是连接vi到t的最小标签集。特别是,L-Ind(vi)是完整的和健全的。
对于每一个i∈{k+1,…,n},我们只有当L是连接t和vi的最小标签集时,才有(t,L)∈NL-Ind(vi)。特别地,L-Ind(vi)是健全的。
证明。第一个主张的证明与引理4.3的证明完全相同。第二种主张也类似,因为唯一的变化是对i∈{k + 1,…的NL-Ind(vi)的大小施加了一个上限。,n}。
引理5.2。设G =(V,E,L)是一个图,k,b∈N是非负整数。让我们通过调用排序为v1的地标索引+(G,k,b)来构造i∈,……,vn。然后,对于每一个∈[k],(S,L)∈可通过(vi),和v∈S,我们有viL❀v。
证明。当BFS从vi中只使用L中带有标签的边命中v时,将添加顶点v。因此,索赔成立。
定理5.3。设G =(V,E,L)是一个图,k,b∈N是非负整数。假设我们用地标指数+(G,k,b)构造了一个索引。那么,q =(s,t,L)是一个真查询,当且仅当具有所构造的索引的查询+(s,t,L)返回true。
证明。当s是一个里程碑时,我们在第2行回答正确。
从引理5.1中的第二个主张中,只有当从s到v有一个l-路径时,我们才会到达第6行。当第6行的调用查询扩展返回true时,那么q是一个真查询,因为sl0❀vL❀t成立。当它返回false时,从引理5.2和第5.2节中的参数中,我们只标记没有到t的l-路径的顶点。
从第9行开始,我们基本上只对带有标签的边进行BFS。唯一的区别是,当我们命中一个具有(t,L0)∈NL-Ind (v)的地标v∈VL时,然后我们立即返回true。这是有效的,因为l0是连接v到t的最小标签集(引理4.3)。

5.6 Space and time complexity

我们分析了LI+的时空复杂度。我们只提到了与LI的区别。
每个非地标顶点可以存储O个(b)项,非地标顶点的数量为n−k。因此,总索引大小为O((n(k2 |L| + b)(log n + |L|))位。
接下来,我们分析了指数构建的时间复杂度。对于每个非地标,每个调用TryInsert只需要O (b)时间。因此,索引构建的时间复杂度为O(n(日志+2||)+m)k2||)+O(n(日志+ b)+ m)(n−))2|L|)=O(n日志+m)n2||+(2|||+b(n−k))n2|L|)=O(n日志++2|L|L+b(n−k))n2 |L|)。
最后,我们分析了查询的复杂度。在最坏的情况下,我们对k个地标中的每一个称为查询扩展。每个调用查询比较L最多2|L|标签集和标记中最多n个顶点。因此,查询时间复杂度为O(n + m + k·(2|L| + n))= O(m + k(2|L| + n))。

5.7 Implementation details

设w = 64是每个字的位数。对于标记和可达的变量,我们使用长度为dn/我们的动态位集,以支持列表或数组。使用一个位集的优点是,设置一个位(向一个集合中添加一个顶点)或读取一个位(验证一个集合中一个顶点的存在/不存在)可以在恒定的时间内完成。一个长度为n的数组将需要O(log n)时间来找到一个特定的元素。另一个优点是,我们可以在w位机器上的nw操作中有效地连接两个位集。连接两个位集是由第29行上的程序查询来完成的。

6. EXPERIMENTAL RESULTS

在本节中,我们将在各种合成数据和真实数据集上评估我们提出的方法。我们把实验分为四个部分。在前两部分中,我们使用了所有的方法(LI,LI+,Zou et al. [37],和DBFS)。在第一部分中,我们使用所有的真实数据集(见表1)来比较我们所有的方法,并研究我们的方法在真实数据上的表现。在第二部分中,我们确定了两种合成图(ER和PA)的顶点数和改变度D,以便相互比较我们所有的方法,并研究增加度的效果。在最后两部分中,我们深入研究了我们的扩展方法,即LI+。在第三部分中,我们确定了顶点的数量,并且我们改变了每个节点(D)的度和标签集大小(|L|),以研究这些参数的影响。在第四部分,也是最后一部分,我们研究了增加图的大小的影响。
对于合成数据集,我们只报告索引构建时间(s)、索引大小(MB)和基线DBFS的平均速度。我们这样做是为了研究某些参数(如程度,标签集大小)的影响。对于真实的数据集,我们也报告了所有的总加速速度。
所有方法都采用C++实现。关于Zou等人(Zou)的详细信息见附录A。Full-LI与LI相同,地标数k等于顶点数n。Full-LI使用朴素的地标方法;LI+的两个扩展都与FullLI无关,因为我们有那个=,这意味着我们可以对所有的v∈v使用查询标记(=)。
在给定的图上,Zou和Full-LI建立了相同的索引,即最终构建的图索引之间没有差异。两者都使用了相同的数据结构{Ind(v)}v∈V,并使用了相同的程序TryInsert将标签集L插入到v,w∈V的Ind(v,w)中。两者都可以正确地回答任何查询(v、w、L),并且只使用索引中最少数量的条目。因此,它们具有相同的索引大小和相同的加速速度。两者之间的差异在于索引构建时间。
设置。我们使用了一个拥有258GB内存的Linux服务器和一个2.9 GHz的32核处理器。我们没有让任何一个实验超过128GB的内存限制或6小时(21600秒)的时间限制。这些实验都是单读的。
在所有实验中,我们将地标数k设置为1250 +√n,每个非地标顶点的预算b设置为20,其中n是输入网络中的顶点数。初步实验表明,k和b的这些值在空间和时间之间有很好的平衡。一般来说,有更多的地标总是更好的(对于查询性能)。因此,在实践中,选择地标的数量可以归结为空间和时间之间的权衡,这是基于部署索引的环境的约束。
数据集。我们同时使用了合成图和真实的数据集。我们使用SNAP [22,23]按照“优先附着”(PA)和“Erd˝-R‘enyi”(ER)模型生成合成图;我们最初没有得到有向图,因此我们随机设置边的方向。两种模型的主要区别在于PA的出度分布存在偏态,而ER的出度分布接近均匀。边缘上的标签与λ = |L| α呈指数分布,为α = 1.7。
表1概述了实验中使用的真实数据集。这些数据集来自不同的来源,但其中大部分来自SNAP [22]或KONECT [21]。其中六个图,例如,前进图,已经有了自然的边缘标签。最后一列表示我们是否综合生成了标签。如果我们综合添加标签,我们遵循与合成数据集相同的方法,将标签的数量|L|设置为8,参数α设置为1.7。
BioGrid、StringsFC和StringsHS都是无向图,其中顶点代表蛋白质,边缘标签代表两个蛋白质之间的相互作用。对于这两个字符串数据集,我们使用“is-作用”字段来确定任何边的方向。StringsFC和StringsHS分别代表生物”和“智人”的蛋白质网络。在BioGrid中,一条无向边(u,v,l)∈E被替换为两条有向边(u,v,l),(v,u,l)∈E来创建一个有向图。
查询生成。对于每个数据集,我们使用|L|/4和|L|−2标签生成了两个查询集。每个查询集包含1000个真查询和1000个假查询。
我们以以下方式为每个查询集生成查询。让t=1000是我们需要的查询的数量来为任何查询条件生成。首先,我们选择了一个随机的顶点v∈v。我们还生成了一个在50 + log n到50 + n/50之间的随机数d。然后我们进入一个循环。我们在t 100次迭代后离开这个循环。我们选择另一个随机的顶点w∈V。我们生成10个标签集L1,……,L10,并为每个Li运行BFS,以确定是否v Li❀w。我们的BFS实现不仅返回了查询的答案,而且还返回了BFS访问的顶点的数量d0∈N。如果我们有d 0 < d,我们丢弃查询。如果v Li❀w和真查询的数量低于t,我们将(v,w,Li)添加到真查询集。如果v Li❀w和假查询的数量低于t,我们将(v,w,Li)添加到假查询集。对于真查询和假查询,我们都不允许重复的查询,即每个查询在一个查询集中只出现一次。最后,在这个循环结束后,我们选择一个新的v∈V和d,直到我们生成了t个真查询和假查询。
以这种方式设置这个程序有两个原因。首先,处理一组查询应该需要一些努力。例如,如果对于所有的查询,BFS可以在几个步骤中找到答案,那么我们就认为构建索引几乎没有什么好处。其次,我们不希望大部分查询有相同的起始顶点v∈V。如果是这样,那么我们的地标方法将比BFS和DBFS有优势,因为对于每个v∈VL,我们可以使用查询地标来得到一个相对快速的查询答案。
加速计算。索引的目标是相对于无索引的基线,加快查询回答过程,即DBFS。因此,我们定义了在DBFS上的总加速。首先,回顾一下,一个查询集是由标签的数量以及它是由真序列还是假序列组成所决定的。我们说Qc∈N×{真,false}是一个查询条件。例如,带有|L|/4标签的true查询属于查询条件(|L|/4,true)。由于我们为每个数据集生成了两个查询集,并且每个查询集包含两个查询条件,所以我们总共有四个查询条件。回想一下,对于每个查询条件,在相应的查询集(如果存在)中的查询数量为1,000个。设1≤j≤1000的Qc (j)是属于Qc的第j个查询。让TM(Qc(j))是方法M为回答查询Qc (j)所花费的时间。然后,在查询条件Qc下,方法M的总加速被定义为: P 1,000 i=1 TDBF S(Qc (i))P 1,000 i=1 TM(Qc(i))。在查询条件条件Qc下,第i个查询和方法M的单独加速被定义为: TDBF S(Qc (i))TM(Qc(i))。并且,方法M的平均加速是属于四个查询条件的总加速的平均值。

6.1 Results I: performance on real graphs

在我们的第一个实验中,我们比较了基于地标的方法LI、LI+和Lull-LI与先进的邹在表1的真实数据集上的性能。这里的主要性能标准是索引时间、大小以及加快查询速度。我们预计将在索引成本和查询性能之间进行权衡。
在这里插入图片描述

表2总结了索引的时间和大小。结果清楚地表明,Full-LI和Zou在大图上不能不好。特别是,邹对除了两个数据集外的所有数据集都超时了,而Full-LI只能处理其中的5个图。由于邹Zu和Full-LI建立相同的指数,它们具有相同的指数大小;但Full-LI的索引时间比邹快几个数量级。此外,我们还可以观察到LI+的索引时间和索引大小仅略高于LI+。
在这里插入图片描述
表3总结了LI和LI+在DBFS上的总加速速度。首先,除了非常小的图外,LI+几乎总是比LI显示出更好的性能。对于真正的查询,我们认为LI+总是最快的方法,比DBFS的速度提高了两个数量级。
在这里插入图片描述
LI在错误测序方面比DBFS没有任何优势。在28个案例中,LI+的错误查询比DBFS快一个数量级,在18例中快一个数量级,而在其余4例中,它的速度要慢一个数量级或更多。一般来说,考虑到LI+的类似BFS的正向搜索策略,错误序列比真实查询需要更多的时间。真查询可以停止后达到目标,而假查询必须探索更大的部分图得到一个答案,也就是说,当目标t∈V查询(年代,t,L)被发现在一个索引印第安纳州(v)具有里程碑意义的v∈VL,我们可以立即返回真。事实上,通过深入挖掘,我们发现这些数据集和错误查询的性质是这样的,失败被确定为更接近查询目标,而不是它们的源,也就是说,在错误查询中,从s开始的BFS经常在非常接近t时停止。因此,从源节点探索的子图明显大于从目标节点探索的子图。在这些情况下,DBFS能够利用搜索方向优化来更快地解决查询。
查询中的标签数量也会影响LI+的加速。具有大量标签的真查询在找到地标并从该地标解析查询方面应该不会那么困难。一个具有相对较多标签的错误查询应该能够访问图表的大部分。使用LI+,我们可以对这类错误查询使用剪枝来加快计算速度。但是,LI+(算法5)的查询算法无法在队列上推送一个新的顶点可能需要很长时间。
一般来说,表3中的数字满足了我们对LI+的预期,对真实查询的查询处理实现了多达两个数量级的改进,在85%的情况下,在相同的数量级内或更好涉及虚假查询。为了提高LI+对错误查询的性能,未来工作的一个有趣的方向是研究用于查询评估的替代双向DBFS类搜索策略。
为了更深入地了解查询加速的分布,图2显示了NotreDame和Youtube的2000个true-和的个人加速2,000个错误查询和方法LI+,按升序排序。只有一小部分(6%)的错误查询和不到三分之一的Youtube错误查询有单独的减慢,即加速速度低于1.0。我们还注意到,超过99%的节点序列和97%的Youtube真查询至少有2倍的加速,而且,两个数据集上的大多数节点序列至少有10倍的加速。
在这里插入图片描述

6.2 Results II: synthetic graph performance

在我们的第二个实验中,我们比较了我们的方法(LI,Full-LI,和LI+)的性能与最先进的Zou在合成数据集上的性能。我们选择了n=5000和L = 8,我们将节点度从2改变到5(即边数从10000到25000),从而增加了图的密度。我们这里的目的是使用两种显著不同的合成图模型来理解图密度对性能的影响,因为密度是图的一个基本属性。我们预计,对于所有方法来说,在更密集的图上构建索引将更加困难,因为节点之间需要探索的可能路径和索引的数量以及最小标签集的数量随着密度的增加而增加。表4总结了这些结果。
同样,由于邹和Full-LI建立了相同的索引,我们发现邹和Full-LI有相同的索引大小和相同的平均加速速度。因此,Full-LI的平均加速也是Zou的平均加速(在Zou方法设法建立了一个指数的情况下)。邹没有在pa数据集的D≥4时的时间限制内建立索引。在任何情况下,它都没有为er数据集建立一个索引。
从结果可以看出,邹在高级图上存在一些主要的困难。它与Full-LI没有竞争力。在附录A中,我们对邹市和结果给出了更详细的解释。
在所有情况下,我们提出的方法都显示出了显著的查询处理时间的改进。我们可以注意到,随着D的增加,加速平均减小。这是因为图中连接组件的平均大小随着D的增加而增加,因此我们的方法必须对错误查询(并且仅对错误查询)执行相对更多的工作,如前一节所讨论的。

6.3 Results III: impact of degree and label set size

接下来,我们分析了LI+在使用合成图改变边数和标签数时的性能。我们使用PA-和=数据集,其中有25000改变节点度D(2、3、4或5)或标签|L|的数量(8、10、12、14或16)。我们这里的目的是更好地理解图中标签的数量和图的密度对LI+性能的影响。我们预计,随着图在这两个维度中的增长,索引成本将会增加,因为节点之间探索的可能路径数量和索引的数量只会增加。
图3和图4显示了pa数据集和er数据集的索引时间、索引大小和查询时间。如果在任何一个数据图中都缺少一个数据点,那么我们都无法在21,600秒(6小时)的时间限制内建立一个索引。当D很大时,我们观察到索引时间和索引大小都随着|L|的增加而迅速增长。另一方面,当D较小时,索引时间和索引大小的增长速度较慢。这可以通过连接一对(典型的)顶点的最小标签集的数量来解释,这严重影响了LI+的性能。当D很大时,|L|中的数字是指数的,当D很小时,无论|L|是什么数字都很小。
在这里插入图片描述
er数据集的索引时间和索引大小的增长均优于pa数据集。这可以用er数据集具有接近一致的出度分布来解释。平均而言,有更多的路径连接任意两个顶点,从而增加了连接它们的最小标签集的数量。
在查询性能方面,ER-和pa-数据集之间没有明显的差异。总的来说,随着标签数量的增加,我们可以观察到稳定的查询时间。

6.4 Results IV: impact of graph structure

最后,我们分析了LI+在PA-和∈-数据集上的性能,因为我们改变节点数{5000、25000、125000、250000},将度固定为D = 5。我们在这里的目标是了解LI+的可伸缩性。
图5显示了索引时间、索引大小和平均查询时间。我们可以观察到,er数据集的索引时间比pa数据集增长得快得多,而er数据集的索引大小与pa数据集相当。这可以理解如下。在出度分布更均匀的图中,任意两个顶点之间的(直接)路径的平均数s,t∈V高于出度分布更大的图。如果两个顶点s,t∈V之间的路径数量增加,那么连接s和t的标签集的数量也会增加。由于这种效应,ER-的指数大小和构建时间都比pa-数据集具有更强的增长。索引时间的增长更强,因为算法4可能需要探索所有简单的路径,而它可能只需要存储一些标签集属于这条路径由于给定两个顶点v,w∈V,L,L0⊆L,vL❀w和vL0❀w我们只需要包括(w,L)指数v(v)。我们怀疑,由于同样的原因,ER-数据集和pa-数据集的索引大小之间的差异非常小。
在这里插入图片描述
随着顶点数量的增加,我们可以看到ER-和pa-数据集的平均查询时间都在增加,正如在更大的图上所预期的那样。pa数据集比er数据集有更强的增长。这可以理解如下。由于er数据集具有更均匀的出度分布,每个顶点有更多的邻居,我们可能会在pa数据集上的搜索必须探索图的大部分,因此需要更多的时间来评估查询。

7. CONCLUDING REMARKS

我们提出并分析了新的基于索引的方法,以有效的LCR查询。我们通过深入的实验研究证明,我们的方法可以扩展到比以前基于索引的解决方案支持的图大数量级的图,加快查询评估时间的速度。
基于我们的研究结果,有几个有趣的方向值得进一步研究。未来研究的一个自然方向是更精细地分析图的拓扑结构和复杂性对性能的影响,并进一步优化我们的解决方案,例如,有界树宽的图。另一个丰富的调查途径是研究基于陆地标记的评估方法,以扩展到LCR查询的类;在附录B中,我们概述了我们的方法的一个这样的应用。另一个有趣的方向是对多核环境中的地标索引的研究。
另一个重要的需要进一步研究的领域是提高错误查询的LI+性能的替代搜索策略,如第6.1节所述。最后,将我们的索引应用于诸如SPARQL1.1和openCypher等实用查询语言的评估,是未来研究的一个重要方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值