一种面向大规模社交网络的图数据存储及查询方法

文档序号:8922524阅读:320来源:国知局
一种面向大规模社交网络的图数据存储及查询方法
【技术领域】
[0001]本发明涉及一种面向大规模社交网络的图数据存储及查询方法,属于软件技术领域。
【背景技术】
[0002]目前,图数据存储的主流做法是将图数据经过预处理,转化为边和顶点的记录,以顺序数据集的形式存储在分布式文件系统的大文件中。访问图数据时,以顺序扫描的方式访问存储图数据的大文件。该组织方式无法为多轮迭代的图计算应用提供有效的数据存储和访问性能,为了提高图数据的访问性能,图数据的内存管理技术成为了一个重要的趋势,如 Trinity,Giraph 等。
[0003]Neo4j是采用Key-Value存储模型的图数据库,最基本的存储单位是顶点和边,当广度遍历BFS时,获取某一顶点邻域操作的性能明显比以顶点邻域作为基本存储单位的系统要低。Neo4j所有的数据存储在磁盘上,采用内存缓存加速数据访问,可以调节内存缓存的大小,获得最佳的性能。
[0004]Trinity是由微软亚洲研宄院设计的基于内存云的图计算引擎。采用基于内存的Key-Value存储,其中key是图顶点的唯一 ID,用以定位寻址cell,cell是包含该顶点邻域内的相邻顶点信息的任意长度的连续内存字节块。图数据的每个顶点对应一个cell,cell存储在trunk中,trunk是大小不超过2GB的连续内存。
[0005]Redis也采用Key-Value存储,但是Redis只能处理集群内存可以容纳下的图数据。
[0006]Neo4j是采用Key-Value存储模型的图数据库,然而当图数据规模显著大于内存缓存的大小时,其性能也随着显著降低;当访问异地数据时,Neo4j采用按需请求的方式,无法充分利用带宽。
[0007]Trinity是由微软亚洲研宄院设计的基于内存云的图计算引擎。当数据频繁更新时,插入和删除等操作会使得cell变大或者缩小。当cell变大之后,现有的存储区域无法容纳,就需要开辟更大的存储空间装载cell,将cell从原来位置移动到新的位置;当cell缩小之后,原来的存储cell的空间中缩小的部分空余出,会产生很多内存碎片。由此可见,cell的增大和缩小会形成大量的内存碎片,从而削弱内存的利用率。Trinity采用内存紧缩和预分配更大内存的方式解决外部碎片的问题。不过无论采用何种方法,数据在内存中的搬运移动是不可避免的,并且该操作是非常耗时的。因此,在图数据频繁更新的场景下,Trinity的性能表现不理想。在Trinity中,当内存无法容纳全部图数据时,部分trunk会位于磁盘上。当请求的cell不在内存时,就需要将目标trunk全部换入内存,由于图数据访问具有随机性,数据访问的局部性很差,多个连续请求的cell有可能不在换入内存的trunk中,因此需要将新的trunk换入。在远程数据访问方面,Trinity采用按需请求的方式。
[0008]Redis也采用Key-Value存储,当图数据的数据量不断增长,超过内存容量时,只能依赖增加机器节点数目方式。当集群规模增加时,需要重新划分数据,并且做数据迀移。Redis的数据划分交由客户端完成,服务端程序无法代理异地图数据的请求。
[0009]由以上研宄工作可知,图计算的数据访问需求以及图数据的自身特点对图数据的存储提出了挑战,传统的数据存储方式比如文件系统或者分布式文件系统和Key-Value存储模型的图数据库难以高效的支持图数据访问和更新,进而不能有效的支持图计算。因此,需要根据图数据的访问特性以及图数据本身的特点设计高效的图数据存储系统。

【发明内容】

[0010]本发明的目的在于针对社交网络数据的海量性、频繁更新、随机访问以及稀疏性等特点,提供一种面向大规模社交网络的图数据存储及查询方法。
[0011]本发明能够满足邻域的随机访问。本发明设计了一种基于邻域的三级图数据存储结构。以顶点邻域为基本存储单位,顶点邻域是由固定大小内存block构成的双向链表,该双向链表中包含该顶点的所有关联边的信息,block可被直接寻址。
[0012]本发明采用零移动的数据更新机制。我们设计了一种适合图数据频繁更新的内存组织方法。图数据更新时,由block池负责block的分配和回收。和回收引起顶点邻域的缩小或者扩增时,我们只是修改双链表的首尾,并且不必紧缩存储空间消除外部碎片,也不必分配更大存储空间,将数据从原来地方搬移到新分配的空间中。此机制不但提高了内存的使用率,而且也解决了其他解决方案所面临的紧缩和移动操作。
[0013]本发明采用感知应用的远程预取策略。图数据的单次数据请求的数据访问量少,引起频繁的远程1操作。使用该策略,在当前的异地数据请求处理时,预测后续计算的所需数据,然后该预测数据与当前请求数据一同返回给客户进程,缓存在其本地。通过该机制能够显著降低1次数,提供数据访问的可预测性和有效性。本发明分析总结常见的图算法,根据每轮更新中需要参考图中的哪些顶点,这些算法可以分为两类,即邻域算法和非邻域算法。在邻域算法中,每一轮迭代更新每个顶点属性值时仅需访问相邻顶点的值。而在非邻域算法中,更新每个顶点属性值还需要访问除邻域外其它顶点的值。
[0014]本发明的技术方案为:
[0015]一种面向大规模社交网络的图数据存储方法,其步骤为:
[0016]I)数据存储管理器对收到的图数据采用Key-Value方式存储,其中以图数据的顶点ID为Key,以顶点邻域为Value ;
[0017]2)对每一顶点邻域的数据存储:将与该顶点邻域对应顶点相连的多条边以时间戳有序存储到固定大小的内存块Block中,并使用链表结构将所占用的内存块Block构成Block双向链表,将该顶点的属性信息和指向该Block双向链表头部和尾部的索引信息存储到一数据结构Vertex中。
[0018]进一步的,所述内存块Block由一负责存储资源分配的Block池管理器进行分配与回收;所述Block双向链表中的内存块Block包括三部分:第一部分为指向Block双向链表中当前内存块Block的前一个内存块Block的指针,第二部分为指向Block双向链表中当前内存块Block的后一个Block的指针,第三部分为当前内存块Block存储的边。
[0019]进一步的,所述步骤2)中,当一顶点有新边需要存储到顶点邻域时,将该新边按时间戳排序,查看Block双向链表头部的Block是否未满,如果未满,则将该新边追加在该Block的头部;如果头部的Block已满,则由Block池管理器分配一新的内存块Block并添加到该Block双向链表的头部,然后将该新边存储到该新内存块Block中。
[0020]进一步的,每一所述内存块Block中设有一数据域,用于保存所存边的时间戳区间;当对顶点领域中的边进行删除时,从Block双向链表尾部的内存块Block开始选取一边,如果该边的时间戳小于尾部内存块Block的时间戳区间下界,则结束删除操作,如果该边的时间戳大于该时间戳区间的上界,则从该Block双向链表末尾移除该内存块Block;如
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1