一种基于键值对存储的图计算方法与流程

文档序号:19664407发布日期:2020-01-10 21:26阅读:287来源:国知局
一种基于键值对存储的图计算方法与流程

本发明涉及一种分布式计算的通信方法,特别是涉及一种分布式系统处理查询任务的通信方法。



背景技术:

随着互联网的发展和大数据时代的到来,图数据的研究越来越受到重视。很多的关系型数据都可以被抽象成图结构数据,包括社交网络的数据,知识图谱,网页之间的链接关系等。目前对于图数据的研究主要有图计算系统和图查询系统两个方面。

图计算系统通常在全图上运行复杂的算法,例如pagerank,sssp(单源最短路径)等,需要遍历全图所有的顶点,经过多轮的迭代后再将结果返回。因此为了获得更好的性能,图计算在系统底层存储使用了遍历访问友好的压缩稀疏矩阵(compressedsparserowcsr和compressedsparsecolunmcsc)存储结构,并且在图的划分上和数据传输上提出了很多的优化。在图查询系统中,通常只需要访问图上小部分特定的顶点,但对于查询任务时延要求很高,因此底层通常使用键值对的方式存储图数据,然后通过哈希表可以快速访问到特定的键。

目前图查询和图计算系统是相互独立的研究,而在实际应用中,两者通常是同时存在的。对于一份数据,例如有一份关于社交网络好友关系的图数据,用户通常会有在上面进行好友查询的需求(图查询),也会有对图数据分析进行好友推荐的需求(图计算)。目前解决方法需要需要将同一份数据加载到两个不同的系统中,这样会带来存储空间浪费,数据一致性等问题。

键值对存储(key-valuestore)具有结构简单,可扩展性强,方便查找等特点,被广泛应用于图查询系统中。因此如果能够在键值对存储上高效地支持图计算,则可以很方便地在同一个系统同时支持图计算和图查询操作。而直接在键值对存储实现高效图计算面临着许多的挑战:一是图计算引擎在遍历访问所有的顶点时,都需要通过哈希表查找来,这会造成很大的性能开销;二是在键值对存储模式下,图计算引擎如何进行高效地数据传播和更新。

因此如何设计一种基于键值对存储的图计算方法,能够克服原先键值对存储对于图数据遍历不够高效的缺点,减少图计算过程数据传输的开销,已经成为了使用键值对存储来进行图计算的难题。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种基于键值对存储的图计算方法,该方法适用于基于键值对存储模式下的分布式图系统,能加快对于图上边数据遍历速度,减少通讯开销,提高服务器进行图计算的性能。

根据本发明提供的一种基于键值对存储的图计算方法,包括:

存储步骤:服务器加载原始图数据集,按照键值对的方式存储到内存中。

构建索引步骤:针对图计算任务,为键值对存储增加遍历索引。

解析任务步骤:服务端接收客户端发送过来的图计算请求,将其解析完成后发送给图计算引擎执行。

键值更新步骤:图计算引擎通过遍历索引访问图数据,更新本地键值存储中属于键的顶点(键顶点),并且将更新的键顶点发送给远方服务器。

本地数据更新步骤:接收其它服务器发送过来的更新数据,然后对本地数据进行更新。至此,一次迭代计算完成。

计算返回步骤:如果图计算任务迭代未结束,重复键值更新步骤和本地数据更新步骤;若所有计算已经完成,则将计算结果返回给客户端。

优选地,所述存储步骤包括:将图数据加载到内存中,以键值对(key-value)的方式进行存储。其中键包括了被分配在这台机器上的顶点id(通常以hash的方式),边的类型等信息,其被保存在一张哈希表中;值是键中顶点对应的所有邻居顶点的集合。

优选地,所述构建索引步骤包括:

排列存储步骤:将键值对中的值存储按照键中顶点id从小到大排列,并且连续的存储在事先分配好的一块内存中。

遍历索引建立步骤:建立遍历索引,索引以数组的方式进行存储。数组的下标x对应原先键中顶点从小到大排列的第x个顶点。数组中x位置存储的值为对应键在值存储中的起始位置。图计算可以通过遍历该索引,获得图上所有的边信息。

优选地,所述解析任务步骤包括:接收客户端发送过来的图计算请求,请求包括需要执行图计算算法,还有对应的参数。解析完成后将参数传递给图计算引擎,图计算引擎执行相应的算法。

优选地,所述键值更新步骤包括:

信息访问步骤:图计算引擎执行图计算任务时,逐个访问本地键值存储中属于键的顶点(键顶点)的邻边信息。对于键顶点的访问,是通过对遍历索引进行遍历,而不是通过哈希表逐个查找,顺序访问索引直接获取键顶点和其对应邻边顶点的信息。

状态获取、保存步骤:获取到键顶点和邻边信息后,根据顶点id可以获得对应顶点的当前的状态。根据不同的算法需求(用户定义),通过邻居顶点当前状态来更新键顶点自身的状态,并且将键顶点新状态保存下来。

更新准备步骤:将所有更新完成的键顶点的状态发送给其它所有的机器,由远端机器去更新顶点的状态,为下一轮计算做准备。

优选地,所述本地数据更新步骤包括:

接收更新数据步骤:接收其它机器在键值更新步骤中发送过来的键顶点的更新的数据,接收的数据中包含顶点id以及该顶点新状态。

数据替换步骤:进行数据更新时,对于本地键顶点,直接使用本地保存的新状态替换旧状态;对于其它的顶点,根据接收到数据的顶点id去更新对应顶点的状态。更新完成后,所有的顶点都处于新的状态。

优选地,所述计算返回步骤包括:当所有的更新操作完成后,判断当前执行属于图计算任务中第几次迭代,如果仍有迭代未完成,则继续执行键值更新步骤和本地数据更新步骤;如果所有迭代都已经完成,则汇总结果,返回给用户。

与现有技术相比,本发明具有如下的有益效果:

1、本发明提出了一种基于键值对存储的图计算方法,为键值对存储增加图遍历索引,使得图计算引擎对于图上边数据的遍历无需通过哈希表查找每个顶点对应的键,获取对应的邻居顶点的存储位置,而是通过遍历索引可以直接获得邻居顶点的存储位置,减少了哈希表查找的开销,大大提高了图计算的性能。

2、本发明提出了一种基于键值对存储的图计算方法,将值的位置按照键顶点的顺序从小到大连续存储,使得图计算引擎在对边上顶点进行访问时具有很好的空间局部性,提高了图计算的速度。

3、本发明提出了一种基于键值对存储的图计算方法,通过使用对键顶点进行本地更新,在不同机器间进行键顶点更新同步的方式,使得顶点数据的聚集操作都在本地进行,并且不同服务器间数据传递只需o(v)(v为图上顶点的数量),避免了现有技术需要o(e)数据发送量(e为图上边的数量),大大减少了通讯的开销,提高了图计算的速度。

4、本发明提出了一种基于键值对存储的图计算方法,克服了现有技术使用键值对存储来进行图计算性能低效的问题,为之后利用键值对存储进行更加复杂的混合计算提供了借鉴的意义。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1是本发明提供的基于键值对存储的图计算方法的流程图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

根据本发明提供的一种基于键值对存储的图计算方法,包括如下步骤:

存储步骤:多台机器启动加载图数据集,按照键值对的方式加数据存储到内存中。

构建索引步骤:针对图计算任务,为键值对存储增加遍历索引。

解析任务步骤:服务端接收客户端发送过来的图计算请求,将其解析完成后发送给图计算引擎执行。

键值更新步骤:图计算引擎通过遍历索引访问图数据,更新本地键值存储中属于键的顶点(键顶点),并且将更新的键顶点发送给远方服务器。

本地数据更新步骤:接收其它服务器发送过来的更新数据,然后对本地数据进行更新。至此,一次迭代计算完成。

计算返回步骤:如果图计算任务迭代未结束,重复键值更新步骤和本地数据更新步骤;若所有计算已经完成,则将计算结果返回给客户端。

所述存储步骤包括:多台机器启动加载图数据集,图数据会被划分在多台机器上。顶点通过哈希函数被分配到唯一的一台机器,然后将顶点id,边的类型等信息共同构成键,该顶点也称为该机器上的键顶点,值为该顶点所有该类型的边的目标顶点的集合。键会被存放在哈希表,便于之后的查询和访问。

所述构建索引步骤包括:

排列存储步骤:对原先值的存储顺序进行调整,先按照键顶点id的大小顺序排列,同一键顶点id的邻居顶点之间也按照顶点id大小顺序排列,并且连续存储在一块预先分配好的内存中,记录该存储区域的起始位置

遍历索引建立步骤:新建一个遍历索引数组,数组大小为分配在当前机器顶点数据加一。数组的下标x对应键顶点从小到大排列的第x个顶点,数组中x位置存储的值为对应键顶点在值存储中的起始位置,索引数组的最后一位存储了值区域中最后一位的位置。具体地,当访问索引数据的第x位时,先计算出该位置对应的键顶点id,然后在根据索引得到值存储区域的起始地址,因为值区域时连续存储的,因此索引中第x位对应的值的结束地址为索引中第x+1位的起始地址。

进一步具体地,通过添加该索引,在图数据的顺序遍历的过程中避免了哈希表查找,而可以通过索引直接得到邻居的顶点。相比于原先的顶点访问需要先构建对应的键,然后通过哈希表进行匹配,最后才能获取邻居顶点的信息的方式,现在通过索引只需一次访存操作即可,大大提高了计算的性能。同时边的数据是连续存储的,使得数据的遍历有着很好的空间局部性。

所述解析发送步骤包括:接收客户端发送过来的图计算请求,请求包括需要执行图计算算法,还有对应的参数。解析完成后将参数传递给图计算引擎,图计算引擎执行相应的算法。图计算算法需要预先根据图计算引擎提供的接口进行实现。图计算引擎提供的接口主要包括两种:定义顶点和定义边上的计算。

所述键值更新步骤包括:

信息访问步骤:图计算引擎执行图计算任务时,逐个访问本地键值存储中属于键的顶点(键顶点)的邻边信息。对于键顶点的访问,通过对遍历索引遍历,而不是通过哈希表查找,顺序访问索引可以直接获取键顶点和其对应邻边顶点的信息。

状态获取、保存步骤:获取到键顶点和邻边信息后,根据顶点id获得对应顶点的当前的状态,然后根据不同的算法需求(用户定义),通过聚集邻居顶点当前状态来更新键顶点自身的状态。系统使用一个全图顶点数量大小的数组(current_state)来记录所有的顶点当前的状态,以及一个本地键顶点数量的大小的数组(update_key_state)记录了该步骤中更新的顶点的状态。根据键值对的存储特点,键顶点的边信息都可以在本地获取,则聚集更新操作在本地就可以完成。

更新准备步骤:将键顶点的更新状态先记录在update_key_state数组中,当所有的键顶点更新完成,再将一起将该数组的更新数据依次发送给其它机器,由远端的机器去更新对应顶点的状态,为下一轮计算做准备。

所述本地数据更新步骤包括:

接收更新数据步骤:使用普通网络tcp或者高速网络rdma接收其它机器在键值更新步骤中发送过来的键顶点的更新的数据,接收到更新信息包括顶点id以及该顶点的新状态。将不同机器的发送过来的的顶点更新保存下来,为接下来更新做准备。

数据替换步骤:进行数据更新,也就是更新current_state数组中的值。对于本地键顶点,直接使用本地保存的update_key_state数据对其进行更新;对于其它的顶点,根据接收到数据的顶点id和新的状态去修改current_state数组中对应顶点的值。因为所有机器的键顶点之和就等于全图所有顶点,所以current_state数组中所有数据都会被更新成新的值。

进一步具体地,在键值对的存储模式下,每个顶点会被划分到唯一一台机器上成为键顶点,且该机器上有其所有的边的信息。因此利用了键顶点的聚集和更新操作可以本地进行的特点,让每台机器负责键顶点的更新,然后所有机器间再互换键顶点的新状态,汇总得到所有顶点的更新状态。这样机器间的通讯开销o(v)(v为顶点的数量),避免了跨机器聚集可能造成的o(e)开销(e为边的数量),减少了通讯的开销,提高图计算的性能。

所述计算返回步骤包括:当所有的更新操作完成后,判断当前执行属于图计算任务中第几次迭代,如果仍有迭代未完成,则继续执行键值更新步骤和本地数据更新步骤;如果所有迭代都已经完成,则汇总结果,返回给用户。

综上所诉,本发明使用了遍历索引,避免了通过哈希表访问图数据的开销,加快图数据遍历速度,同时充分利用键值对的分布特点来进行数据的传播和更新,减少了通讯的开销,使得在键值对的存储模式下也能进行高效的图计算。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

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