一种基于滑动窗口的大规模动态图划分方法与流程

文档序号:18834185发布日期:2019-10-09 04:33阅读:371来源:国知局
一种基于滑动窗口的大规模动态图划分方法与流程

本发明属于计算机技术领域,具体涉及一种基于滑动窗口的大规模动态图划分方法。



背景技术:

图作为一种抽象的数据结构,可以表达复杂的结构和丰富的语义,在社交网络、通信和科学计算等诸多领域获得了广泛应用。近年来随着数据规模的不断增长,必须借助分布式图计算系统才能进行图数据的分析和处理。

图划分是将大规模图结构数据分布到由大量计算节点组成的分布式计算系统中的技术,是实现分布式图计算的基础。在图划分中,如果一条边的两个顶点被划分到不同的计算节点上,则称这条边为割边。图划分应最小化割边数量并实现计算节点间的负载均衡。

当前,很多应用场景的图数据会经常发生变化,如在社交网络中用户及相关关系的增加、删除等,这类图称为动态图。现有的图划分算法大多是针对静态图的,在划分前需要将图数据全部加载到内存后再进行划分,此类算法用于动态图划分时易产生巨大的计算开销。



技术实现要素:

针对现有技术中存在的上述技术问题,本发明提出了一种基于滑动窗口的大规模动态图划分方法,设计合理,克服了现有技术的不足,具有良好的效果。

为了实现上述目的,本发明采用如下技术方案:

一种基于滑动窗口的大规模动态图划分方法,包括如下步骤:

步骤1:增加顶点;具体包括如下步骤:

输入为待增加顶点的集合svertex、当前k个分区pi(i=1,2,…,k)的各个分区的顶点集合;

步骤1.1:置指定|wvertex|的上限为lvertex;

其中,wvertex为将被划分的候选顶点集合,其顶点来自svertex;

步骤1.2:取n=min{|svertex|,lvertex-|wvertex|},即|svertex|和lvertex-|wvertex|的最小值,将svertex中的前n个顶点增加到wvertex中,并从svertex中删除这些顶点;

步骤1.3:如果则输出划分结果,并结束划分流程;否则转步骤1.4;

步骤1.4:取v=argmax{du|u∈wvertex,du是顶点u的度数即与u相邻接的顶点的个数},即取wvertex中度数最大的顶点v,如果有多个度数相同且度数最大的顶点,则任取其中一个;

步骤1.5:取v=q=r={v};v为被选中划分到某分区的顶点集合,q为顶点队列;r为与v中的顶点相邻的所有顶点的集合;

步骤1.6:若则转步骤1.8;否则从取q中取出第1个顶点u,并从q中删除该顶点;

步骤1.7:取q=q∪{w|(u,w)是图的一条边,且r=r∪{w|(u,w)是图的一条边},然后转步骤1.6;

步骤1.8:取v=v∪{w|w∈r,且

步骤1.9:对每个分区pi(i=1,2,…,k),计算其中,ci为将顶点或边划分到第i个分区的代价;是拥有最多顶点的分区的顶点个数,α为计算ci时分区负载和割边数量的权重系数,0<α<1;

用于衡量分区负载情况,用户衡量割边数量;

步骤1.10:取m=argmin{ci|i=1,2,…,k},即cm是所有{ci|i=1,2,…,k}中的最小值;

步骤1.11:将v中的所有顶点划分到分区pm中;pm为与最小值cm对应的分区;

步骤1.12:取wvertex=wvertex-v,然后转步骤1.2;

步骤2:增加边;具体包括如下步骤:

输入为待增加边的集合sedge、当前k个分区pi(i=1,2,…,k)的各个分区的顶点集合;

前提:sedge中边的所有顶点都已经划分完毕;

步骤2.1:置指定|wedge|的上限为ledge;

步骤2.2:取n=min{|sedge|,ledge-|wedge|},即|sdege|和ledge-|wedge|的最小值,将sedge中的前n条边增加到wedge中,并从sedge中删除这些边;

步骤2.3:如果则输出划分结果,并结束划分流程;否则转步骤2.4;

步骤2.4:对每个在wedge中的顶点v,取ev={u|(u,v)∈wedge};ev为与顶点v相邻接的且属于wedge的顶点集合;

步骤2.5:取v=argmax{|ev|},即取wedge中邻接顶点个数最多的顶点v,如果有多个满足条件的顶点,则任取其中一个;

步骤2.6:取t={w|(v,w)是图的一条边};t为与wedge中的某个顶点相关联的所有顶点的集合;

步骤2.7:对每个分区pi(i=1,2,…,k),如果v∈pi,则否则其中maxj=1,2,…,k{|pj|}是拥有最多顶点的分区的顶点个数;

步骤2.8:取m=argmin{ci|i=1,2,…,k},即cm是所有{ci|i=1,2,…,k}中的最小值;

步骤2.9:将v转移到分区pm中;

步骤2.10:对于ev中的每一条边(u,v),u∈pi,v∈pj,若i≠j,则将(u,v)划分到pi和pj中;否则将(u,v)划分到pi中;

步骤2.11:wedge=wedge-ev,转步骤2.2。

本发明所带来的有益技术效果:

本发明在增加顶点时,在滑动窗口中优先选取度数较高的顶点进行划分,既能够使得度数小的顶点向度数大的顶点聚集,又可以在每次划分时将尽可能多的顶点划分到适合的分区中,在实现负载均衡的同时降低了割边数量,从而极大减少图计算过程中的通信成本。

本发明在增加边时,在滑动窗口中优先选取邻接边最多的顶点进行划分,既能够有效避免频繁的顶点迁移,又可以在每次划分时将尽可能多的邻接顶点划分到合适的分区中,从而极大减少了顶点的迁移次数,提高了划分效率,并实现了负载均衡和割边数量的最小化。

附图说明

图1为增加顶点的流程图。

图2为增加边的流程图。

图3为增加顶点时的窗口结构示意图。

图4为增加边时的窗口结构示意图。

图5为增加顶点下的滑动窗口模型示意图。

图6为增加顶点实例图。

图6(a)-(d)分别表示图5所示的a状态对应的顶点窗口中的信息、增加顶点前已经划分好的图结构数据的分区状态、采用流式图划分算法增加v8和v9后的划分结果,以及采用本发明所提出的算法增加v8和v9后的划分结果示意图。

图7为增加边实例图。

图7(a)-(d)分别表示增加边时的窗口信息、增加边之前已经划分好的图结构数据的分区状态、采用流式图划分算法增加(v1,v3)后的划分结果,以及采用本发明所提出的算法增加v1及其关联边后的划分结果示意图。

具体实施方式

下面结合附图以及具体实施方式对本发明作进一步详细说明:

一种基于滑动窗口的大规模动态图划分方法,包括如下步骤:

步骤1:增加顶点;其流程如图1所示,具体包括如下步骤:

输入为待增加顶点的集合svertex、当前k个分区pi(i=1,2,…,k)的各个分区的顶点集合;

步骤1.1:置指定|wvertex|的上限为lvertex;

其中,wvertex为将被划分的候选顶点集合,其顶点来自svertex;

步骤1.2:取n=min{|svertex|,lvertex-|wvertex|},即|svertex|和lvertex-|wvertex|的最小值,将svertex中的前n个顶点增加到wvertex中,并从svertex中删除这些顶点;

步骤1.3:如果则输出划分结果,并结束划分流程;否则转步骤1.4;

步骤1.4:取v=argmax{du|u∈wvertex,du是顶点u的度数即与u相邻接的顶点的个数},即取wvertex中度数最大的顶点v,如果有多个度数相同且度数最大的顶点,则任取其中一个;

步骤1.5:取v=q=r={v};v为被选中划分到某分区的顶点集合,q为顶点队列;r为与v中的顶点相邻的所有顶点的集合;

步骤1.6:若则转步骤1.8;否则从取q中取出第1个顶点u,并从q中删除该顶点;

步骤1.7:取q=q∪{w|(u,w)是图的一条边,且r=r∪{w|(u,w)是图的一条边},然后转步骤1.6;

步骤1.8:取v=v∪{w|w∈r,且

步骤1.9:对每个分区pi(i=1,2,…,k),计算其中,ci为将顶点或边划分到第i个分区的代价;是拥有最多顶点的分区的顶点个数,α为计算ci时分区负载和割边数量的权重系数,0<α<1;用于衡量分区负载情况,用户衡量割边数量;

步骤1.10:取m=argmin{ci|i=1,2,…,k},即cm是所有{ci|i=1,2,…,k}中的最小值;

步骤1.11:将v中的所有顶点划分到分区pm中;pm为与最小值cm对应的分区;

步骤1.12:取wvertex=wvertex-v,然后转步骤1.2;

步骤2:增加边;其流程如图2所示,具体包括如下步骤:

输入为待增加边的集合sedge、当前k个分区pi(i=1,2,…,k)的各个分区的顶点集合;

前提:sedge中边的所有顶点都已经划分完毕;

步骤2.1:置指定|wedge|的上限为ledge;

步骤2.2:取n=min{|sedge|,ledge-|wedge|},即|sedge|和ledge-|wedge|的最小值,将sedge中的前n条边增加到wedge中,并从sedge中删除这些边;

步骤2.3:如果则输出划分结果,并结束划分流程;否则转步骤2.4;

步骤2.4:对每个在wedge中的顶点v,取ev={u|(u,v)∈wedge};ev为与顶点v相邻接的且属于wedge的顶点集合;

步骤2.5:取v=argmax{|ev|},即取wedge中邻接顶点个数最多的顶点v,如果有多个满足条件的顶点,则任取其中一个;

步骤2.6:取t={w|(v,w)是图的一条边};t为与wedge中的某个顶点相关联的所有顶点的集合;

步骤2.7:对每个分区pi(i=1,2,…,k),如果v∈pi,则否则其中maxj=1,2,...,k{|pj|}是拥有最多顶点的分区的顶点个数;

步骤2.8:取m=argmin{ci|i=1,2,…,k},即cm是所有{ci|i=1,2,…,k}中的最小值;

步骤2.9:将v转移到分区pm中;

步骤2.10:对于ev中的每一条边(u,v),u∈pi,v∈pj,若i≠j,则将(u,v)划分到pi和pj中;否则将(u,v)划分到pi中;

步骤2.11:wedge=wedge-ev,转步骤2.2。

上述方法中,涉及的符号及含义见表1。

表1主要符号及其含义

本方法需要构建滑动窗口,增加顶点时的窗口结构如图3所示,增加顶点时的滑动窗口由lvertex个顶点组成,这些顶点通过度数进行排序,每个顶点包括3个字段:

(1)主键(primarykey):在滑动窗口中每个待划分顶点对应一个主键。

(2)已划分邻接顶点(secondarykey):与主键相邻接的且已经划分到某个分区中的顶点列表。

(3)未划分邻接顶点(unassignedkey):与主键相邻接的且尚未划分的、在滑动窗口中的顶点列表。

增加边时的窗口结构如图4所示,增加边时的滑动窗口由ledge条边组成,所有边按照邻接表的方式组成,其中邻接表的表头顶点按照wedge中邻接点的个数进行排序,即包含:

(1)主键(primarykey):滑动窗口中每个顶点对应一个主键。

(2)邻接顶点(secondarykey):与主键相关联的且在滑动窗口中的边对应的其它顶点。

很多应用场景的图都是动态变化的,下面结合附图和具体实例对本发明在增加顶点和增加边的具体实施做进一步说明。

第一种情况:增加顶点。

增加顶点下的滑动窗口模型如图5所示,svertex为顶点流;a、b代表在对wvertex填充(通过窗口向右滑动)顶点后的状态。

根据步骤1.1,首先初始化窗口wvertex,指定lvertex为4。

根据步骤1.2,取n=min{|svertex|,lvertex-|wvertex|},将svertex中的前n个顶点增加到wvertex中,达到a状态,此时wvertex中的顶点为{v8,v9,v10,v11},窗口信息如图6(a)所示。图6(b)表示在增加顶点前,已经划分好的图结构数据的分区状态,其中虚线圆p1和p2为2个分区,空心圆v0、v1、v2、v3、v4、v5、v6和v7表示图结构数据的8个顶点,顶点之间的实线表示图结构数据中的边。

根据步骤1.3到1.5,从窗口中取出度数最大的顶点,其中v8度数为4,则选取v=v8并加入到v,q,r中。

根据步骤1.6到1.8,q={v8}不为空,从q中取出第一个顶点u=v8并从q中删除v8,遍历u的邻居顶点v1,v3,v5,v9,将v9增加到q中,将v1,v3,v5,v9增加到r中。然后继续执行上述步骤,当q为空时结束。最后将r中未划分的顶点增加到v中。此时v={v8,v9},r={v0,v1,v3,v5,v7}。

根据步骤1.9到1.11,计算将v中的顶点v8,v9分别增加到p1,p2产生的开销c1,c2,满足c1>c2,即目标分区pm=p2,将v8,v9增加到p2中,得到的结果如图6(d)所示,划分后产生的割边数为3。相比于流式图划分算法得出来的结果(图6(c)),割边数减少了2条。

根据步骤1.12,将顶点v8,v9从wvertex中删除。图5所示的a状态下的v8,v9划分完毕,转步骤1.2。此时n为2,将svertex中的顶点v12,v13增加到wvertex中,达到图5中b状态,按照上述步骤直到将svertex中所有顶点全部划分到图中,输出划分结果并结束。

第二种情况:增加边。

在增加边的情况下,步骤2.1到2.3,2.11和增加顶点的情况类似,即从sedge中不断增加边到wedge中,当wedge中边数达到ledge,或wedge不为空时,选取顶点转移和将相关的边划分到相应分区中;当wedge为空时,输出划分结果并结束。这里主要叙述在窗口wedge下,选取顶点转移和增加相关边的过程(步骤2.4到步骤2.10),指定ledge为3。

根据步骤2.4到2.5,从wedge中选取邻接顶点个数最多的顶点v,由图7(a)窗口信息可得,v=v1。

根据步骤2.6,将v1的所有邻接顶点放入t中。图7(b)为增加边之前已经划分好的图结构数据的分区状态示意图,因此将在图7(a)、图7(b)中所有与v1相邻接的顶点v2,v5,v3,v4,v6都放到t中。此时,t={v2,v3,v4,v5,v6}。

根据步骤2.7到2.10,计算将v1转移到p1,p2产生的开销c1,c2,满足c1>c2,即目标分区pm=p2,由于v1已经在分区p2中,那么不再进行划分。当将ev={(v1,v3),(v1,v4),(v1,v6)}中的边划分到分区中后,得到的划分结果如图7(d)所示。

在已有的流式图划分方法中,大多用割边数作为转移判断的主要依据。在图7(b)中增加(v1,v3)后,为了降低割边数,会将v1转移到p1中(图7(c))。继续增加(v1,v4)和(v1,v6)后,v1又会转移回原分区p2,达到和本发明相同的划分结果,但却多出了2次顶点转移的开销,划分效率降低。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1