用于实现负载均衡的图数据划分方法

文档序号:33128016发布日期:2023-02-01 06:18阅读:31来源:国知局
用于实现负载均衡的图数据划分方法

1.本技术属于图数据处理技术领域,具体涉及一种用于实现负载均衡的图数据划分方法。


背景技术:

2.图因其宜于表征不同实体间复杂的依赖关系而受到广泛应用,现实生活中许多应用场景需要用图数据结构表示,如最短时间路径、科技文献引用关系、社交网络分析等。然而,图计算要处理的图数据规模往往十分庞大,达到tb级的压缩数据,一台机器难以完成对这些数据集的计算。因此,需要在多台机器上划分输入图,并使用并行算法进行图计算,才能降低网络延迟和运行时间,提高图计算效率。
3.图分区在整个系统性能中起着至关重要的作用,因为它对负载平衡和机器间通信都有重大影响,但图中的不规则结构和固有的相互依赖性使得很难获得同样负载平衡的高质量分区。因此,如何实现负载均衡的图数据划分,成为亟待解决的技术问题。


技术实现要素:

4.(一)要解决的技术问题
5.本发明的目的是提供一种用于实现负载均衡的图数据划分方法,来解决图划分过程中出现的负载不均衡的问题。
6.(二)技术方案
7.为达到上述目的,本技术采用如下技术方案:
8.第一方面,本技术提供一种用于实现负载均衡的图数据划分方法,该方法包括:
9.获取目标图数据和所述目标图数据的子图划分目标数量;
10.对所述目标图数据中的节点按照层级进行排序,确定每个节点的顺序;
11.确定所述目标图数据中每个节点的度数,基于各个节点度数确定所述目标图数据中节点的平均度数;
12.基于所述平均度数和每个节点的顺序,得到所述目标图数据中大于所述平均度数的第一节点子序列和小于等于所述平均度数的第二节点子序列;
13.基于所述子图划分目标数量,分别对所述第一节点子序列和所述第二节点子序列进行划分,得到目标数量的第一分区和第二分区;
14.将所述第一分区和所述第二分区合并作为一个子图分区。
15.可选地,确定所述目标图数据中每个节点的度数包括:
16.使用广度优先算法从所述目标图数据的任意节点开始,逐层进行节点遍历,后一层的节点依次插入前层节点的后面;
17.在遍历的过程中,计算出每个节点的度数,对节点和度数对应存储。
18.可选地,基于所述平均度数和每个节点的顺序,得到所述目标图数据中大于所述平均度数的第一节点子序列和小于等于所述平均度数的第二节点子序列,包括:
19.s41、基于每个节点的顺序得到所述目标图数据的第一图节点序列;
20.s42、比较每个节点的度数和平均度数,将度数大于平均度数的节点作为热点,将度数小于等于平均度数的节点作为冷点;
21.s43、针对所述第一图节点序列中的每个冷点,当冷点右侧有热点时对该冷点进行位置调整,直至右侧没有热点,得到第二图节点序列;
22.s44、将所述第二图节点序列中大于等于所述平均度数的节点组成第一节点子序列,将小于所述平均度数的节点组成第二节点子序列。
23.可选地,所述平均度数为小数时向下取整。
24.可选地,当冷点右侧有热点时对该冷点进行位置调整,包括:
25.将该冷点与右侧邻近的热点交换位置;
26.判断该冷点右侧是否有热点,若有,重复执行位置交换,直到该冷点的右侧没有热点,结束位置调整;若没有,结束位置调整。
27.可选地,将第一分区和第二分区合并作为一个子图分区,包括:
28.顺次从所述第一节点子序列和所述第二节点子序列中取出第一分区和第二分区的节点;
29.将取出的所有节点作为一个子图分区。
30.可选地,当所述第一节点子序列或所述第二节点子序列中的节点数量是所述子图划分目标数量的整数倍时,每个第一分区或每个第二分区的节点数量相同;
31.当所述第一节点子序列或所述第二节点子序列中的节点数量不是所述子图划分目标数量的整数倍时,每个第一分区或每个第二分区的节点度数之和相差最小。
32.(三)有益效果
33.本技术的有益效果是:本技术提出了一种用于实现负载均衡的图数据划分方法。该方法包括:获取目标图数据和子图划分目标数量;对目标图数据中的节点按照层级进行排序,确定每个节点的顺序;确定目标图数据中每个节点的度数,基于各个节点度数确定目标图数据中节点的平均度数;基于平均度数和节点的顺序,得到大于平均度数的第一节点子序列和小于等于平均度数的第二节点子序列;基于子图划分目标数量,分别对第一节点子序列和第二节点子序列进行划分,得到目标数量的第一分区和第二分区;将第一分区和第二分区合并作为一个子图分区。通过该方法进行图数据划分,可优化图数据划分的负载特性;并且该方法可适用于所有的图数据划分,适用性强。
附图说明
34.本技术借助于以下附图进行描述:
35.图1为本技术实施例提供的一种用于实现负载均衡的图数据划分方法的流程示意图;
36.图2为本技术另一实施例提供的待划分图的结构图;
37.图3为本技术另一实施例提供的节点排序示例图;
38.图4为本技术另一实施例提供的节点重排序示例图;
39.图5为本技术另一实施例提供的分区为2的子图划分示例图;
40.图6为本技术另一实施例提供的分区为4的子图划分示例图;
41.图7为本技术另一实施例提供的2个子图的节点分布示例图;
42.图8为本技术另一实施例提供的4个子图的节点分布示例图。
具体实施方式
43.为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。可以理解的是,以下所描述的具体的实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合;为了便于描述,附图中仅示出了与发明相关的部分。
44.为了能够对更清楚地理解本技术实施例提供的技术方案,下面对本技术实施例涉及的技术术语进行介绍:
45.图结构:是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即节点之间的关系可以是任意的,图中任意元素之间都可能相关。图的应用极为广泛,已渗入到诸如语言学、逻辑学、物理、化学、电讯、计算机科学以及数学的其它分支。
46.图分为有向图和无向图。
47.对于无向图g=(v,e),图g中依附于vi的边的数目称为顶点vi的度,记为td(vi)。
48.对有向图g=(v,e),图g中以vi作为起点的有向边的数目称为顶点vi的出度,记为od(vi);以vi作为终点的有向边的数目称为顶点vi的入度,记为id(vi)。顶点vi的出度与入度之和称为vi的度,记为td(vi)。
49.实施例一
50.本实施例的执行主体可以是图数据处理系统,该系统包括主机以及多个图数据处理器。其中,该系统中图数据处理器的数量可以根据实际情况进行相应的设置,在此并不做任何限制。
51.主机用于对目标图数据进行划分得到若干目标子图,并将目标子图分发给图数据处理器进行图数据的处理。其中,需要平衡每个目标子图的大小,基于此,本发明实施例提供了一种用于实现负载均衡的图数据划分方法,具体将在下文中进行详细描述。
52.图1为本技术实施例提供的一种用于实现负载均衡的图数据划分方法的流程示意图,如图1所示,如图1所示,该方法包括以下步骤:
53.s1、获取目标图数据和所述目标图数据的子图划分目标数量;
54.s2、对所述目标图数据中的节点按照层级进行排序,确定每个节点的顺序;
55.s3、确定所述目标图数据中每个节点的度数,基于各个节点度数确定所述目标图数据中节点的平均度数;
56.s4、基于所述平均度数和每个节点的顺序,得到所述目标图数据中大于所述平均度数的第一节点子序列和小于等于所述平均度数的第二节点子序列;
57.s5、基于所述子图划分目标数量,分别对所述第一节点子序列和所述第二节点子序列进行划分,得到目标数量的第一分区和第二分区;
58.s6、将所述第一分区和所述第二分区合并作为一个子图分区。
59.本技术方法通过节点排序、节点重排序和子图分区将图划分为指定大小的分区,实现负载的均衡,优化了图数据划分的负载特性;并且适用于所有的图数据划分,具有较强
的适用性。
60.为了使得本领域技术人员更加理解本公开实施例提供的用于实现负载均衡的图数据划分方法,下面对上述各步骤进行详细说明。
61.在步骤s1中,目标图数据可以是主机从外界获取到的,也可以是存储在主机中的。子图划分目标数量可以依据图数据处理系统中图数据处理器的数量确定。
62.在步骤s2中,节点排序可以使用广度优先搜索(breadth-first search,bfs)对图数据进行分层遍历,首先从任意节点开始,逐层进行节点遍历,后一层的节点依次插入前层节点的后面,在遍历的过程中,计算出每个节点的度数。
63.本实施例中,步骤s4包括:
64.s41、基于每个节点的顺序得到所述目标图数据的第一图节点序列;
65.s42、比较每个节点的度数和平均度数,将度数大于平均度数的节点作为热点,将度数小于等于平均度数的节点作为冷点;
66.s43、针对所述第一图节点序列中的每个冷点,当冷点右侧有热点时对该冷点进行位置调整,直至右侧没有热点,得到第二图节点序列;
67.s44、将所述第二图节点序列中大于等于所述平均度数的节点组成第一节点子序列,将小于所述平均度数的节点组成第二节点子序列。
68.本实施例中,第一节点子序列为热点组成的序列,第二节点子序列为冷点组成的序列。
69.本实施例步骤s5中,依据子图数目划分的要求,即子图划分目标数量,对第一节点子序列和第二节点子序列进行划分。
70.例如,子图划分目标数量为4,则第一节点子序列划分为4个第一分区,第二节点子序列划分为4个第二分区。
71.本实施例步骤s6中,将第一分区和第二分区合并作为一个子图分区,即从热节点分区和冷节点分区按照相对顺序取出对应的节点,划分为同一子图中,保证各子图中节点总数相同,子图对应的总的度数相差不大,满足图划分负载均衡的要求。
72.需要说明的是,当第一节点子序列或第二节点子序列中的节点数量是子图划分目标数量的整数倍时,每个第一分区或每个第二分区的节点数量相同;
73.当第一节点子序列或第二节点子序列中的节点数量不是子图划分目标数量的整数倍时,每个第一分区或每个第二分区的节点度数之和相差最小。
74.实施例二
75.图2为本技术另一实施例提供的待划分图的结构图,如图2所示,图中有16个节点,19条边。本实施例以图2所示的图为例对用于实现负载均衡的图数据划分方法进行进一步的说明。
76.步骤1,本实施例中的数据集为坐标(coordinate,coo)格式,通过(源节点,目标节点)的边进行输入。输入的边为(1,5)、(1,8)、(1,12)等。
77.步骤2,创建c++中stl的unordered_map容器,通过bfs算法来分层遍历源节点的下的每层节点,按照《节点,度数》的键值对依次保存各节点数据和对应度数,例如《1,3》、《5,4》、《8,5》等,总的度数38。将节点和度数对应存储在c++中stl的unordered_map容器中。图3为本技术另一实施例提供的节点排序示例图,存储的节点顺序如图3所示。
78.步骤3,根据各节点的度数计算出图数据节点的平均度数,平均度数为小数时向下取整。顺序比较每个节点的度数和平均度数,度数大于平均度数的节点为热点,度数小于等于平均度数的节点为冷点,当节点为冷点时,将该节点与右边邻近的第一个热点交换位置,重复该操作,直到某节点的右边没有热点时停止重排序。
79.根据unordered_map容器存储的数据,计算得平均度数为38/16=2.375,向下取整后为2。然后比较unordered_map容器中各节点度数和2的大小,按顺序比较,度数大于2的节点为热点,度数小于等于2的节点为冷点。图4为本技术另一实施例提供的节点重排序示例图,如图4所示,当发现冷点《14,2》右边有热点存在时,将该节点与右边邻近的第一个热点《3,3》交换位置,接下来依据上述原则,再将冷点《14,2》和右边临近的热点《4,5》交换,直到冷点《14,2》右边不存在热点时,重排序结束。
80.步骤4,将节点存储二分为热点存储和冷点存储。根据划分的子图数目,计算出各分区的冷热节点数目。冷热节点数目等于v/2*n。v为节点总数,n为分区个数。然后在保证节点间相对位置不变的前提下将节点存储二分为热点存储和冷点存储。
81.图5为本技术另一实施例提供的分区为2的子图划分示例图,如图5所示,将unordered_map容器二等分存储,分别将前面的八个节点键值对《1,3》、《5,4》、《8,5》、《12,3》、《2,3》、《3,3》、《4,5》、《14,2》存储在热节点存储中,后面的八个节点键值对《11,1》、《7,1》、《15,1》、《9,2》、《10,1》、《16,2》、《13,1》、《6,1》存储在冷节点存储中。
82.步骤5,根据冷热节点划分数目将冷热节点分区分割为不同的分区。
83.请继续参阅图5,当划分的图分区为2时,计算出每个子图(分区)中冷热节点的数目为16/2*2=4个,所以需要在冷热节点存储中各取4个节点,热节点分区为hot1区和hot2区,冷节点分区为cold1区和cold2区,都各为4个节点。
84.步骤6,将对应的冷热分区节点重组为子图分区。分别在热点分区和冷点分区中按照冷热节点的相对顺序获取相应节点组合成对应的子图,保证各子图中节点总数相同,实现各子图中总度数相近,达到图划分负载的均衡。各子图分区划分可并行完成。请继续参阅图5,将hot1区节点和cold1区节点重组为subgraph1,hot2区节点和cold2区节点重组为subgraph2,各分区总的度数分别为20和18,负载相对均衡。图7为本技术另一实施例提供的2个子图的节点分布示例图,图7显示2个分区时节点分布。
85.当划分的图分区为4时,在冷热节点存储中各取16/2*4=2个节点,图6为本技术另一实施例提供的分区为4的子图划分示例图,如图6所示,热节点分区为hot1、hot2、hot3和hot4区,冷节点分区为cold1、cold2、cold3和cold4区,都各为2个节点。然后再依次按照(hot1,cold1)、(hot2,cold2)、(hot3,cold3)和(hot4,cold4)划分subgraph1、subgraph2、subgraph3和subgraph4。图8为本技术另一实施例提供的4个子图的节点分布示例图,图8显示4个分区时节点分布。
86.在本技术公开的上述实施例中,应该理解到,所揭露的设备和方法,也可以通过其它的方式实现。以上所描述的设备和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的方法、设备和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不
同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
87.应当注意的是,在权利要求中,不应将位于括号之间的任何附图标记理解成对权利要求的限制。词语“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的词语“一”或“一个”不排除存在多个这样的部件。此外,需要说明的是,在本说明书的描述中,术语“一个实施例”、“一些实施例”、“实施例”、“示例”、“具体示例”或“一些示例”等的描述,是指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。
88.尽管已描述了本发明的优选实施例,但本领域的技术人员在得知了基本创造性概念后,则可对这些实施例做出另外的变更和修改。所以,权利要求应该解释为包括优选实施例以及落入本发明范围的所有变更和修改。
89.显然,本领域的技术人员可以对本发明进行各种修改和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也应该包含这些修改和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1