基于图计算引擎的消息同步方法及系统与流程

文档序号:12271491阅读:279来源:国知局
基于图计算引擎的消息同步方法及系统与流程

本发明涉及图数据技术领域,具体涉及一种基于图计算引擎的消息同步方法及系统。



背景技术:

大图形可以很好地应用于各种图形分析和挖掘应用程序,例如,社会网络分析、模式识别、网站分类和社会媒体营销等。但是,随着需要处理图形的体积越来越庞大,单个服务器已经不堪重负,因此,一系列大规模分布式并行框架图应运而生。分布式并行框架图是将一张大图分割成多个子图,然后将这些分开存储,因此计算时可以多个子图并行运行,大大提高运算效率,可应用于大规模的现实世界的图形问题。

图的切割方法分为边切割和顶点切割。边切割通过切割边,将顶点均匀地分配到各个子图内,被切割的边跨越多个子图,边切割后的通信和存储开销与切割的边的数量成正比的。与边切割相比,顶点切割将各个边均匀地分配到各个子图内,并允许顶点跨越多个子图,顶点切割的通信和存储开销与每个顶点所跨越的图形分区的数目成正比。有理论和实验结果表明,现实世界的图有良好的顶点切割,因此,顶点切割更适用于现实世界的图形问题。

切分后的子图分别存储在多台机器上,每一个子图的信息转换需要消耗网络资源,尤其对一些大的现实世界的图形来说,子图的数量很多,子图间的信息交互也会很频繁。

基于现有的图数据存储结构,子图存储的信息包括点的信息和边的信息,点的信包括点的编号和点的属性,边的信息包括边的源点、终点以及边的属性。基于现有的图数据存储结构,顶点和边的信息分开存储,增加了通信开销;而且存储结构中缺少索引信息,大大降低了计算速率。



技术实现要素:

针对现有技术中的缺陷,本发明提供的基于图计算引擎的消息同步方法及系统,基于一种新的存储结构,提高了不同子图间同步数据的效率。

第一方面,本发明提供的一种基于图计算引擎的消息同步方法,包括:步骤S1,在各个子图中,将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点;步骤S2,若所述下一顶点有主顶点索引,则根据所述下一顶点的主顶点索引,将所述下一顶点接收到的消息发送给所述下一顶点的主顶点;步骤S3,融合所述下一顶点的主顶点接收到的所有消息;步骤S4,根据所述下一顶点的主顶点的从顶点索引,将融合后的消息发送给所述下一顶点的所有从顶点;步骤S5,若未满足终止条件,则返回执行步骤S1。

本发明提供的基于图计算引擎的消息同步方法,在消息同步过程中,通过主顶点索引和从顶点索引快速查找到顶点在不同子图间的位置,不再需要计算,提高了不同子图间同步数据的效率。

优选地,所述将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点,包括:若满足触发条件,则将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点。

优选地,所述若满足触发条件,则将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点,包括:若边被激活,将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点。

优选地,若边被激活,将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点,包括:若当前顶点接收到消息,则激活所述当前顶点;若所述当前顶点被激活,则按照边激活条件激活所述当前顶点相应的边;

若所述当前顶点相应的边被激活,则将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点;将所述当前顶点的激活状态清零。

优选地,还包括:根据所述融合后的消息更新所述下一顶点的主顶点的属性;根据所述下一顶点的主顶点的从顶点索引,将更新后的所述下一顶点的主顶点的属性发送给所述下一顶点的所有从顶点;根据更新后的所述下一顶点的主顶点的属性,更新所述下一顶点的从顶点的属性。

第二方面,本发明提供的一种基于图计算引擎的消息同步系统,包括:消息发送模块,用于在各个子图中,将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点;消息汇总模块,用于若所述下一顶点有主顶点索引,则根据所述下一顶点的主顶点索引,将所述下一顶点接收到的消息发送给所述下一顶点的主顶点;消息融合模块,用于融合所述下一顶点的主顶点接收到的所有消息;消息同步模块,用于根据所述下一顶点的主顶点的从顶点索引,将融合后的消息发送给所述下一顶点的所有从顶点;循环判断模块,用于若未满足终止条件,则返回执行消息发送模块的功能。

本发明提供的基于图计算引擎的消息同步系统,在消息同步过程中,通过主顶点索引和从顶点索引快速查找到顶点在不同子图间的位置,不再需要计算,提高了不同子图间同步数据的效率。

优选地,所述消息发送模块具体用于:若满足触发条件,则将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点。

优选地,所述消息发送模块具体用于:若边被激活,将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点。

优选地,所述消息发送模块具体用于:若当前顶点接收到消息,则激活所述当前顶点;若所述当前顶点被激活,则按照边激活条件激活所述当前顶点相应的边;若所述当前顶点相应的边被激活,则将当前顶点接收到的消息按预定规则沿所述当前顶点的边发送给下一顶点;将所述当前顶点的激活状态清零。

优选地,还包括属性更新模块,用于:根据所述融合后的消息更新所述下一顶点的主顶点的属性;根据所述下一顶点的主顶点的从顶点索引,将更新后的所述下一顶点的主顶点的属性发送给所述下一顶点的所有从顶点;根据更新后的所述下一顶点的主顶点的属性,更新所述下一顶点的从顶点的属性。

附图说明

图1为一个完整的大图的示意图;

图2为将大图切分后的三个子图;

图3为本发明实施例所提供的基于图计算引擎的存储结构;

图4为本发明实施例所提供的基于图计算引擎的消息同步方法的流程图;

图5为本发明实施例所提供的基于图计算引擎的消息同步系统的结构框图。

具体实施方式

下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只是作为示例,而不能以此来限制本发明的保护范围。

需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。

为了提高子图之间的数据同步效率,本发明实施例提供了一种图数据的存储方法,包括:

按照顶点分割的方式将一个完整的大图切分为多个子图,其中,在每个子图中的边都是完整的,一个顶点可能存在于两个或两个以上的子图中;

对于存在两个或两个以上子图中的顶点,指定其中一个子图为该顶点的主子图,其余的子图为该顶点的从子图,在主子图中的该顶点就为主顶点,在从子图中的该顶点为从顶点。

根据预定的存储结构,保存每个子图中的顶点和边的数据。

图1给出了一个完整的大图。

沿着图1中的虚线进行切分就得到如图2所示的三个子图。其中,实线圈为主顶点(如子图0中的顶点a、b、c、d),虚线圈为从顶点(如子图0中的顶点g、f,子图1中的顶点c);以顶点c为例,顶点c在子图0中为主顶点,则子图0为顶点c的主子图,子图1和子图2为顶点c的从子图。

图3给出了按上述方式进行存储的存储结构。该存储结构中,每个子图是单独存储的,因此该存储结构适用于并行计算。每个子图中存储有3部分内容:

第一部分为ID映射。local2Global存储了子图内所有顶点在全局ID(顶点在大图中的ID),其中所有主顶点的索引号小于从顶点。global2Local存储了子图中每个顶点的全局ID的索引与本地ID(顶点在子图中的ID)的映射,以图3中的子图0(Partition0)为例,global2Local字段下,“231”为顶点a的全局ID,“0”为顶点a的本地ID。在一个子图中,如果主顶点和从顶点的数量分别为m和n,若一个顶点的本地ID小于m,则该顶点是主顶点,否则该顶点是从顶点。

第二部分为顶点信息(vertices)。attributesOfMaster用于存储主顶点的属性值,其排序与local2Global的顺序相同。slaveInfoOfMaster用于存储主顶点对应的从顶点索引,从顶点索引包括从顶点所在的子图编号和在子图中的本地ID,如果一个顶点被切分,将存在一个或多个从顶点分布在其他的子图中,例如,在子图0中的顶点891(即顶点c)有两个从顶点,在子图1和子图2中的本地ID分别为4和3(见子图1和子图2中的global2Local),因此在子图0中slaveInfoOfMaster相应的位置存储顶点891的从顶点索引“1,4”和“2,3”。attributesOfSlave用于存储从顶点的属性值。masterInfoOfSlave用于存储从顶点对应的主顶点索引,主顶点索引包括主顶点所在的子图编号和主顶点在子图中的本地ID,例如在子图0中,从顶点412(即顶点g)的主顶点在子图2中,其在子图2中的本地ID是0,因此在子图0中masterInfoOfSlave相应的位置存储顶点412的主顶点索引“2,0”。从顶点的属性可以根据主顶点的属性值进行更新。

第三部分为边信息(edges)。边的源点的本地ID存储在localSrcIds中,边的终点的本地ID存储在与localSrcIds对应的localDstIds中,以顶点231指向顶点2851的边为例,顶点231(本地ID为0)为源点,则localSrcIds(0)为0,顶点2851(本地ID为1)为终点,则localDstIds(0)为1。edgeAttributes存储边的属性值。

本发明实施例提供的基于图计算引擎的存储结构中包括点的包含关系(主顶点索引和从顶点索引),在查找过程中,可以通过索引快速查找到目标点,不再需要计算,提高了查找效率;另外,将点和边共同存储,一些共享的信息不需要重复存储,节省了存储空间。

基于上述图数据的存储结构,本发明实施例提供的一种基于图计算引擎的消息同步方法,具体步骤如图4所示,包括:

步骤S1,在各个子图中,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

步骤S2,若下一顶点有主顶点索引,则根据下一顶点的主顶点索引,将下一顶点接收到的消息发送给下一顶点的主顶点。

其中,若下一顶点没有主顶点索引,则表明该顶点就是主顶点,该顶点只需接收其从顶点发送过来的消息即可。

步骤S3,融合下一顶点的主顶点接收到的所有消息。

步骤S4,根据下一顶点的主顶点的从顶点索引,将融合后的消息发送给下一顶点的所有从顶点。

步骤S5,若未满足终止条件,则返回执行步骤S1。

其中,返回执行步骤S1即进行新一轮的循环,上一次循环中接收到消息的顶点即为下一次循环中的当前顶点。当前顶点为在某次循环过程中满足条件,能够进行消息发送的顶点,为区别于其它不满足消息发送条件的顶点,并不代表实际存在顶点叫当前顶点。

本发明实施例提供的基于图计算引擎的消息同步方法,不同子图中的消息发送(对应步骤S1)、消息合并(对应步骤S2、S3)、消息同步(对应步骤S4)等都是并发处理的,在消息同步过程中,通过主顶点索引和从顶点索引快速查找到顶点在不同子图间的位置,不再需要计算,提高了不同子图间同步数据的效率。

其中,步骤S1的实现方式有多种,本发明实施例提供了步骤S1的一种优选方式,具体包括:若满足触发条件,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,步骤S1的优选方式还可以是:若边被激活,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,步骤S1的优选方式还可以是:若当前顶点接收到消息,则激活当前顶点;若当前顶点被激活,则按照边激活条件激活当前顶点相应的边;若当前顶点相应的边被激活,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点;将当前顶点的激活状态清零。该优选方法,以顶点接收到消息为发送消息的触发条件,形成链式反应,更新消息会通过边自动传递到下一个顶点,直到满足终止条件,提高了信息发送效率。

其中,步骤S1中的预定规则包括以下规则中的任意一种:(1)消息只能从源点发给终点,(2)消息只能从终点发往源点,(3)消息既可以从源点发往终点也可以从终点发往源点。

其中,边被激活的条件包括边的源点被激活和/或边的终点被激活。

其中,步骤S5中的终止条件包括:没有产生新的消息和/或迭循环发送次数达到一定数量。没有产生新消息是指消息没有沿着边发送,即没有新的顶点接收到消息。

本发明实施例提供的基于图计算引擎的消息同步方法,还包括属性更新步骤,具体包括:根据融合后的消息更新下一顶点的主顶点的属性;根据下一顶点的主顶点的从顶点索引,将更新后的下一顶点的主顶点的属性发送给下一顶点的所有从顶点;根据更新后的下一顶点的主顶点的属性,更新下一顶点的从顶点的属性。

以发送消息为例,本发明实施例提供的一种基于图计算引擎的消息同步方法,包括:

步骤S10,在各个子图中,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

其中,消息包括消息内容和目标顶点ID,目标顶点ID为目标顶点在大图中的全局ID。

步骤S20,若下一顶点有主顶点索引,则根据下一顶点的主顶点索引,将下一顶点接收到的消息发送给下一顶点的主顶点。

其中,若下一顶点没有主顶点索引,则表明该顶点就是主顶点,该顶点只需接收其从顶点发送过来的消息即可。

步骤S30,融合下一顶点的主顶点接收到的所有消息。

步骤S40,根据下一顶点的主顶点的从顶点索引,将融合后的消息发送给下一顶点的所有从顶点。

步骤S50,若未满足终止条件,则返回执行步骤S10。

其中,终止条件为消息发送到目标顶点;判断主顶点和目标顶点的全局ID是否相同;若不相同,则未满足终止条件,返回执行步骤S10;若相同,则主顶点即为目标顶点,满足终止条件,终止循环。

本发明实施例提供的基于图计算引擎的消息同步方法,在消息发送过程中,通过主顶点索引和从顶点索引快速查找到顶点在子图中的位置,不再需要计算,提高了不同子图间同步数据的效率。

其中,步骤S10的实现方式有多种,本发明实施例提供了步骤S10的一种优选方式,具体包括:若满足触发条件,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,步骤S10的优选方式还可以是:若边被激活,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,步骤S10的优选方式还可以是:若当前顶点接收到消息,则激活当前顶点;若当前顶点被激活,则按照边激活条件激活当前顶点相应的边;若当前顶点相应的边被激活,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点;将当前顶点的激活状态清零。该优选方法,以顶点接收到消息为发送消息的触发条件,形成链式反应,更新消息会通过边自动传递到下一个顶点,直到满足终止条件,提高了信息发送效率。

其中,步骤S10中的预定规则包括以下规则中的任意一种:(1)消息只能从源点发给终点,(2)消息只能从终点发往源点,(3)消息既可以从源点发往终点也可以从终点发往源点。实际应用中,消息发送的方向可以根据用户的实际需求设定,如根据源点和终点的属性值、消息的具体内容判断选用哪种消息发送的规则。

其中,边被激活的条件包括边的源点被激活和/或边的终点被激活。

本发明实施例提供的基于图计算引擎的消息同步方法,还包括属性更新步骤,具体包括:根据融合后的消息更新下一顶点的主顶点的属性;根据下一顶点的主顶点的从顶点索引,将更新后的下一顶点的主顶点的属性发送给下一顶点的所有从顶点;根据更新后的下一顶点的主顶点的属性,更新下一顶点的从顶点的属性。

以下面消息处理的过程为例说明本发明实施例的应用,假设我们想判断大图中某个特定的点到其它点的距离,距离可以考虑方向也可以不考虑。以图1中的顶点891为例,考虑方向时可以分顶点891可以到达哪些点(出去)和哪些点可以到达891(进来),考虑方向时,两种情况的处理方式类似。以不考虑方向和考虑方向中的第一种情况为例,假设顶点891为消息发送的起始点:

情况1:不考虑消息传递的方向,其处理过程为:

(1)首先初始化所有顶点的属性,如果顶点的ID为891,则属性值设为0,否则设为-1。上述过程由各个子图并行处理自己的顶点。

(2)消息发送过程:对于每条边,判断如果源点的属性≥0且终点的属性<0,则向终点发送一个消息,消息内容为源点的属性值+1;否则如果终点的属性≥0且源点的属性<0,则向终点发送一个消息,消息内容为终点的属性值+1。

该实施例中以源点和终点的属性值的大小为依据,判断是否沿着某条边进行消息的传递,实际应用中,可以根据用户的实际需求设定。

(3)消息合并过程:消息发送过程在多个子图中并行进行,因此一次会产生很多消息,发往相同顶点的消息都往其主顶点汇聚。主顶点可能会收到多条消息,主顶点将收到的多条消息进行合并,由于本实施例中,每轮迭代中消息的内容都是相同的,所以主顶点收到多个消息时可以随便选取一条。例如,如图1中,第一轮迭代顶点891会向顶点231、2343、6427、442、9712共5个点发送内容为1的消息;第二轮迭代,子图0中顶点231和顶点9712都会向顶点412发送内容为2的消息,同时,子图2中顶点9712也会向顶点412发送内容为2的消息,子图0中和子图2中的顶点412将消息进行合并。

(4)属性更新过程:每个顶点收到消息后,将属性值更新为消息内容,并将更新的属性同步到从顶点。

(5)回到第二步进行循环迭代,直到第二步没有新消息产生。

对于情况1,结合图1,整个消息发送、合并、同步的过程如下:

第一轮:顶点891向顶点231、2343、6427、442、9712共5个顶点各发送内容为1的消息,这5个顶点将自己的属性更新为1;

第二轮:顶点231向顶点327、2851、412各发送内容为2的消息,顶点2343向顶点327发送内容为2的消息,顶点442向顶点63发送一条内容为2的消息,顶点9712向顶点412、2081各发送一条内容为2的消息,收到消息的各顶点消息合并后更新属性为2;

第三轮:第二轮中接收到消息的顶点没有下一顶点可以发送消息,即没有新消息,所以迭代结束。

最终结果是:顶点891的属性值为0,顶点231、2343、6427、442、9712为1(即顶点891经过一步就可以到达这些点),其它各顶点的属性值为2。

情况2:顶点891可以到达哪些点的情况,过程如下:

(1)首先初始化所有顶点的属性,如果顶点的ID为891,则属性值设为0,否则设为-1。上述过程由各个子图并行处理自己的顶点。

(2)消息发送过程:对于每条边,判断如果源点的属性≥0且终点的属性<0,则向终点发送一个消息,消息内容为源点的属性值+1。

该实施例中以源点和终点的属性值的大小为依据,判断是否沿着某条边进行消息的传递,实际应用中,可以根据用户的实际需求设定。

(3)消息合并过程:消息发送过程在多个子图中并行进行,因此一次会产生很多消息,发往相同顶点的消息都往其主顶点汇聚。主顶点可能会收到多条消息,主顶点将收到的多条消息进行合并,由于本实施例中,每轮迭代中消息的内容都是相同的,所以主顶点收到多个消息时可以随便选取一条。

(4)属性更新过程:每个顶点收到消息后,将属性值更新为消息内容。并将更新的属性同步到从顶点。

(5)回到第二步进行循环迭代,直到第二步没有新消息产生。

对于情况2,结合图1,整个消息发送、合并、同步的过程如下:

第一轮:顶点891向顶点2343、6427、442、9712各发送内容为1的消息,这4个顶点将自己的属性更新为1;

第二轮:顶点442向顶点63发送一条内容为2的消息,顶点9712向顶点2081发送一条内容为2的消息,顶点63和顶点2081收到消息的各顶点消息合并后更新属性为2;

第三轮:第二轮中接收到消息的顶点没有下一顶点可以发送消息,即没有新消息,所以迭代结束。

最终结果是:顶点891属性值为0,顶点2343、6427、442、9712的属性值为1(即顶点891经过一步就可以到达这些点),顶点63和顶点2081的属性值为2,其它顶点的属性值为-1(即顶点891不可到达这些点)。

基于与上述基于图计算引擎的消息同步方法相同的发明构思,本发明实施例提供了一种基于图计算引擎的消息同步系统,如图5所示,包括:消息发送模块101,用于在各个子图中,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点;消息汇总模块102,用于若下一顶点有主顶点索引,则根据下一顶点的主顶点索引,将下一顶点接收到的消息发送给下一顶点的主顶点;消息融合模块103,用于融合下一顶点的主顶点接收到的所有消息;消息同步模块104,用于根据下一顶点的主顶点的从顶点索引,将融合后的消息发送给下一顶点的所有从顶点;循环判断模块105,用于若未满足终止条件,则返回执行消息发送模块的功能。

本发明实施例提供的基于图计算引擎的消息同步系统,在消息同步过程中,通过主顶点索引和从顶点索引快速查找到顶点在不同子图间的位置,不再需要计算,提高了不同子图间同步数据的效率。

其中,消息发送模块101具体用于:若满足触发条件,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,消息发送模块101具体用于:若边被激活,将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点。

进一步地,消息发送模块101具体用于:若当前顶点接收到消息,则激活当前顶点;若当前顶点被激活,则按照边激活条件激活当前顶点相应的边;若当前顶点相应的边被激活,则将当前顶点接收到的消息按预定规则沿当前顶点的边发送给下一顶点;将当前顶点的激活状态清零。

其中,还包括属性更新模块,用于:根据融合后的消息更新下一顶点的主顶点的属性;根据下一顶点的主顶点的从顶点索引,将更新后的下一顶点的主顶点的属性发送给下一顶点的所有从顶点;根据更新后的下一顶点的主顶点的属性,更新下一顶点的从顶点的属性。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

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