CN103399902B - 一种并行环境下的有向图可达性链表生成及查询方法 - Google Patents
一种并行环境下的有向图可达性链表生成及查询方法 Download PDFInfo
- Publication number
- CN103399902B CN103399902B CN201310317126.7A CN201310317126A CN103399902B CN 103399902 B CN103399902 B CN 103399902B CN 201310317126 A CN201310317126 A CN 201310317126A CN 103399902 B CN103399902 B CN 103399902B
- Authority
- CN
- China
- Prior art keywords
- node
- trunk
- chain
- processor
- accessibility
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种并行环境下的有向图可达性链表生成及查询方法,属于大图数据处理领域。将一个有向图分发到各个处理机中,每个处理机存储图中的节点及节点所对应的子节点;将分割到各个处理机内的图数据压缩;计算主干图上主干节点可达性编码;构建链式索引;在链式索引上建立跳表;各处理机间进行数据通信:各处理机向其他处理机发送跳表信息;各处理机更新自身的跳表信息;建立全图可达性索引。本发明通并行环境下的图可达性压缩技术,极大降低图数据大小、降低系统计算负载,使得系统处理更大规模的图数据。本发明提高从磁盘上读取数据的速度,间接加快查询速度,保证查询结果准确性,极大降低并行计算系统在查询时的网路通信代价和查询时间。
Description
技术领域
本发明属于大图数据处理领域,特别涉及一种并行环境下的有向图可达性链表生成及查询方法。
背景技术
图作为计算机领域的一种重要的数据结构,现今大量的信息处理应用图作为数据结构,对图的各种操作的需求不断加大。图的可达性查询操作作为对图的一种基本操作,在语义网络、生物网络和社交网络中有重要应用,同时图可达性也是一些对图数据进行高级应用的基础算法。对图的可达性定义如下,对一个有向确定图G,图上的节点集合设为V,边集合设为E,有向图的可达性计算,是判断一个有向确定图的节点集合V中一个节点对(u,v)之间是否存在一条连通的路径从u到v,如果存在,就返回true,否则就返回false。
已有的图可达性处理技术主要应用与单处理机环境下图的可达性计算,大多数都分成两个步骤:图可达性索引计算以及查询计算,而并行环境下的图可达性计算,都只是针对特定类型的图数据,例如带有标签的图或是带有权值限制的图可达性查询,对于通常意义上的有向图可达性查询并无具体应用。
已有的涉及图可达性查询的计算方法主要有三类:第一种方法是压缩传递闭包构建索引,如链索引、区间索引、二重索引、路径树索引以及比特向量索引。这些算法都只能处理小规模的图数据,在数据量不断增大的今天,仅仅能够处理百万节点千万条边的算法无法满足实际应用。而如果强行使用磁盘存储这些计算结果,任务的查询时间远远超出可承受范围甚至无法完成可达性查询计算。
并行计算是将一个计算任务分配到多个处理机上分别完成,然后通过网络通信进行数据传输,在这一过程中,传输的数据量是系统运行效率和扩展性的瓶颈;而且最终计算任务完成计算后,数据分配在各个处理机上,这时候查询的速度就取决于一个查询评价需要的数据量和通信次数。对于应用于单处理机环境的图可达性查询算法,在并行环境下,处理图数据会导致大量冗余的网络通信数据,以及更慢索引计算速度和查询速度。
如果试图将基于单个处理机的可达性计算方法在并行计算运行环境进行处理,突破单个处理机对大图数据由于处理机性能的限制:内存中无法将整个图全部读入,或是无法将整个索引结构存在内存中完整放置。这些方法如果预计算代价较大,获得结果涵盖的可达性信息就相对更多,索引就更加详细;则对应的查询过程时间代价就相对较小,查询计算速度就相对较快,但是这也会造成索引过大占用空间过多的问题。但是如果图的更新操作过多,并且索引设计并不能增量维护图的可达性索引,这种方案在预计算耗费的代价超出预期——每次进行更新就需要重新计算一次整个图数据,计算的索引由于信息比较完备,通常与图的边成线性关系,计算代价大,索引存储代价也较大;如果使用轻量级索引进行判断,索引计算过程时间相对较短,但是查询过程因为原有的索引并不能涵盖整个图上的数据,就需要对原图的大量数据进行搜索。
发明内容
针对现有技术存在的不足,本发明的目的是提供一种基于关键节点压缩结果,并在压缩结果上使用基于跳表进行传递闭包压缩的索引结构,在这个索引结构的基础上,构建索引并根据索引进行可达性查询判断,达到了保证查询结果的准确性、极大降低并行计算系统在查询时的网路通信代价和查询时间的目的。
本发明采用的技术方案是这样实现的:一种并行环境下的有向图可达性链表生成方法,包括以下步骤:
步骤1:首先将一个有向图数据G分发到各个处理机中,每个处理机中存储有图中的节点及节点所对应的子节点;
步骤2:对分割到各个处理机内的图数据进行压缩,过程为:
步骤2-1:将所有与其他处理机有联系的节点设为主干节点,所有主干节点经过k跳后所能到达的节点形成一个集合R;
步骤2-2:确定集合R的边界节点经k跳后所能到达的节点形成另一个集合,依次计算该另一个集合中每个元素的评价函数,公式为:
r(Cx)=1/|Cx/R|
式中,r(Cx)表示评价函数,Cx为主干节点周围k跳内的节点的集合,x表示待处理的节点,R为当前的主干节点集合的涵盖范围内节点集合;
该另一个集合中评价函数最大值所对应的节点确定为主干节点,此主干节点经过k跳后所能到达的节点均添加至集合R中,重复步骤2-2,直至集合R与有向图数据G中的节点集合相同;
步骤2-3:各个处理器将经步骤2-2压缩处理后的非主干节点信息存储至磁盘上;
对于所有的非主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点索引,作为该非主干节点的附加信息,写入磁盘中,其中,所有主干节点索引形成主干节点集合;
步骤2-4:更新主干节点的邻接表信息,并将结果写回磁盘;
对于所有的主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点信息添加到邻接表中,生成主干图;
步骤3:计算主干图上主干节点的可达性编码;
步骤3-1:计算主干图生成树:首先进行深度优先遍历获得生成树森林,添加虚拟根节点,将整个生成森林转化为一个生成树,并保存被删除的边,并将这些删除的边连接起来;
步骤3-2:对主干图的生成树再进行深度优先遍历,然后根据深度优先遍历访问次序进行编码;
步骤4:利用步骤3-1所保存的删除的边,构建链式索引;
步骤4-1:根据主干节点之间的位置建立关系链:首先任意选择一个节点,建立该节点与其一个可到达的节点间的初始关系链;
步骤4-2:依次处理与初始关系链上节点相邻的节点,分别建立这些相邻节点的关系链;判断相邻节点形成的关系链中是否有与初始关系链中节点相同的节点,若存在,则将获得关系链最长的链作为输出结果,并将相邻节点剩余的部分构建成新关系链;重复执行步骤4-2,直至步骤3-1所有删除的节点都在关系链集合中,完成链式索引的建立;
步骤4-3:标记链索引;主链上保存主链的标号、链所能到达处理机标号、主链所能到达的其他主链标号、主链所能到达从链标号,从链上保存从链标号、从链所能到达的从链标号,从链所能到达的主链标号;
步骤5:在链式索引上建立跳表;
步骤6:各处理机间进行数据通信:各处理机向其他处理机发送跳表信息,并根据接受到的其他处理机的挑表信息来更新自身的跳表信息,实现全图可达性索引的建立。
步骤3-2所述的编码,形式为:(节点第一次访问的次序,节点最后一次访问的次序);
一种根据并行环境下的有向图可达性链表进行查询的方法,包括以下步骤:
步骤1:通过云平台主控节点向各个处理机发送查询数据请求;
步骤2:各处理机根据查询数据在各自磁盘进行查找,若查询数据的源节点和目的节点在同一台处理机中,则执行步骤3,否则执行步骤4;
步骤3:源节点与目的节点位于相同处理器时,计算查询数据的源节点与目的节点的可达性,过程为:
步骤3-1:首先源节点根据原始图数据进行k跳的广度优先搜索,若搜索结果中包含目的节点,则向主控节点发送查询成功消息,则执行步骤1;
步骤3-2:若搜索结果中不包括目的节点,则分别读取源节点和目的节点的非主干节点的附加信息,分别获得源节点和目的节点的主干节点索引集合;
步骤3-3:读取主干节点的可达性编码,根据源节点的主干节点集合和目的节点的主干节点集合,计算每个源节点的主干节点与所有目的节点的主干节点的可达性:
若源节点的主干节点同时满足如下两个条件:
(1)源节点的主干节点第一次访问的次序小于或等于目的节点的主干节点第一次访问的次序;
(2)源节点的主干节点最后一次访问的次序大于或等于目的节点的主干节点最后一次访问的次序;
则说明该源节点的主干节点与该目的节点的主干节点之间是可达的;
则将该可达信息发送给平台主控节点,输出查询结果;若检测后,发现源节点的主干节点集合与目的节点的主干节点集合均不可达,则执行步骤3-4;
步骤3-4:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;
步骤3-5:计算上述两个集合的并集,若该集合不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1;
步骤4:源节点与目的节点位于不同处理器时,可达性的确定过程为:
步骤4-1:源节点所在的处理机读取源节点的非主干节点的附加信息,获得源节点的主干节点索引集合;目的节点所在的处理机读取目的节点的非主干节点的附加信息,获得目的节点的主干节点索引集合;
步骤4-2:源节点所在的处理机处理过程为:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;
目的节点所在的处理机处理过程为:目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;然后,源节点将计算出的集合发送给目的节点所在处理机;
步骤4-3:目的节点所在的处理机计算步骤4-2产生的两个集合的并集,若该集合不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1;
步骤3-4所述的源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合,过程为:
步骤3-4-1:源节点的主干节点根据获得的编码,依次与各关系链头部索引信息进行比较,若源节点的主干节点同时满足如下两个条件:
(1)源节点的主干节点第一次访问的次序小于或等于关系链上各个节点第一次访问的次序的最小值;
(2)源节点的主干节点最后一次访问的次序大于或等于关系链上各个节点最后一次访问的次序的最大值;
则执行步骤3-4-2;
否则搜索下一条关系链;
或者,目的节点的主干节点根据获得的编码,依次与各关系链尾部索引信息进行比较,若目的节点的主干节点同时满足如下两个条件:
(1)目的节点的主干节点第一次访问的次序大于或等于关系链上所有节点第一次访问的次序的最小值;
(2)源节点的主干节点最后一次访问的次序小于或等于关系链上所有节点最后一次访问的次序的最大值;
则执行步骤3-4-2,
否则搜索下一条关系链;
步骤3-4-2:若为源节点的主干节点,则获取跳表头部集合,并将该集合添加到由所有源节点的主干节点可到达的节点组成的一个集合中;
若为目的节点的主干节点,则获取跳表尾部集合,并将该集合添加到由所有可达到目的节点的主干节点组成的另一个集合中;
步骤3-4-3:搜索跳表,直至获得查询结果,并更新步骤3-4-2中产生的两个集合,再执行步骤3-4-1,执行所有关系链都处理完成;
本发明的有益效果:本发明处理海量图数据的可达性查询请求,通过分布式计算平台,可以处理单处理机所不能完成的超大规模图可达性查询。
其独有的技术优势在于:
1.通过设计并行环境下的图可达性压缩技术,极大降低需要处理的图数据大小,降低系统计算负载,使得系统可以处理更大规模的图数据。
2.设计图压缩索引,在保证查询结果的准确性的同时,提高从磁盘上读取数据的速度,间接加快查询速度。
3.通过混合使用编码结构和链式结构,在降低中间结果数据量的同时也保证了查询结果的准确性。
4.通过设计主从双层链式结构以及使用跳表结构建立链查询索引,极大降低并行计算系统在查询时的网路通信代价和查询时间。
附图说明
图1为本发明的实施方式给出的并行图可达性索引计算流程图;
图2为本发明的实施方式给出的基于多重链式索引并行图可达性查询计算流程图;
图3为本发明的实施方式给出的数据分配原始图;
图4为本发明的实施方式给出的HDFS文件管理系统数据分配示意图;
图5为本发明的实施方式给出的图可达性计算原始示例图;
图6为本发明的实施方式给出的图可达性计算原始示意图分配到两个处理机内的示意图;
图7为本发明的实施方式给出的图可达性计算原始图压缩后主干图;
图8为本发明的实施方式给出的非主干图的磁盘存储形式示意图;
图9为本发明的实施方式给出的图生成森林转化为生成树示意图;
图10为本发明的实施方式给出的多层链式索引示意图;
图11为本发明的实施方式给出的链式索引构建示例示意图;
图12为本发明的实施方式给出的链式索引构建结果示意图;
图13为本发明的实施方式给出的链式索引构建示意图;
图14为本发明的实施方式给出的链构建跳表示例示意图;
图15为本发明的实施方式给出的链构建跳表索引标记示例示意图;
图16为本发明的实施方式给出的链构建跳表结果示意图。
具体实施方式
下面结合附图对本发明的实施方式作进一步详细的说明。
在现代社会,对图的应用越发广泛,需要处理的数据量大幅度增加,在这种情况下,仅仅依靠单处理机进行计算已经不能满足现在对图可达性计算任务的需要,现在的计算任务需要采用多处理机并行环境才能完成,所以设计一个适用于并行环境的图可达性计算方法就显得尤为重要。本发明实施方式所采用的方法的主要过程如下:首先通过对图上数据进行压缩,得到一个精简的结果,然后在这个压缩结果上进行计算,基于子孙节点集合和祖先节点集合交集判断可达性的思想,使用跳表进行索引构建并将其应用于传递闭包压缩技术上,通过考虑通信代价、磁盘代价和计算时间代价,设计并实现一种适合并行环境下对大图数据的可达性计算进行可达性判断的计算任务。
对于一个图数据,将整个图进行索引计算然后根据得到的索引进行计算判断可达性。算法处理一个使用邻接表存储的有向图,每个节点存储自己的出边节点索引。首先通过判断这个图的稠密程度,对这个图进行压缩,将图的主干节点提取出来,并且这些主干节点涵盖所有的图上节点,后续计算都通过在主干节点上完成计算。为了降低通信处理模块的处理代价,首先通过各个处理机进行图的生成树计算,消除那些经由消息处理模块处理后发往本处理机内部节点的冗余消息。然后对树进行单重区间编码(singleintervalcode,SITcode),每个节点存储树的深度优先遍历(deepfirstsearch,DFS),其中将遍历过程第一次访问和最后一次访问的访问次序,后继子节点的这两个访问次序就在父节点访问次序的范围内被涵盖。这个索引主要为后续计算中位于同一个处理机中的数据计算而做的预处理计算。对于被处理机分隔开的数据,以及在各个处理机计算生成树的过程中,减去的边,以及这些边通过树结构可以进行连接的全部信息,共同构成一个网络,然后使用链式结构进行数据压缩存储。
在有向图G上,节点集合V,边集合E,所有的节点集合构成一系列链表L0,L1,,,Lk-1,Lk。这些链表中,各个节点之间都是单向连接的,仅仅保存从头节点到尾节点的路径,即只有V0→V1→,,,→Vk-1→Vk这种情况,而且任意两个链表Li,Lj之间节点V的交集是空集。在这种情况下,每个节点都只在链表集合中出现一次。由于链路上并不能包含所有图上边的信息,所以链路之间节点还存在连接,链表集合L和链表之间的连接El共同构成一个网络。
各个节点通过在链上的位置构建索引,这个索引包括节点所在的链以及节点在链上的具体位置;而处理机存储各个链的信息,包括这条链的头结点可以连接到其他链的节点位置,以及整个链上各个有向外的连接的信息。本实施方式分成两个部分——索引预计算和查询计算,其中的核心是索引计算过程。
本实施方式采用一种并行环境下的有向图可达性链表生成方法,其流程如图1所示,包括以下步骤:
步骤1:首先将一个有向图数据G分发到各个处理机中,本实施方式中的有向图数据G,如图3所示的图,包括6条数据,如果按照邻接表形式进行存储,其形式如下所示:
第一条数据为:1:345(第一个位置上存储的是图的顶点,即1,在冒号后面的是这个节点的出边索引)表示有向图G的节点1的子节点包括子节点3,子节点4和子节点5;
第二条数据为:2∶56,表示有向图G的节点2的子节点包括子节点5和子节点6;
第三条数据为:3.∶13,表示有向图G的节点3的子节点包括子节点1和子节点3;
第四条数据为:4∶5,表示有向图G的节点4的子节点包括子节点5;
第五条数据为:5∶1,表示有向图G的节点5的子节点包括子节点1;
第六条数据为:6∶24,表示有向图G的节点6的子节点包括子节点2和子节点4。
将上面的数据分割到两个处理机当中,处理的结果如图4所示。整个图的邻接表划分成多个块分布到三个不同的处理机当中,并且为了系统的高可用性,对数据进行备份。假设计算运行于一个有3台处理机的云计算平台上,每台处理机都搭建了Apache社区的Hadoop平台并且安装了NEU-BSP系统,3台处理机之间通过网络进行互联,数据可以通过网络进行传递。首先通过网络将存储在本地计算机的图数据上传到云计算平台的HDFS文件管理系统上,采用Range划分策略,将整个数据均等地分割到各个处理机上。由于考虑数据安全性和系统稳定性,云平台会采用机架感知策略将数据进行备份,并将数据备份分配到多个处理机当中。
如:本实施方式中以3个处理器为例来存储有向图G的信息,经过HDFS文件管理系统对有向图G进行分割,将第一条数据和第二条数据分发至处理器1中,将第三条和第四条数据分发至处理器2,将第五条和第六条数据分发至处理器3中,如图3所示。为了保证系统的高可用性,在处理器1内,除了存储的第一条数据和第二条数据,还备份有第三条数据和第四条数据的信息。同样的,在处理器2内,除了储存有第三条数据和第四条数据,还备份有第五条和第六条数据,在处理器3内,除了储存有第五条数据和第六条数据,还备份有第一条数据和第二条数据。
步骤2:对分割到各个处理机内的图数据进行压缩。本实施方式以图5的数据为例加以说明:
步骤2-1:将所有与其他处理机有联系的节点设为主干节点,所有主干节点经过k跳后所能到达的节点形成一个集合R,如果假设k=2,则处理过程如下所示:
假设图5上节点6、7、8、9、12、15、17、18是与其他处理机有链接的节点,在在步骤2-1中,将这些节点加入主干节点集合当中,如图6所示。
步骤2-2:确定上述集合的边界节点经k跳后所能到达的节点形成另一个集合,依次计算该另一个集合中每个元素的评价函数,其中公式为:
r(Cx)=1/|Cx/R|
在步骤2-2完成计算之后,首先两个处理机分别计算所有k近邻节点的r(Cx)值,如将其中值最大的9和13选为主干节点。此时判断主干节点集合覆盖范围,由于此时覆盖范围并未覆盖全图,所以重复步骤2-2,直至集合R与有向图数据G中的节点集合相同,得到图6的结果。
步骤2-3:各个处理器将经步骤2-2压缩处理后的非主干节点信息存储至磁盘上;
对于所有的非主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点索引,作为该非主干节点的附加信息,写入磁盘中,其中,所有主干节点索引形成主干节点集合;
对于图5经过步骤2-2和步骤2-3处理之后得到的计算结果图6上的主干节点集合{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18},计算得到图7。
步骤2-4:更新主干节点的邻接表信息,并将结果写回磁盘;
对于所有的主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点信息添加到邻接表中,生成主干图;
每个图上的非主干节点执行两次k跳的广度优先搜索,将搜索到的主干节点作为附加信息,加入非主干节点的邻接表后面,存储到磁盘上,存储按照双层hash索引,按照一定次序写入磁盘,如图8所示。
步骤3:计算主干图上主干节点的可达性编码;
步骤3-1:计算主干图生成树:首先进行深度优先遍历获得生成树森林,添加虚拟根节点,将整个生成森林转化为一个生成树,并保存被删除的边,并将它们连接起来;对于图7的图数据,生成树结果如图9所示;
步骤3-2:对主干图的生成树再进行深度优先遍历,然后根据深度优先遍历访问次序进行编码;
对于图9的数据,对处理机1内部的示例数据,计算得到的结果如下表所示。其中下表中的节点索引为各个节点的索引标号,接下来存储节点在深度优先遍历过程中第一次访问次序和最后一次访问的次序。
节点索引 | 节点深度优先遍历第一次访问次序 | 节点深度优先遍历最后一次访问次序 |
1 | 1 | 6 |
2 | 2 | 6 |
3 | 3 | 4 |
4 | 4 | 5 |
5 | 5 | 6 |
6 | 10 | 13 |
9 | 11 | 13 |
10 | 12 | 13 |
14 | 6 | 10 |
15 | 7 | 10 |
17 | 8 | 10 |
18 | 9 | 10 |
步骤4:利用步骤3-1所保存的删除的边,构建链式索引,链式索引结构如图10所示;
步骤4-1:根据主干节点之间的位置建立关系链:首先任意选择一个节点,建立该节点与其一个可到达的节点间的初始关系链;
以图11的数据为例,首先处理机1内以节点1作为初始节点,处理机2以12为初始节点,建立1-2、12-11两条关系链;
步骤4-2:依次处理与初始关系链上节点相邻节点,分别建立这些相邻节点的关系链;判断相邻节点形成的关系链中是否有与初始关系链中节点相同的节点,若存在,则将获得关系链最长的链作为输出结果,并将相邻节点剩余的部分构建成新关系链;重复执行步骤4-2,直至步骤3-1所有删除的节点都在关系链集合中,完成链式索引的建立;
对于步骤4-1的计算结果,处理机1发现下一个数据在另一个处理机当中,就将此链记为主链;
然后从剩余的节点中选择一个节点4,构建一条新链4-8;
选择链4-8的相邻节点5,加入当前链中,形成链5-4-8,由于5与其他处理机有联系,所以设为主链;
余下的节点9,节点10,分别设为从链,结束处理机1的计算;
处理机2内,11的相邻节点为6,由于6与其他处理机相连,所以节点6无法加入节点11的链;
处理节点6,构建主链6-7,处理机2完成计算;
完整的计算结果如图12所示;
步骤4-3:标记所有链索引,主链上保存主链的标号、链所能到达处理机标号、主链所能到达的其他主链标号、主链所能到达从链标号,从链上保存从链标号、从链所能到达的从链标号,从链所能到达的主链标号;以图12的数据为例,将两个处理机内部各个链进行编码。
其中处理机1内:
主链标号为p1c1:链具体节点1-2;
主链标号为p1c2:链具体节点5-4-8;
从链标号为c1:链具体节点9;
从链标号为c2:链具体节点10;
主链标号为p2c1:链具体节点3;
主链标号为p2c2:链具体节点7-6;
从链标号为c1:链具体节点12-11;
步骤5:在链式索引上建立跳表;以图14的数据为例,对每个节点一0.5的概率提升到上一层,都提高一层,然后对各个节点的编码索引进行标记,得到的结果为图15;
这个过程直到所有节点都不再提升,得到的最终结果类似图16的形式。
步骤6:各处理机间进行数据通信:各处理机向其他处理机发送跳表信息,并根据接受到的其他处理机的挑表信息来更新自身的跳表信息,实现全图可达性索引的建立。
以图12的数据为例,主链p1c1能够到达处理机2的主链p2c1、p2c2和p1c2;
而相应的,处理机2中的p2c1就可以被p1c1到达,p2c2就可以被p2c1、和p1c1到达;
一种根据并行环境下的有向图可达性链表进行查询的方法,如图2所示,包括以下步骤:
步骤1:通过云平台主控节点向各个处理机发送查询数据请求;以图6的数据为例,用户向云平台主控节点发送如下查询请求:
(A,B)(C,D)(E,F),主控节点将这三个查询分发到处理系统当中;
步骤2:各处理机根据查询数据在各自磁盘进行查找,若查询数据的源节点和目的节点在同一台处理机中,则执行步骤3,否则执行步骤4;
由于之前提交的查询(A,B)(C,D)(E,F)三个查询都位于处理机1内,所以处理转到步骤3;
步骤3:计算查询数据的源节点与目的节点的可达性,过程为:
步骤3-1:首先源节点根据原始图数据进行K跳的广度优先搜索,若搜索结果中包含止的节点,则向主控节点发送查询成功消息,则执行步骤1;
在此次计算过程中,将k设定为2;节点A、C、E三个节点分别进行2跳限制的广度优先搜索;
其中,对于查询(A,B),节点A在两跳内搜索到节点B;所以向主控节点返回查询成功的信息;
查询(C,D)(E,F)两个查询,节点C、D在进行2跳的广度优先搜索之后,没有找到对应的节点,转到步骤3-2;
步骤3-2:若搜索结果中不包括目的节点,则分别读取源节点和目的节点的非主干节点的附加信息,分别获得源节点和目的节点的主干节点索引集合;
对于查询(C,D)(E,F),节点C、D、E、F四个节点读取各自的主干节点索引集合,其中C和E读取的是出边主干节点集合,而D和F读取的是入边主干节点集合;
读取的结果如下所示
非主干节点节点索引 | 主干节点集合类型 | 主干节点集合 |
C | 出边 | {1} |
D | 入边 | {5} |
E | 出边 | {3} |
F | 入边 | {4} |
步骤3-3:读取主干节点的可达性编码,根据源节点的主干节点集合和目的节点的主干节点集合,计算每个源节点的主干节点与所有目的节点的主干节点的可达性:
若源节点的主干节点同时满足如下两个条件:
(1)源节点的主干节点第一次访问的次序小于或等于目的节点的主干节点第一次访问的次序;
(2)源节点的主干节点最后一次访问的次序大于或等于目的节点的主干节点最后一次访问的次序;
则说明该源节点的主干节点与该目的节点的主干节点之间是可达的;
则将该可达信息发送给平台主控节点,输出查询结果;若检测后,发现源节点的主干节点集合与目的节点的主干节点集合均不可达,则执行步骤3-4;
从获得的处理机1内部节点的编码信息可以得到本次计算所需的数据如下所示:
节点索引 | 节点深度优先遍历第一次访问次序 | 节点深度优先遍历最后一次访问次序 |
1 | 1 | 6 |
5 | 5 | 6 |
3 | 3 | 4 |
4 | 4 | 5 |
通过之前的两个判断条件,明显可以看出查询(1,5)是连通的,而查询(3,4)是不连通的,所以查询(C,D)返回查找成功的结果,而查询(E,F)转到步骤3-4当中去;
步骤3-4:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;
以图12的数据为例,查询为(G,H)这两个查询通过之前的计算都无法得到最终结果,在步骤3-4中,计算源节点G的主干节点可到达的节点组成的一个集合;首先节点G搜索处理机1内的各个链,通过p1c2链头的信息,判断出计算应该继续在这个链上进行,主链p1c2在除了编码信息之外,还保存链可到达的节点集合,此集合为{p1c2链上全部节点};
在搜索链的过程中,通过节点的编码,判断如下关系是否同时成立:
(1)源节点的主干节点第一次访问的次序小于或等于目的节点的主干节点第一次访问的次序;
(2)源节点的主干节点最后一次访问的次序大于或等于目的节点的主干节点最后一次访问的次序;
如果成立,就相当于搜素成功,对链表的遍历过程就结束;
再搜索链p1c2过程中,首先判断节点5和节点G是否满足上述编码关系,由图中链接看出不满足这一关系;然后搜素下一个节点,并且更新当前节点的在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合为{p1c2链上节点{4,8}};
然后搜索下一个节点,满足上面编码条件;所以查询结束,返回集合{p1c2链上节点{4,8},链c2全部节点};节点G的计算结束。
对于节点H,进行类似的计算,首先节点H搜素所有链,判断出应该搜素链p1c1和c2,其中在链p1c1上,搜索得到结果为{链p1c1节点{4,8}};
在链c2上,搜素的结果为{链c1全部节点};由于计算以主链上节点为准,所以再次计算集合{链c1全部节点}在各个主链上的所有可达到目的节点的主干节点组成的集合,通过读取链c2上的信息,得到的结果为{链p1c1节点{5,4},链p2c1全部节点,链p2c2全部节点,链p1c1全部节点};此时节点H的计算结束。
步骤3-5:计算上述两个集合的并集,若该集合不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1;
通过步骤3-4的结果,节点G的集合为{链p1c1所有节点{4,8}};节点H的集合为{链p1c1节点{5,4},链p2c1全部节点,链p2c2全部节点,链p1c1全部节点};
计算这两个集合的并集为{链p1c1节点{4}};此集合不为空,所以向主控节点返回查询成功的结果。
步骤4:源节点与目的节点位于不同处理器时,可达性的确定过程为:
步骤4-1:源节点所在的处理机读取源节点的非主干节点的附加信息,获得源节点的主干节点索引集合;目的节点所在的处理机读取目的节点的非主干节点的附加信息,获得目的节点的主干节点索引集合;
以图12为例,假设查询对应主干节点为(J,I);
步骤4-2:源节点所在的处理机处理过程为:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;
目的节点所在的处理机处理过程为:目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;然后,目的节点将计算出的集合发送给源节点所在处理机;
以查询(J,I)为例,J的主干节点可到达的节点组成的集合为{链p2c2全部节点,链p1c2全部节点};
I的所有可达到目的节点的主干节点组成的集合;{链p2c2全部节点,链p1c2节点{5},链p2c1全部节点,链p1c1全部节点};
处理机2将集合{链p2c2全部节点,链p1c2全部节点};发送到处理机1内;
步骤4-3:目的节点所在的处理机计算步骤4-2产生的两个集合的并集,若该集合不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1;
处理机1内进行计算,得出两个集合的并集{链p1c2节点{5},链p2c2全部节点};
由于上述集合不为空,所以向主控节点返回查询成功的结果。
虽然以上描述了本发明的具体实施方式,但是本领域内的熟练的技术人员应当理解,这些仅是举例说明,可以对这些实施方式做出多种变更或修改,而不背离本发明的原理和实质。本发明的范围仅由所附权利要求书限定。
Claims (4)
1.一种并行环境下的有向图可达性链表生成方法,其特征在于:包括以下步骤:
步骤1:首先将一个有向图数据G分发到各个处理机中,每个处理机中存储有图中的节点及节点所对应的子节点;
步骤2:对分割到各个处理机内的图数据进行压缩,过程为:
步骤2-1:将所有与其他处理机有联系的节点设为主干节点,所有主干节点经过k跳后所能到达的节点形成一个集合R;
步骤2-2:确定集合R的边界节点经k跳后所能到达的节点形成另一个集合,依次计算该另一个集合中每个元素的评价函数,公式为:
r(Cx)=1/|Cx/R|
式中,r(Cx)表示评价函数,Cx为主干节点周围k跳内的节点的集合,x为待处理节点,R为当前的主干节点集合的涵盖范围集合;
该另一个集合中评价函数最大值所对应的节点确定为主干节点,此主干节点经过k跳后所能到达的节点均添加至集合R中,重复步骤2-2,直至集合R与有向图数据G中的节点集合相同;
步骤2-3:各个处理器将经步骤2-2压缩处理后的非主干节点信息存储至磁盘上;
对于所有的非主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点索引,作为该非主干节点的附加信息,写入磁盘中,其中,所有主干节点索引形成主干节点集合;
步骤2-4:更新主干节点的邻接表信息,并将结果写回磁盘;
对于所有的主干节点,在各个处理机当中进行深度为k的广度优先搜索,将k跳内的所有主干节点信息添加到邻接表中,生成主干图;
步骤3:计算主干图上主干节点的可达性编码;
步骤3-1:计算主干图生成树:首先进行深度优先遍历获得生成树森林,添加虚拟根节点,将整个生成森林转化为一个生成树,并保存被删除的边,并将这些删除的边连接起来;
步骤3-2:对主干图的生成树再进行深度优先遍历,然后根据深度优先遍历访问次序进行编码;
步骤4:利用步骤3-1所保存的删除的边,构建链式索引;
步骤4-1:根据主干节点之间的位置建立关系链:首先任意选择一个节点,建立该节点与其一个可到达的节点间的初始关系链;
步骤4-2:依次处理与初始关系链上节点相邻的节点,分别建立这些相邻节点的关系链;判断相邻节点形成的关系链中是否有与初始关系链中节点相同的节点,若存在,则将获得关系链最长的链作为输出结果,并将相邻节点剩余的部分构建成新关系链;重复执行步骤4-2,直至步骤3-1所有删除的节点都在关系链集合中,完成链式索引的建立;
步骤4-3:标记链索引;主链上保存主链的标号、链所能到达处理机标号、主链所能到达的其他主链标号、主链所能到达从链标号,从链上保存从链标号、从链所能到达的从链标号,从链所能到达的主链标号;
步骤5:在链式索引上建立跳表;
步骤6:各处理机间进行数据通信:各处理机向其他处理机发送跳表信息,并根据接受到的其他处理机的跳表信息来更新自身的跳表信息,实现全图可达性索引的建立。
2.根据权利要求1所述的并行环境下的有向图可达性链表生成方法,其特征在于:步骤3-2所述的编码形式为:
(节点第一次访问的次序,节点最后一次访问的次序)。
3.一种并行环境下的有向图可达性链表查询方法,根据权利要求1所述的方法建立并行环境下的有向图可达性链表,其特征在于:查询链表的过程为:
包括以下步骤:
步骤1:通过云平台主控节点向各个处理机发送查询数据请求;
步骤2:各处理机根据查询数据在各自磁盘进行查找,若查询数据的源节点和目的节点在同一台处理机中,则执行步骤3,否则执行步骤4;
步骤3:源节点与目的节点位于相同处理器时,计算查询数据的源节点与目的节点的可达性,过程为:
步骤3-1:首先源节点根据原始图数据进行k跳的广度优先搜索,若搜索结果中包含目的节点,则向主控节点发送查询成功消息,则执行步骤1;
步骤3-2:若搜索结果中不包括目的节点,则分别读取源节点和目的节点的非主干节点的附加信息,分别获得源节点和目的节点的主干节点索引集合;
步骤3-3:读取主干节点的可达性编码,根据源节点的主干节点集合和目的节点的主干节点集合,计算每个源节点的主干节点与所有目的节点的主干节点的可达性:
若源节点的主干节点同时满足如下两个条件:
(1)源节点的主干节点第一次访问的次序小于或等于目的节点的主干节点第一次访问的次序;
(2)源节点的主干节点最后一次访问的次序大于或等于目的节点的主干节点最后一次访问的次序;
则说明该源节点的主干节点与该目的节点的主干节点之间是可达的;
则将该可达信息发送给平台主控节点,输出查询结果;若检测后,发现源节点的主干节点集合与目的节点的主干节点集合均不可达,则执行步骤3-4;
步骤3-4:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;
步骤3-5:计算上述两个集合的并集,若该并集不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1;
步骤4:源节点与目的节点位于不同处理器时,可达性的确定过程为:
步骤4-1:源节点所在的处理机读取源节点的非主干节点的附加信息,获得源节点的主干节点索引集合;目的节点所在的处理机读取目的节点的非主干节点的附加信息,获得目的节点的主干节点索引集合;
步骤4-2:源节点所在的处理机处理过程为:源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;
目的节点所在的处理机处理过程为:目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合;然后,源节点将计算出的集合发送给目的节点所在处理机;
步骤4-3:目的节点所在的处理机计算步骤4-2产生的两个集合的并集,若该集合不为空,则说明源节点与目的节点之间是可达的,输出查询成功的结果;否则,输出查询失败的结果,执行步骤1。
4.根据权利要求3所述的并行环境下的有向图可达性链表查询方法,其特征在于:步骤3-4所述的源节点的主干节点集合在链式索引上计算所有源节点的主干节点可到达的节点组成的一个集合;目的节点的主干节点集合在链式索引上计算所有可达到目的节点的主干节点组成的另一个集合,具体过程为:
步骤3-4-1:源节点的主干节点根据获得的编码,依次与各关系链头部索引信息进行比较,若源节点的主干节点同时满足如下两个条件:
(1)源节点的主干节点第一次访问的次序小于或等于关系链上各个节点第一次访问的次序的最小值;
(2)源节点的主干节点最后一次访问的次序大于或等于关系链上各个节点最后一次访问的次序的最大值;
则执行步骤3-4-2;
否则搜索下一条关系链;
或者,目的节点的主干节点根据获得的编码,依次与各关系链尾部索引信息进行比较,若目的节点的主干节点同时满足如下两个条件:
(1)目的节点的主干节点第一次访问的次序大于或等于关系链上所有节点第一次访问的次序的最小值;
(2)源节点的主干节点最后一次访问的次序小于或等于关系链上所有节点最后一次访问的次序的最大值;
则执行步骤3-4-2,
否则搜索下一条关系链;
步骤3-4-2:若为源节点的主干节点,则获取跳表头部集合,并将该集合添加到由所有源节点的主干节点可到达的节点组成的一个集合中;
若为目的节点的主干节点,则获取跳表尾部集合,并将该集合添加到由所有可达到目的节点的主干节点组成的另一个集合中;
步骤3-4-3:搜索跳表,直至获得查询结果,并更新步骤3-4-2中产生的两个集合,再执行步骤3-4-1,执行所有关系链都处理完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310317126.7A CN103399902B (zh) | 2013-07-23 | 2013-07-23 | 一种并行环境下的有向图可达性链表生成及查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310317126.7A CN103399902B (zh) | 2013-07-23 | 2013-07-23 | 一种并行环境下的有向图可达性链表生成及查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103399902A CN103399902A (zh) | 2013-11-20 |
CN103399902B true CN103399902B (zh) | 2016-05-25 |
Family
ID=49563531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310317126.7A Active CN103399902B (zh) | 2013-07-23 | 2013-07-23 | 一种并行环境下的有向图可达性链表生成及查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103399902B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103618602B (zh) * | 2013-10-21 | 2017-01-25 | 北京交通大学 | 一种基于堆的跳表认证路径产生的新方法 |
JP6243045B2 (ja) * | 2013-12-30 | 2017-12-06 | 華為技術有限公司Huawei Technologies Co.,Ltd. | グラフデータクエリ方法および装置 |
CN103780692B (zh) * | 2014-01-13 | 2017-01-11 | 中国科学院计算技术研究所 | 一种键值存储的数据访问方法及其系统 |
CN105530011A (zh) * | 2014-09-30 | 2016-04-27 | 华东师范大学 | 一种基于三角形统计的图数据压缩方法和查询方法 |
CN106033442B (zh) * | 2015-03-16 | 2019-04-02 | 北京大学 | 一种基于共享内存体系结构的并行广度优先搜索方法 |
CN104765848B (zh) * | 2015-04-17 | 2017-12-01 | 中国人民解放军空军航空大学 | 混合云存储中支持结果高效排序的对称可搜索加密方法 |
CN104915427B (zh) * | 2015-06-15 | 2018-01-05 | 华中科技大学 | 一种基于广度优先遍历的图处理优化方法 |
CN104954477B (zh) * | 2015-06-23 | 2018-06-12 | 华中科技大学 | 一种基于并发改进的大规模图数据流式划分方法及系统 |
US9971800B2 (en) * | 2016-04-12 | 2018-05-15 | Cisco Technology, Inc. | Compressing indices in a video stream |
CN106202167B (zh) * | 2016-06-21 | 2019-10-18 | 南开大学 | 一种基于结构概要模型的有向标签图自适应索引构建方法 |
CN107545074B (zh) * | 2017-10-11 | 2021-01-05 | 东南大学 | 一种实现删除有向路网图中部分非连通节点的方法 |
CN107948334B (zh) * | 2018-01-09 | 2019-06-07 | 无锡华云数据技术服务有限公司 | 基于分布式存储系统的数据处理方法 |
US10747433B2 (en) * | 2018-02-21 | 2020-08-18 | Wisconsin Alumni Research Foundation | Computer architecture for high-speed, graph-traversal |
CN108595437B (zh) * | 2018-05-04 | 2022-06-03 | 和美(深圳)信息技术股份有限公司 | 文本查询纠错方法、装置、计算机设备和存储介质 |
CN109656568B (zh) * | 2018-12-28 | 2022-04-05 | 黑龙江省工业技术研究院 | 按需的可约程序控制流图图可达性索引方法 |
CN109885621B (zh) * | 2019-01-07 | 2020-12-29 | 北京科技大学 | 一种数据存储实体关系图提取方法 |
CN109885733B (zh) * | 2019-01-18 | 2020-09-15 | 清华大学 | 针对目标生成树查询的图数据压缩方法及装置 |
CN111723246B (zh) * | 2019-03-20 | 2024-04-05 | 京东科技控股股份有限公司 | 一种数据处理的方法、装置和存储介质 |
CN110083603B (zh) * | 2019-04-17 | 2021-02-12 | 武汉初心科技有限公司 | 一种基于邻接表实现节点路径的查询方法及系统 |
CN111046002B (zh) * | 2019-12-06 | 2022-08-02 | 浪潮(北京)电子信息产业有限公司 | 图数据的数据压缩方法、解压缩方法、系统及相关装置 |
CN113392143B (zh) * | 2021-07-14 | 2022-08-02 | 浙江工商大学 | 一种面向多关系图的可达性查询索引的构建与处理方法 |
CN115374299B (zh) * | 2022-10-24 | 2023-02-03 | 杭州悦数科技有限公司 | 分布式图数据库中可达性索引的分层构建方法和系统 |
CN117290560B (zh) * | 2023-11-23 | 2024-02-23 | 支付宝(杭州)信息技术有限公司 | 图计算任务中获取图数据的方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6117185A (en) * | 1997-09-24 | 2000-09-12 | International Business Machines Corporation | Skip list data storage during compilation |
CN101364203A (zh) * | 2008-09-19 | 2009-02-11 | 南京大学 | 一种面向隐蔽通道分析的系统分析和划分方法 |
CN101833499A (zh) * | 2010-04-07 | 2010-09-15 | 南京航空航天大学 | 一种基于可达树的软件测试验证方法 |
CN101901188B (zh) * | 2010-07-23 | 2012-02-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
-
2013
- 2013-07-23 CN CN201310317126.7A patent/CN103399902B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN103399902A (zh) | 2013-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103399902B (zh) | 一种并行环境下的有向图可达性链表生成及查询方法 | |
CN106709035B (zh) | 一种电力多维全景数据的预处理系统 | |
CN102810113B (zh) | 一种针对复杂网络的混合型聚类方法 | |
CN104392010B (zh) | 一种子图匹配的查询方法 | |
CN109241093A (zh) | 一种数据查询的方法、相关装置及数据库系统 | |
CN111371856B (zh) | 云计算任务调度方法、装置、云计算系统及服务器 | |
CN112700124B (zh) | 多层交通网络mrwc节点重要性排序方法、系统、电子设备及计算机可读存储介质 | |
CN104298598B (zh) | 分布式环境下rdfs本体的调试方法 | |
Zhao et al. | Frequent subgraph mining based on Pregel | |
CN111355696A (zh) | 一种报文识别方法、装置、dpi设备及存储介质 | |
Zhang et al. | SUMMA: subgraph matching in massive graphs | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
CN110018997A (zh) | 一种基于hdfs的海量小文件存储优化方法 | |
Ghesmoune et al. | G-stream: Growing neural gas over data stream | |
Liu et al. | Simga: A simple and effective heterophilous graph neural network with efficient global aggregation | |
CN117076523B (zh) | 一种用于本地的数据时序存储方法 | |
CN109992593A (zh) | 一种基于子图匹配的大规模数据并行查询方法 | |
CN111258968B (zh) | 企业冗余数据清理方法、装置及大数据平台 | |
CN115544029A (zh) | 一种数据处理方法及相关装置 | |
CN115470236A (zh) | 一种多子图匹配方法、装置及设备 | |
CN116760661A (zh) | 数据存储方法、装置、计算机设备、存储介质和程序产品 | |
CN103336810A (zh) | 一种基于多核计算机的配电网拓扑分析方法 | |
CN105389337A (zh) | 用于统计显著性模式的搜索大数据空间的方法 | |
CN111369052B (zh) | 简化路网ksp优化算法 | |
CN114791788A (zh) | 一种基于区块链的数据存储方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |