法律状态公告日
法律状态信息
法律状态
2020-05-19
授权
授权
2019-02-19
实质审查的生效 IPC(主分类):G06F3/06 申请日:20180724
实质审查的生效
2019-01-18
公开
公开
技术领域
本发明属于计算机大数据处理技术领域,更具体地,涉及一种基于混合更新策略的磁盘图处理方法。
背景技术
在当前大数据背景下,呈现出越来越多的对大规模图数据进行分析、处理、挖掘的应用需求。近年来,基于磁盘的图处理系统由于其成本低、可扩展性强等特点得到了广泛的关注,例如卡内基梅隆大学的GraphChi、洛桑联邦理工学院的X-Stream、清华大学的GridGraph等。这些磁盘图处理将图数据分为若干个子图,并且每次从磁盘中加载和处理一个子图。为了取得更好的性能,这些图系统在处理每个子图时将整个子图数据从磁盘加载到内存中,以利用磁盘顺序访问带宽远高于随机访问带宽的特性。然而,很多图算法在每次迭代计算中只需要访问一小部分图数据(活跃顶点或活跃边)。例如,BFS算法在每次迭代中只访问当前遍历层次的顶点和边。因此,在每次迭代加载整个图数据为造成大量的磁盘读写浪费,影响系统的效率。另一方面,如果只访问活跃顶点或活跃边,会产生随机磁盘访问。当活跃顶点数量很多时,大量的随机磁盘访问会极大的降低系统的性能。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有技术磁盘读写开销大的技术问题。
为实现上述目的,本发明实施例提供了一种基于混合更新策略的磁盘图处理方法,所述方法包括以下步骤:
(1)将图组织为入射子块—出射子块双重子块结构;
(2)根据当前的磁盘读写开销选择不同的更新策略,更新策略包括基于行导向的push策略和基于列导向的pull策略;
(3)根据所述选择的更新策略,对图进行访问和对顶点值进行更新;
(4)判断是否达到收敛条件,若是,执行步骤(5),否则,执行步骤(2);
(5)输出图的顶点值。
具体地,步骤(1)包括:
(1.1)为图G中每个顶点分配一个顶点值,将图G中的顶点集划分为P个不相交的区间;
(1.2)对于每个顶点区间,创建一个入射块和一个出射块结构,分别存储此区间顶点的入射边和出射边;
(1.3)根据入射边的源顶点所属区间,将每个入射块进一步划分为P个入射子块;根据出射边的目的顶点所属区间,将每个出射块进一步划分为P个出射子块;
(1.4)划分完成后的图数据都存储在磁盘中。
3.如权利要求2所述的磁盘图处理方法,其特征在于,P的取值要确保每一个入射子块或出射子块的大小小于内存的容量。
具体地,步骤(2)包括:
(2.1)分别计算当前顺序加载所有边的磁盘读写开销和随机加载活跃边的磁盘读写开销;
(2.2)判断顺序加载所有边的磁盘读写开销是否大于随机加载活跃边的磁盘读写开销,若是,选择基于行导向的push策略,否则选择基于列导向的pull策略。
具体地,一个顶点被定义为活跃顶点,当且仅当该顶点的顶点值在上一轮迭代中被更新;一条边被定义为活跃边,当且仅当该条边的源顶点是活跃顶点。
具体地,读写开销用读写图数据的总数据量除以磁盘访问带宽计算。
具体地,基于行导向的push策略,对图进行访问和对顶点值进行更新,包括以下步骤:
(1)第一行的出射子块初始为更新对象;
(2)依次对更新对象中出射子块执行更新操作,所述更新操作为:读取出射子块的每一条活跃边,更新其目的顶点的顶点值;
(3)当一行的出射子块都更新之后,用更新后的每一区间的目的顶点的顶点值更新对应区间的源顶点的顶点值;
(4)判断更新对象是否为最后一行的出射子块,若是,结束;若否,将下一行的出射子块替换为更新对象,重复步骤(2)-(3)。
具体地,基于列导向的pull策略,对图进行访问和对顶点值进行更新,包括以下步骤:
(1)第一列的入射子块初始为更新对象;
(2)依次对更新对象中入射子块执行更新操作,所述更新操作为:入射子块的每个目的顶点通过读取入射边及其源顶点,更新自己的顶点值;
(3)当一列的入射子块都更新之后,用更新后的每一区间的目的顶点的顶点值更新对应区间的源顶点的顶点值;
(4)判断更新对象是否为最后一列的入射子块,若是,结束;若否,将下一列的入射子块替换为更新对象,重复步骤(2)-(3)。
具体地,步骤(4)中收敛条件为顶点值不被改变。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)本发明提供的混合更新策略,在处理图数据时能够根据不同图应用的运行特征,自适应地选择不同的更新策略,最大化磁盘的利用,提升了系统的性能;
(2)本发明提供的基于行导向的push策略,在处理过程中选择性的加载活跃边数据,避免了无用磁盘数据的加载和磁盘读写浪费;
(3)本发明提供的基于列导向的pull策略策略,在处理过程中加载全部的图数据到内存中以确保磁盘的顺序访问,极大地降低磁盘读写的开销。
附图说明
图1为本发明实施例提供的基于混合更新策略的磁盘图处理方法流程图。
图2(a)为本发明实施例提供的有向图G示意图;
图2(b)为本发明实施例提供的有向图G组织为双重子块结构过程示意图。
图3为本发明实施例提供的基于行导向的push策略对有向图G进行更新的示意图。
图4为本发明实施例提供的按照基于列导向的pull策略对有向图G进行更新的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为本发明实施例提供的基于混合更新策略的磁盘图处理方法流程图。如图1所示,所述方法包括以下步骤:
(1)将图组织为入射子块—出射子块双重子块结构;
(2)根据当前的磁盘读写开销选择不同的更新策略,更新策略包括基于行导向的push策略和基于列导向的pull策略;
(3)根据所述选择的更新策略,对图进行访问和对顶点值进行更新;
(4)判断是否达到收敛条件,若是,执行步骤(5),否则,执行步骤(2);
(5)输出图的顶点值。
步骤(1)将图组织为入射子块—出射子块双重子块结构具体包括:
(1.1)为图G中每个顶点分配一个顶点值,将图G中的顶点集划分为P个不相交的区间。
图G存储在磁盘中,P的取值要确保每一个入射子块或出射子块的大小小于内存的容量。
(1.2)对于每个顶点区间,创建一个入射块和一个出射块结构,分别存储此区间顶点的入射边和出射边。
(1.3)根据入射边的源顶点所属区间,将每个入射块进一步划分为P个入射子块;根据出射边的目的顶点所属区间,将每个出射块进一步划分为P个出射子块。
(1.4)划分完成后的图数据都存储在磁盘中。
数据划分完之后,都会存储在磁盘中。而在计算的过程中,每一个入射子块或出射子块会被加载到内存中。也就是说,当需要用到某个入射子块或出射子块的时候,它会被加载到内存中进行更新,而不需要的时候,它是存储在磁盘中。
图2(a)为本发明实施例提供的有向图G示意图。图2(b)为本发明实施例提供的有向图G组织为双重子块结构过程示意图。如图2(b)所示,其具体过程为:
(1)将有向图G中的顶点划分两个不相交的区间(1-5)和(6-10);
(2)对于每个顶点区间,创建一个入射块和一个出射块结构,分别存储此区间顶点的入射边和出射边。
图2(a)被划分为入射块in-shard 1和出射块out-shard1、入射块in-shard2和出射块out-shard 2。
(3)根据入射边的源顶点所属区间,将每个入射块进一步划分为2个入射子块。根据出射边的目的顶点所属区间,将每个出射块进一步划分为2个出射子块。
入射块in-shard 1被划分为入射子块in-block(1.1)和入射子块in-block(2,1);入射块in-shard 2被划分为入射子块in-block(1.2)和入射子块in-block(2,2)。出射块out-shard 1被划分为出射子块out-block(1.1)和出射子块out-block(1,2),出射块out-shard 2被划分为出射子块out-block(2.1)和出射子块out-block(2,2)。
此外,具有相同源顶点区间的出射子块认定为处于同一行,如out-block(1.1)和out-block(1,2)。具有相同目的顶点区间入射子块认定为处于同一列,如in-block(1.1)和in-block(2,1)。
(4)数据划分完成后,入射子块in-block(1.1),in-block(2,1),in-block(1.2),in-block(2,2)和出射子块out-block(1.1),out-block(1,2),out-block(2.1),out-block(2,2)存储在磁盘中。
步骤(2)根据当前的磁盘读写开销选择不同的更新策略,更新策略包括基于行导向的push策略和基于列导向的pull策略,具体包括:
(2.1)分别计算当前顺序加载所有边的磁盘读写开销和随机加载活跃边的磁盘读写开销。
一个顶点被定义为活跃顶点,当且仅当该顶点的顶点值在上一轮迭代中被更新。一条边被定义为活跃边,当且仅当该条边的源顶点是活跃顶点。
读写开销用读写图数据的总数据量除以磁盘访问带宽计算。
(2.2)判断顺序加载所有边的磁盘读写开销是否大于随机加载活跃边的磁盘读写开销,若是,选择基于行导向的push策略,否则选择基于列导向的pull策略。
步骤(3)根据所述选择的更新策略,对图进行访问和对顶点值进行更新。
基于行导向的push策略,对图进行访问和对顶点值进行更新,包括以下步骤:
(1)第一行的出射子块初始为更新对象;
(2)依次对更新对象中出射子块执行更新操作,所述更新操作为:读取出射子块的每一条活跃边,更新其目的顶点的顶点值;
(3)当一行的出射子块都更新之后,用更新后的每一区间的目的顶点的顶点值更新对应区间的源顶点的顶点值;
(4)判断更新对象是否为最后一行的出射子块,若是,结束;若否,将下一行的出射子块替换为更新对象,重复步骤(2)-(3)。
图3为本发明实施例提供的基于行导向的push策略对有向图G进行更新的示意图。在这种更新策略下,系统依次更新每一行的出射子块。其中S1={1,2,3,4,5},S2={6,7,8,9,10},D1={1,2,3,4,5},D2={6,7,8,9,10}分别表示源顶点区间1,源顶点区间2,目的顶点区间1,目的顶点区间2。
如图3所示,系统首先更新第一行的出射子块,包括out-block(1.1)和out-block(1,2)。当更新每一个出射子块时,系统选择性的读取每一条活跃边,并更新其目的顶点。在这种情况下,避免了无用磁盘数据的加载和磁盘读写浪费。当每一行的出射子块更新完成后,系统会用更新后的目的顶点值来更新相应的源顶点值以保证计算结果的一致性。随后,系统更新第二行的出射子块,包括out-block(2.1)和out-block(2,2)。如图3所示,此时活跃顶点为2,5,10,在本次迭代中,系统依次读取活跃边(2,1),(2,3),(2,5),(2,6),(2,9),(5,7),(5,10),(10,4),(10,5),(10,7),并进行更新。
基于列导向的pull策略,对图进行访问和对顶点值进行更新,包括以下步骤:
(1)第一列的入射子块初始为更新对象;
(2)依次对更新对象中入射子块执行更新操作,所述更新操作为:入射子块的每个目的顶点通过读取入射边及其源顶点,更新自己的顶点值;
(3)当一列的入射子块都更新之后,用更新后的每一区间的目的顶点的顶点值更新对应区间的源顶点的顶点值;
(4)判断更新对象是否为最后一列的入射子块,若是,结束;若否,将下一列的入射子块替换为更新对象,重复步骤(2)-(3)。
图4为本发明实施例提供的按照基于列导向的pull策略对有向图G进行更新的示意图。在这种更新策略下,系统依次更新每一列的入射子块。如图4所示,系统首先更新第一列的入射子块,包括in-block(1.1)和in-block(2,1)。当更新每一个入射子块时,整个入射子块都被加载到内存中以确保磁盘的顺序访问。每个目的顶点通过读取自己的入射边及其源顶点,根据不同算法的更新特性对自己的顶点值进行更新。当每一列的入射子块更新完成后,系统用更新后的目的顶点值来更新相应的源顶点值,然后开始更新下一列的入射子块,例如图4中的in-block(1.2)和in-block(2,2)。
步骤(4)判断是否达到收敛条件,若是,执行步骤(5),否则,执行步骤(2)。
收敛条件由用户预设。本实施例中,当每个区间的顶点值{1,2,3,4,5}和{6,7,8,9,10}不被改变的时候,达到收敛条件。
步骤(5)输出图的顶点值。
系统达到收敛条件结束迭代处理,并输出图数据中的顶点值。
以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
机译: GIS一种基于GIS的主题映射方法,用于通过部分更新的土地覆被图估算非点源污染物的年度量
机译: 基于磁盘的连接零件图查询的处理方法
机译: 一种用于混合动力总成系统的基于能量的稳定策略来稳定发动机状态选择的方法和装置