[发明专利]一种面向大规模社交网络的图数据存储及查询方法有效
申请号: | 201510229346.3 | 申请日: | 2015-05-07 |
公开(公告)号: | CN104899156B | 公开(公告)日: | 2017-11-14 |
发明(设计)人: | 周薇;包秀国;马宏远;程工;冉攀峰;刘春阳;王卿;韩冀中;庞琳;李雄;贺敏;刘玮 | 申请(专利权)人: | 中国科学院信息工程研究所;国家计算机网络与信息安全管理中心 |
主分类号: | G06F12/06 | 分类号: | G06F12/06 |
代理公司: | 北京君尚知识产权代理事务所(普通合伙)11200 | 代理人: | 司立彬 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 大规模 社交 网络 数据 存储 查询 方法 | ||
技术领域
本发明涉及一种面向大规模社交网络的图数据存储及查询方法,属于软件技术领域。
背景技术
目前,图数据存储的主流做法是将图数据经过预处理,转化为边和顶点的记录,以顺序数据集的形式存储在分布式文件系统的大文件中。访问图数据时,以顺序扫描的方式访问存储图数据的大文件。该组织方式无法为多轮迭代的图计算应用提供有效的数据存储和访问性能,为了提高图数据的访问性能,图数据的内存管理技术成为了一个重要的趋势,如Trinity,Giraph等。
Neo4j是采用Key-Value存储模型的图数据库,最基本的存储单位是顶点和边,当广度遍历BFS时,获取某一顶点邻域操作的性能明显比以顶点邻域作为基本存储单位的系统要低。Neo4j所有的数据存储在磁盘上,采用内存缓存加速数据访问,可以调节内存缓存的大小,获得最佳的性能。
Trinity是由微软亚洲研究院设计的基于内存云的图计算引擎。采用基于内存的Key-Value存储,其中key是图顶点的唯一ID,用以定位寻址cell,cell是包含该顶点邻域内的相邻顶点信息的任意长度的连续内存字节块。图数据的每个顶点对应一个cell,cell存储在trunk中,trunk是大小不超过2GB的连续内存。
Redis也采用Key-Value存储,但是Redis只能处理集群内存可以容纳下的图数据。
Neo4j是采用Key-Value存储模型的图数据库,然而当图数据规模显著大于内存缓存的大小时,其性能也随着显著降低;当访问异地数据时,Neo4j采用按需请求的方式,无法充分利用带宽。
Trinity是由微软亚洲研究院设计的基于内存云的图计算引擎。当数据频繁更新时,插入和删除等操作会使得cell变大或者缩小。当cell变大之后,现有的存储区域无法容纳,就需要开辟更大的存储空间装载cell,将cell从原来位置移动到新的位置;当cell缩小之后,原来的存储cell的空间中缩小的部分空余出,会产生很多内存碎片。由此可见,cell的增大和缩小会形成大量的内存碎片,从而削弱内存的利用率。Trinity采用内存紧缩和预分配更大内存的方式解决外部碎片的问题。不过无论采用何种方法,数据在内存中的搬运移动是不可避免的,并且该操作是非常耗时的。因此,在图数据频繁更新的场景下,Trinity的性能表现不理想。在Trinity中,当内存无法容纳全部图数据时,部分trunk会位于磁盘上。当请求的cell不在内存时,就需要将目标trunk全部换入内存,由于图数据访问具有随机性,数据访问的局部性很差,多个连续请求的cell有可能不在换入内存的trunk中,因此需要将新的trunk换入。在远程数据访问方面,Trinity采用按需请求的方式。
Redis也采用Key-Value存储,当图数据的数据量不断增长,超过内存容量时,只能依赖增加机器节点数目方式。当集群规模增加时,需要重新划分数据,并且做数据迁移。Redis的数据划分交由客户端完成,服务端程序无法代理异地图数据的请求。
由以上研究工作可知,图计算的数据访问需求以及图数据的自身特点对图数据的存储提出了挑战,传统的数据存储方式比如文件系统或者分布式文件系统和Key-Value存储模型的图数据库难以高效的支持图数据访问和更新,进而不能有效的支持图计算。因此,需要根据图数据的访问特性以及图数据本身的特点设计高效的图数据存储系统。
发明内容
本发明的目的在于针对社交网络数据的海量性、频繁更新、随机访问以及稀疏性等特点,提供一种面向大规模社交网络的图数据存储及查询方法。
本发明能够满足邻域的随机访问。本发明设计了一种基于邻域的三级图数据存储结构。以顶点邻域为基本存储单位,顶点邻域是由固定大小内存block构成的双向链表,该双向链表中包含该顶点的所有关联边的信息,block可被直接寻址。
本发明采用零移动的数据更新机制。我们设计了一种适合图数据频繁更新的内存组织方法。图数据更新时,由block池负责block的分配和回收。和回收引起顶点邻域的缩小或者扩增时,我们只是修改双链表的首尾,并且不必紧缩存储空间消除外部碎片,也不必分配更大存储空间,将数据从原来地方搬移到新分配的空间中。此机制不但提高了内存的使用率,而且也解决了其他解决方案所面临的紧缩和移动操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所;国家计算机网络与信息安全管理中心,未经中国科学院信息工程研究所;国家计算机网络与信息安全管理中心许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510229346.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:立式机械原理考试装置
- 下一篇:一种交互式英语学习小组协作讨论教学平台