本发明属于数据划分领域,更具体地,涉及一种基于属性图的大规模关联数据划分方法及系统。
背景技术:
目前由于社会网络分析、机器学习和数据挖掘等领域的快速发展,关联数据呈现爆炸式增长。关联数据是国际互联网协会(w3c)推荐的一种规范,用来发布和连接各类数据、信息和知识。由于数据量的增加,关联数据之间的语义关系也变得非常复杂。
随着关联数据的规模不断扩张,在单一节点上进行存储操作已变得越发困难,单一计算节点的存储能力远远低于数据的增长量。目前针对单一节点无法处理大数据的问题主要的解决手段是将大规模数据进行划分。将划分后的数据子集存储到各个分区之中,通过并行或者分布式算法等手段在分区之中读取操作数据从而实现对整体数据的计算。
为了实现对大规模关联数据的划分,现有的方法大多利用图数据模型表示大规模管理数据,然后基于图数据的划分完成对关联数据的划分。其中,hash-partition(哈希划分)是一种常用基于图数据划分的关联数据划分方法。对常见的普通图来说,对节点的id进行hash计算得到哈希值,根据不同的值将数据划分到不同的分区。这种方式非常依赖于计算哈希值的哈希随机函数,如果哈希随机函数效果不错,本质就是对图上的数据进行随机的划分,因此所得的分区数据能保持均衡。并且,在数据量巨大的同时,哈希划分确保可以在不使用分布式框架的情况下并行执行图划分操作。虽然在数据划分的前期,哈希划分的方式可以非常快速地得到均衡的划分分区,可是后期的图数据操作会变得非常耗时。哈希划分方法虽然确实可以将数据相对均衡地分布到各个分区之中,但是哈希划分方法没有顾及到数据之间图的结构,因此极有可能造成没有将语义相关程度较高或者关联紧密的数据划分到相同的分区,不仅使得数据之间的语义信息无效,甚至后期查询中必须执行开销巨大的分布式连接(join)操作,以合并查询过程中的中间结果获得最后的输出,在此过程中涉及大量的跨分区通信。哈希划分方法后期数据操作会造成非常高昂的代价,涉及到并行的操作将会造成非常巨大的通信开销。
技术实现要素:
针对现有技术的缺陷和改进需求,本发明提供了一种基于属性图的大规模关联数据划分方法及系统,其目的在于,减少数据查询过程中的跨分区通信,提高数据查询效率。
为实现上述目的,按照本发明的一个方面,提供了一种基于属性图的大规模关联数据划分方法,包括:
(1)根据待划分的关联数据构建属性图;
(2)获得属性图中所有路径的起始顶点,从而得到起始顶点集;
(3)遍历起始顶点集,以所遍历到的起始顶点为路径起点,获得属性图中满足路径属性间约束的路径并构成一个路径组,从而在遍历结束后,得到多个路径组;
(4)以路径组为单位对关联数据进行划分,从而得到k个划分块;
其中,k为分布式图数据管理系统中的机器节点数。
上述基于属性图的大规模关联数据划分方法,利用属性图数据模型表示待划分的大规模关联数据,由于属性图中点和边都包含多种属性,能更为直观地表达复杂的语义信息,所以本发明在对关联数据进行划分时能充分利用数据中的语义信息;本发明针对每一个起始顶点,筛选出满足路径属性间约束的路径并构成路径组,最终基于路径组对关联数据进行划分,所得到的划分块包含一个或多个路径组,由于每一个路径组中所包含的路径在语义上相互关联,因此位于同一个语义层的数据会被划分到同一个划分块中;由于数据查询操作通常能够在单个语义层中完成,因此,基于本发明,后期对关联数据的查询操作可在一个划分块中完成,由此能够有效减少跨分区通信,提高数据查询效率。
进一步地,步骤(2)包括:
(21)标记属性图中的每个顶点为激活状态,并初始化全局状态变量为激活状态;
(22)对于顶点n,若所接收到的来自其邻居节点的可达信息被更新,则标记顶点n的状态为激活状态,并设置全局状态变量为激活状态;否则,标记顶点n的状态为未激活状态,并设置全局状态变量为未激活状态;
顶点的可达信息包括可达该顶点的顶点集合,以及该顶点的特征顶点;顶点的特征顶点为可达该顶点的id最小的顶点,或者顶点的特征顶点为可达该顶点的id最大的顶点;顶点的可达信息只能由该顶点传播至下一个被遍历到的邻居节点;
(23)若顶点n的状态为激活状态,则获得其可达信息,并传播至其邻居节点;
(24)遍历属性图,对于所遍历到的每一个顶点,分别执行步骤(22)~(23),以完成一轮迭代;
(25)若当前的一轮迭代中,全局状态变量未被更新,则迭代结束,转入步骤(26);否则,转入步骤(24),以开始下一轮迭代;
(26)遍历属性图,以从各顶点的可达信息提取特征顶点并构成第一候选集合,同时获得属性图中入度为0的顶点并构成第二候选集合;
(27)取第一候选集合和第二候选集合的并集,得到起始顶点集;
其中,顶点的id用于唯一标识顶点。
进一步地,步骤(3)包括:
(31)对于起始顶点集中的顶点ns,以顶点ns为起点进行深度遍历,从而得到属性图中所有以顶点ns为起点的路径;
(32)根据路径间属性约束对所得到的路径进行筛选,从而得到属性图中以顶点ns为起点的语义可达路径;
(33)利用以顶点ns为起点的语义可达路径构成一个路径组;
(34)遍历起始顶点集,对所遍历到的每一个起始顶点,分别执行步骤(31)~(33),从而得到多个路径组。
作为进一步优选地,步骤(33)包括,将以顶点ns为起点的语义可达路径在起始顶点处合并,从而得到以顶点ns为根节点的树状结构,将树状结构作为一个路径组;
通过合并,对于起始顶点相同的语义可达路径,仅需保存一份起始顶点,由此能够节省大量的存储空间。
作为进一步优选地,将以顶点ns为起点的语义可达路径在起始顶点处合并,包括:
获得各语义可达路径的获益率;
按照获益率递减的顺序,依次取语义可达路径进行合并;
其中,获益率用于衡量语义可达路径的合并效率,与路径长度反相关;
优先合并获益率高的语义可达路径,可以提高合并效率。
可选地,步骤(4)包括:
(41)将每一个路径组作为一个路径组集合;
(42)若路径组集合的数量c>k,则根据包含的路径数量由多到少或由少到多的顺序对所有的路径组进行排序,得到有序的集合序列后,转入步骤(43)以开始一轮划分迭代;否则,转入步骤(45);
(43)分别获得有序集合中序号最小且在当前划分迭代中未合并过的第一路径组集合,以及序号最大且在当前划分迭代中未合并过的第二路径组集合,利用第一路径组集合和第二路径组集合中的所有路径组构成新的路径组集合;
(44)若组合得到新的路径组之后,路径组集合的数量d1≤k,则转入步骤(45);若d1>k,并且在当前划分迭代中未划分过的路径组数量d2≥2,则转入步骤(43);若d1>k,且d2<2,则当前划分迭代结束,转入步骤(42)以开始新一轮的划分迭代;
(45)将每一个路径组集合作为一个划分块,划分结束;
上述方法在进行关联数据划分的时候,按照路径数量对路径组集合进行排序,并利用有序集合首尾的路径组集合合并得到新的路径组集合,由此能够保证使得最终得到的各路径组集合(即划分块)所包含的路径数量较为平衡,从而达到了负载均衡的效果。
可选地,步骤(4)包括:
预先建立k个空的划分块;
按照包含路径数量降序的顺序对所有路径组进行排序,从而得到有序的路径组序列;
按顺序遍历路径组序列,将所遍历到的路径组分配到包含路径数量最少的划分块中,从而在遍历结束后得到划分好的k个数据块;
上述方法能够保证划分得到的各划分块所包含的路径数量较为平衡,从而达到负载均衡的效果。
按照本发明的另一个方面,提供了一种基于属性图的大规模关联数据划分系统,包括:属性图建立模块、起始顶点获取模块、路径组获取模块以及划分模块;
属性图建立模块,用于根据待划分的关联数据构建属性图;
起始顶点获取模块,用于获得属性图中所有路径的起始顶点,从而得到起始顶点集;
路径组获取模块,用于遍历起始顶点集,以所遍历到的起始顶点为路径起点,获得属性图中满足路径属性间约束的路径并构成一个路径组,从而在遍历结束后,得到多个路径组;
划分模块,用于以路径组为单位对关联数据进行划分,从而得到k个划分块;
其中,k为分布式图数据管理系统中的机器节点数。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明所提供的基于属性图的大规模关联数据划分方法及系统,利用属性图数据模型标识待划分的大规模关联数据,充分保留了关联数据的语义信息;针对每一个起始顶点,筛选出满足路径属性间约束的路径并构成路径组,最终基于路径组对关联数据进行划分,使得位于同一个语义层的数据被划分到同一个划分块中,从而数据查询操作可在一个划分块中完成。因此,本发明能够有效减少跨分区通信,提高数据查询效率。
(2)本发明所提供的基于属性图的大规模关联数据划分方法及系统,在其优选方案中,在构建路径组时,通过合并语义可达路径,使得对于起始顶点相同的语义可达路径,仅需保存一份起始顶点,由此能够节省大量的存储空间。
(3)本发明所提供的基于属性图的大规模关联数据划分方法及系统,在其优选方案中,在以路径组为单位进行关联数据划分的时候,会保证划分得到的划分块所包含的路径数量较为平衡,从而达到了负载均衡的效果。
附图说明
图1为本发明实施例提供的基于属性图的大规模关联数据划分方法流程图;
图2为本发明实施例提供的起始顶点集构建方法示意图;
图3为本发明实施例提供的语义可达路径合并示意图;
图4为本发明实施例提供的语义可达路径筛选示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明所提供的基于属性图的大规模关联数据划分方法,如图1所示,包括:
(1)根据待划分的关联数据构建属性图;
在构建属性图时,可根据实际的应用需求自行定义具体的属性图数据模型;在一个可选的实施方式中,所定义的属性图数据模型为:
g=(v,e,a,fv,fe);
其中,v是图数据中所有顶点的集合,e是图数据中所有边的集合,即是说
(2)获得属性图中所有路径的起始顶点,从而得到起始顶点集;
在一个可选的实施方式中,如图2所示,步骤(2)具体包括:
(21)标记属性图中的每个顶点为激活状态,并初始化全局状态变量为激活状态;
(22)对于顶点n,若所接收到的来自其邻居节点的可达信息被更新,则标记顶点n的状态为激活状态,并设置全局状态变量为激活状态;否则,标记顶点n的状态为未激活状态,并设置全局状态变量为未激活状态;
顶点的可达信息包括可达该顶点的顶点集合,以及该顶点的特征顶点;顶点的特征顶点为可达该顶点的id最小的顶点,或者顶点的特征顶点为可达该顶点的id最大的顶点;顶点的可达信息只能由该顶点传播至下一个被遍历到的邻居节点;
(23)若顶点n的状态为激活状态,则获得其可达信息,并传播至其邻居节点;
(24)遍历属性图,对于所遍历到的每一个顶点,分别执行步骤(22)~(23),以完成一轮迭代;
(25)若当前的一轮迭代中,全局状态变量未被更新,则迭代结束,转入步骤(26);否则,转入步骤(24),以开始下一轮迭代;
(26)遍历属性图,以从各顶点的可达信息提取特征顶点并构成第一候选集合,同时获得属性图中入度为0的顶点并构成第二候选集合;
(27)取第一候选集合和第二候选集合的并集,得到起始顶点集;
其中,顶点的id用于唯一标识顶点;
(3)遍历起始顶点集,以所遍历到的起始顶点为路径起点,获得属性图中满足路径属性间约束的路径并构成一个路径组,从而在遍历结束后,得到多个路径组;
在一个可选的实施方式中,步骤(3)具体包括:
(31)对于起始顶点集中的顶点ns,以顶点ns为起点进行深度遍历,从而得到属性图中所有以顶点ns为起点的路径;
(32)根据路径间属性约束对所得到的路径进行筛选,从而得到属性图中以顶点ns为起点的语义可达路径;
(33)利用以顶点ns为起点的语义可达路径构成一个路径组;
在本实施例中,步骤(33)具体包括,将以顶点ns为起点的语义可达路径在起始顶点处合并,从而得到以顶点ns为根节点的树状结构,将树状结构作为一个路径组;图3所示为合并语义可达路径后所得到的路径组示意图;
通过合并,对于起始顶点相同的语义可达路径,仅需保存一份起始顶点,由此能够节省大量的存储空间;
在本实施例中,为了提高合并效率,将以顶点ns为起点的语义可达路径在起始顶点处合并,具体包括:
获得各语义可达路径的获益率;
按照获益率递减的顺序,依次取语义可达路径进行合并;
其中,获益率用于衡量语义可达路径的合并效率,与路径长度反相关,例如,可以是路径长度的倒数;
优先合并获益率高的语义可达路径,可以提高合并效率;
应当理解的是,在构建路径组时合并语义可达路径,仅仅是一种优选的方案,不应理解为对本发明的唯一限定,在其他对于存储要求不高的应用中,也可以针对每一个语义可达路径保存一份起始顶点;
(34)遍历起始顶点集,对所遍历到的每一个起始顶点,分别执行步骤(31)~(33),从而得到多个路径组;
(4)以路径组为单位对关联数据进行划分,从而得到k个划分块;
其中,k为分布式图数据管理系统中的机器节点数;
在一个可选的实施方式中,步骤(4)具体包括:
(41)将每一个路径组作为一个路径组集合;
(42)若路径组集合的数量c>k,则根据包含的路径数量由多到少或由少到多的顺序对所有的路径组进行排序,得到有序的集合序列后,转入步骤(43)以开始一轮划分迭代;否则,转入步骤(45);
(43)分别获得有序集合中序号最小且在当前划分迭代中未合并过的第一路径组集合,以及序号最大且在当前划分迭代中未合并过的第二路径组集合,利用第一路径组集合和第二路径组集合中的所有路径组构成新的路径组集合;
(44)若组合得到新的路径组之后,路径组集合的数量d1≤k,则转入步骤(45);若d1>k,并且在当前划分迭代中未划分过的路径组数量d2≥2,则转入步骤(43);若d1>k,且d2<2,则当前划分迭代结束,转入步骤(42)以开始新一轮的划分迭代;
(45)将每一个路径组集合作为一个划分块,划分结束;
上述方法在进行关联数据划分的时候,按照路径数量对路径组集合进行排序,并利用有序集合首尾的路径组集合合并得到新的路径组集合,由此能够保证使得最终得到的各路径组集合(即划分块)所包含的路径数量较为平衡,从而达到了负载均衡的效果;
在另一个可选的实施方式中,可选地,步骤(4)具体包括:
预先建立k个空的划分块;
按照包含路径数量降序的顺序对所有路径组进行排序,从而得到有序的路径组序列;
按顺序遍历路径组序列,将所遍历到的路径组分配到包含路径数量最少的划分块中,从而在遍历结束后得到划分好的k个数据块;
上述方法能够保证划分得到的各划分块所包含的路径数量较为平衡,从而达到负载均衡的效果。
上述基于属性图的大规模关联数据划分方法,利用属性图数据模型表示待划分的大规模关联数据,由于属性图中点和边都包含多种属性,能更为直观地表达复杂的语义信息,所以本发明在对关联数据进行划分时能充分利用数据中的语义信息;本发明针对每一个起始顶点,筛选出满足路径属性间约束的路径并构成路径组,最终基于路径组对关联数据进行划分,所得到的划分块包含一个或多个路径组,由于每一个路径组中所包含的路径在语义上相互关联,因此位于同一个语义层的数据会被划分到同一个划分块中;由于数据查询操作通常能够在单个语义层中完成,因此,基于本发明,后期对关联数据的查询操作可在一个划分块中完成,由此能够有效减少跨分区通信,提高数据查询效率。
为进一步解释本发明,下面结合图4对本发明中所涉及到的语义可达路径作进一步说明。
在本发明中,语义可达是针对一项具体的属性而言的。如图4所示,给定一个航空路线图,其中顶点代表了具有某些属性的城市,边代表航班行程。对于一次航行来说,有起点城市、中转城市(可能有也可能没有)和终点城市。如果起始城市v0具有一个起飞时间的属性且有确切的指,即是说若有
本发明还提供了一种基于属性图的大规模关联数据划分系统,用于实现上述基于属性图的大规模关联数据划分方法,该系统包括:属性图建立模块、起始顶点获取模块、路径组获取模块以及划分模块;
属性图建立模块,用于根据待划分的关联数据构建属性图;
起始顶点获取模块,用于获得属性图中所有路径的起始顶点,从而得到起始顶点集;
路径组获取模块,用于遍历起始顶点集,以所遍历到的起始顶点为路径起点,获得属性图中满足路径属性间约束的路径并构成一个路径组,从而在遍历结束后,得到多个路径组;
划分模块,用于以路径组为单位对关联数据进行划分,从而得到k个划分块;
其中,k为分布式图数据管理系统中的机器节点数;
在本发明实施例中,各模块的具体实施方式,可参考上述方法实施例中的描述,在此将不作复述。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。