首页> 中国专利> 一种基于磁盘的大规模图数据中寻找强连通分量的方法

一种基于磁盘的大规模图数据中寻找强连通分量的方法

摘要

本发明公开了一种基于磁盘的大规模图数据中寻找强连通分量的方法,属于大数据领域的图计算与处理技术领域。本发明采取的措施主要包括:使用任务级的包装来组织整个计算流程,每个任务使用不同的算法来处理一部分数据,最大化每个算法的优势和整体计算速度;提出了一种基于磁盘的处理图结构变化的方法,为每个任务提供独立的数据,提高磁盘的访问效率。本发明能解决当图数据规模超出可用内存容量的情况下无法高时效地寻找图数据中的强连通分量的问题。

著录项

  • 公开/公告号CN105912404A

    专利类型发明专利

  • 公开/公告日2016-08-31

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201610268583.5

  • 发明设计人 金海;邵志远;吕辉明;

    申请日2016-04-27

  • 分类号

  • 代理机构华中科技大学专利中心;

  • 代理人曹葆青

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-06-19 00:22:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-08

    授权

    授权

  • 2016-09-28

    实质审查的生效 IPC(主分类):G06F9/50 申请日:20160427

    实质审查的生效

  • 2016-08-31

    公开

    公开

说明书

技术领域

本发明属于大数据处理的图计算技术领域,更具体地,涉及一种基于磁盘的大规模图数据中寻找强连通分量的方法。

背景技术

在现实世界图中寻找强连通分量具有很多的应用,包括图结构分析、图数据挖掘、网络安全和病毒传播的防范等。随着大数据时代的到来和信息技术的蓬勃发展,社交网络、生物信息网络和互联网拓扑结构等现实世界图的规模迅速增大,庞大的数据量对图计算领域带来的巨大的挑战,如何高效地在大规模现实世界图中寻找强连通分量成为了一个急需解决的问题。

现有的大规模图处理的方式主要包括使用多台机器组成的分布式平台或利用单台机器上的外部存储(核外计算)。分布式图处理需要将图数据划分成多个部分,然后将每个部分分发到各个机器上进行处理。单机图处理则是利用外部存储来存放大规模的图数据,然后分块轮流地将图数据读入内存进行处理。

分布式图处理系统并不适合科研工作者或大多数使用者,主要原因如下:(1)需要高昂的代价去购买和管理分布式平台;(2)分布式图计算需要对图进行分割,而现实世界图的复杂结构加剧了图分割的难度,很难找到一个高时效且能保证质量的图分割方法;(3)当图算法在每次迭代中只需要更新少数点的值时,无法完全发挥分布式平台计算资源多的优势,反而会由于网络消息延迟而制约图算法的性能。

近几年单机核外图处理成为了图计算领域的研究热点,出现了多个单机图处理系统,例如:GraphChi、X-Stream、TurboGraph和GridGraph,这 些系统已经证明了在单机上处理大规模图数据的可行性。GridGraph证明了单机上的核外图处理够达到甚至优于分布式图处理的性能,而且较少的硬件开销,使得单机核外图处理拥有更好的成本效益,所以在单机核外环境下实现高效地寻找强连通分量的方法拥有广泛的需求。

虽然现有的一些核外图处理系统(GraphChi和X-Stream)实现了寻找强连通分量的算法作为他们的一个应用,但是这些实现存在着很多不足,难以达到可接受的性能。由于并行的寻找强连通分量的算法需要双向遍历图中的点,而且需要多次迭代才能收敛,为了减少磁盘读写量,现有的实现方式在算法的一次迭代之后将已找到的强连通分量从原有图数据中去掉,生成新的图数据以供之后的迭代计算使用。

现有的寻找强连通分量的算法主要有FW-BW算法和Color算法。FW-BW算法通过在一个起点上进行正向图遍历和反向图遍历来求得该起点所在的强连通分量并将剩余的图划分成3个不相交的部分,所以FW-BW适合寻找单个的大强连通分量;Color算法从所有点进行正向最小标签传播,然后进行反向图遍历求得强连通分量,适合同时寻找多个相互独立的强连通分量,以上两个算法各有优缺点,都不能很好地处理复杂的现实世界图。现实世界图中存在着很多长链,Trim算法基于正反向的拓扑图遍历,能够去掉图中的长链,用来寻找只包含一个点的强连通分量。

现有的核外寻找强连通分量的实现主要存在以下不足:(1)所使用的数据组织形式不能很好的支持图结构的改变(去掉一些不再需要的点和边),图结构修改的实现只是去掉了不需要的边,没有去掉不需要的点,这些没有用的点在之后的迭代过程中浪费了磁盘读写并制约了性能;(2)只使用单一算法,在遇到现实世界图中的复杂结构时,无法高效的寻找所有的强连通分量;(3)只支持低层次的面向点和边的处理方式,不支持任务级的处理,所以不能使用合适的算法单独处理各个不相交的部分,难以获得较好的性能。

发明内容

针对现有技术的缺陷或需求改进,本发明提供了一种基于磁盘的大规模图数据中寻找强连通分量的方法,目的在于设计一种支持高效图结构改变和任务级处理的基于磁盘的寻找强连通分量的方法,旨在解决现有方法不能高效的在大规模图中寻找强连通分量的缺点。

为实现上述目的,本发明提供了一种基于磁盘的大规模图数据中寻找强连通分量的方法,包括以下步骤:

步骤1初始化第一个任务,该任务的数据为用户输入的图,在选取合适的算法之后加入任务队列;

步骤2取出任务队列中的第一个任务,并执行该任务;

步骤3在任务执行完成后,继续执行任务算法的过滤函数;

步骤4判断是否有待处理的数据集合,如果有执行步骤5,否则执行步骤7;

步骤5为每个数据集合新建图数据;

步骤6为步骤5中产生的新的图数据新建一个任务,选择合适的算法后,加入任务队列中,然后执行步骤9;

步骤7判断任务所处理的图数据中的点是否都属于强连通分量,如果是,执行步骤9,否则执行步骤8;

步骤8修改该任务的算法,然后继续执行任务;

步骤9判断任务队列是否为空,如果是,则流程结束,否则,执行步骤2。

根据本发明的另一方面,提供一种单机环境下在大规模图数据中寻找强连通分量的框架,包括任务处理模块,算法模块,图结构修改模块,其中:

所述任务处理模块用于任务的构建,多层次任务之间的关系管理,以及执行各个任务;

所述算法模块用于用户实现寻找强连通分量的算法,以及用于图结构修改的过滤函数;

所述图结构修改模块用于为每个子任务构建所需的图数据。

总体而言,通过本发明所构思的以上技术方案,与现有技术相比,本发明具有以下的有益效果:

(1)采用任务的形式,将在一份图数据中寻找强连通分量的问题分解到多个任务中,每个任务选用合适的算法,每个子任务都拥有独立且精简的数据,减少了多余的磁盘读写。

(2)利用合适的图数据组织方式以及新颖的图结构修改方法,减少了图结构修改产生的开销,并通过重新映射点的编号实现去掉冗余的点,避免了后续任务执行时浪费磁盘读写并且提升了访存性能,极大地提升了性能;

(3)现有的并行寻找强连通分量的算法都有优缺点,通过为每个任务选择合适的算法,实现算法之间的互补,最大化每个算法的优势。

附图说明

图1为本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的总体架构图;

图2是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的流程图;

图3是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的内存空间组织图;

图4是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的图结构修改图;

图5是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法和原有方法的性能对比图;

图6是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的图结构修改开销和性能提升图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及 实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互结合。

图1所示为本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的框架图,包括:算法模块、图结构修改模块、任务处理模块。算法模块提供接口给用户实现寻找强连通分量的算法以及过滤函数,图结构修改模块在需要时为任务新建图数据,任务处理模块用于管理任务之间的关系并执行任务。

如图2所示,本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法包括以下步骤:

步骤1根据运行环境初始化执行框架和第一个任务,该任务的数据为用户输入的图,在选取合适的算法之后加入任务队列,具体包括以下子步骤:

(1-1)输入数据初始化;

由于大规模图数据无法装入内存,所以必须在磁盘上存储图数据,本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法采用通用的CSR和CSC图数据组织格式,包括(a)入边文件,按边的目的点进行排序,并只保存边的起点;(b)入边索引文件,保存每个点的第一条入边在入边文件中的索引;(c)出边文件,按边的起点进行排序,并只保存边的终点;(d)出边索引文件,保存每个点的第一条出边在出边文件中的索引;(e)顶点数据文件,保存每个点的数据。

(1-2)通过图数据的大小和所分配物理内存空间进行比较,选取合适的算法,如果图数据大于所分配的物理内存,则选择FW-BW算法,否则,选择Trim算法。

步骤2取出任务队列中的第一个任务,并执行该任务,具体包括以下子步骤:

(2-1)使用任务处理模块执行该任务;

由于并行的寻找强连通分量的算法都是基于双向的图遍历,所以可以规范任务算法的执行过程,任务执行包括以下子步骤:

(2-1-1)将该任务所对应的每个图数据文件通过操作系统的虚拟内存映射的方式映射到虚拟内存地址中;向操作系统申请一段连续的内存空间,将申请到的内存空间分为两个部分:顶点信息区域和遍历请求区域,如图3所示。顶点信息区域为一个双缓冲区(记为Vbuf0和Vbuf1),用来缓冲顶点数据文件,顶点数据文件需要分割成P个段,以保证每个段都能装入缓冲区中,每个段包含的顶点个数记为n;遍历请求区域分割成P个块,其中第i个块(记为Dbufi)用来存放对第i个顶点数据文件段的顶点的遍历请求信息;

(2-1-2)判断任务执行的算法是否收敛,如果是执行步骤(2-2),否则执行步骤(2-1-3);

(2-1-3)选取图遍历的方向,初始化顶点数据,标注图遍历的起点;

(2-1-4)将这一步遍历需要处理的点标注为active,调用任务所使用的算法处理每一个active的点,每个被处理的点都需要发送遍历请求信息到自己的相邻顶点,遍历请求信息的格式为signal(vid,data),其中vid为该遍历请求信息的目的顶点标识,data包含算法需要使用的数据。每个signal放在目的顶点标识vid所对应的第Dbufx中,其中x=vid/n。如果一个顶点已经发送信息给所有的相邻顶点,则将其标记为inactive。当这一步遍历需要处理的点都处理完或任何一个遍历信息请求块放满时,执行步骤(2-1-5);

(2-1-5)选出需要处理的遍历请求信息块,如果存在遍历请求信息块为满的状态,则记录所有状态为满的遍历请求信息块的块号;否则记录所有状态为非空的遍历请求信息块的块号。依次处理每个待处理的遍历请求信息块,在处理Dbufi时,需要将第i个顶点数据文件段读入Vbuf0或Vbuf1中,然后调用任务执行的算法处理Dbufi中的每个signal信息,更新Vbuf0 或Vbuf1中的顶点数据。由于Vbuf0或Vbuf1为双缓冲区,任务执行的算法在使用一个缓冲区时,另一个缓冲区可以写回其包含的顶点数据文件段,并读入下一个需要处理的顶点数据文件段。任务执行的算法在处理signal时,会标注下一步遍历需要计算的顶点。如果这一步遍历还存在active的点,则继续执行(2-1-4),否则执行(2-1-2);

(2-2)在算法执行完成后,分析每个点的属性,对于属于强连通分量的点需要记录所属强连通分量的编号。

步骤3在任务执行完成后,继续执行任务算法的过滤函数,具体包括以下子步骤:

(3-1)执行算法的过滤函数,遍历点的属性数据,过滤出符合要求的点(这些点不属于任何一个强连通分量),将这些点记录在数组中,如图4(a)所示。由于某些算法在寻找强连通分量的同时,能将图分为不相交的部分,每个部分的点都用一个数组保存,所以执行完过滤函数时,可能存在多个数组;

(3-2)如果步骤(3-1)产生了多个数组,则将这些数组的标识插入数据集合队列中,如果步骤(3-1)只产生了一个数组,假设该数组的长度为l,这个任务中点的数量为n,当l<=0.5n时将该数组的标识插入数据集合队列中。

步骤4判断是否有待处理的数据集合,如果有执行步骤5,否则执行步骤7;

步骤5为数据集合队列中的每个数组新建图数据,如图4(b)所示,假设程序正在为数组Array创建新的图数据,Array的长度记为len,Array[i]表示Array中的第i个元素,其中1<=i<=len,新建图数据可以分为以下子步骤:

(5-1)按顺序访问Array中的所有点,将访问到的点加入新的图数据中,在新的图数据中Array[i]的编号为其在Array数组中的索引i;

(5-2)在原图数据中访问点Array[i]的所有相邻的点,如果有相邻的点X也在数组Array中,即存在边e(Array[i],X),则将边e’(i,j)加入新的图数据中,其中j为X在Array中的索引。

步骤6为步骤5中产生的新的图数据创建一个任务,选择合适的算法后,加入任务队列中,然后执行步骤9;

按顺序执行以下两个判断选取合适的算法:

判断1:如果该任务的父任务的算法在执行完过滤函数后只产生一个数组,则选择Trim算法,否则执行判断2;

判断2:如果图数据大于所分配的物理内存,则选择FW-BW算法,否则选择Trim算法。

只有在判断1不成立时才执行判断2。

步骤7判断任务所对应的点是否都属于强连通分量,如果是,执行步骤9,否则执行步骤8;

当步骤4判断没有待处理的数据集合时,流程转向步骤7,而步骤4中判断到数据集合队列为空是由于在步骤(3-2)中,当l==0或l>0.5n时,数组的标识没有加入数据集合队列中。当l==0时意味着所有点都属于强连通分量,执行步骤9;当l>0.5n意味着还有大部分的点不属于任何强连通分量,这时候如果为这些点新建图数据会带来很大的开销,所以执行步骤8。

步骤8修改该任务的算法,然后继续执行任务;

流程转到步骤8意味着该任务的算法没能找到大部分的强连通分量,图数据中的点或强连通分量比较分散,所以程序选择不为剩下的点新建图数据,而是将任务的算法修改为Color算法,Color算法能够快速地寻找到比较分散的强连通分量。

步骤9判断任务队列是否为空,如果是,则流程结束,否则,执行步骤2。

本发明采用上述方案,在性能上优于现有的核外寻找强连通分量的方 法,图5所示为本方法(TAS:Task-based Approach for finding SCCs)和现有的核外图处理系统GraphChi和X-Stream实现的寻找强连通分量的方法在LiveJournal、Twitter、uk-2007-05在YahooWeb四个图数据集上的运行时间对比,图中的数据单位为秒,图中的“X”代表运行时间超过24小时。由图6可以看出,本发明的方法(TAS)相比于现有方法,在性能上有明显提升。

图6是本发明一种基于磁盘的大规模图数据中寻找强连通分量的方法的图结构修改开销和性能提升图,图6(a)、6(b)、6(c)中的横坐标为3个比较对象,TAS表示本发明的完整方法,TASno_mutation表示本发明的方法去掉图结构修改,即所有任务的数据都是原始的输入数据,TASold_vid表示使用不完整的图结构修改,没有对点的编号进行重映射,即任务处理的是稀疏图,图6(a)是运行时间对比、图6(b)是读的数据量对比、6(c)是写的数据量对比,为了便于比较,三张图的数据都是相对于TASno_mutation的数据值标准化后的数据,使用的测试数据集是Twitter和uk-2007-05。

TAS和TASold_vid的对比能反应重映射点的编号,去掉冗余的点的作用;TASold_vid和TASno_mutation的对比能反应去掉冗余的边的作用。由图6(a)、6(b)、6(c)可以看出,TASold_vid的运行时间和读数据量都少于TASno_mutation,所以去掉冗余的边能够提升性能,TAS在运行时间、读数据量和写数据量中都少于TASold_vid,所以可以反应去掉冗余的点也能带来性能的提升,综上所述,修改图结构并精简图数据有益于性能的提升。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号