将图存储在持久存储中的最佳方法是什么?

时间:2010-06-04 05:31:06

标签: database graph storage persistent neo4j

我想知道在持久存储中存储图形的最佳方法是什么,以供以后分析,搜索,聚类等。

我看到neo4j是一个选项,我很好奇是否还有其他图形数据库可用。有没有人对大型社交网络如何存储基于图表的数据(或其他需要存储图形模型的网站,例如RDF)有任何见解。

像Cassandra或MySQL这样的选项呢?

4 个答案:

答案 0 :(得分:14)

图表数据库:

  1. HyperGraphDB:通用,可扩展,可移植,分布式,可嵌入,开源的数据存储机制。
  2. InfoGrid:一个互联网图形数据库,其中包含许多其他软件组件,可以轻松地在图形基础上开发REST-ful Web应用程序。
  3. vertexdb:支持自动垃圾收集的高性能图数据库服务器。
  4. 来源:http://nosql.mypopescu.com/post/498705278/quick-review-of-existing-graph-databases

    图表库:

    1. WebGraph是研究网络图的框架。 从他们的页面 - “它提供了管理非常大的图形的简单方法,利用现代压缩技术。”
    2. Dex是一个用于管理超大型图形或网络的高性能库。
    3. 此博客文章 - On Building a Stupidly Fast Graph Database - 提供了构建图形数据库的一些指导原则 - 该技术 他们使用的是“内存映射I / O,基于磁盘的线性散列”。

答案 1 :(得分:4)

免责声明:我是从图表分析角度发言的。

有多种文件格式可用于存储图表数据:GraphMLGXL和其他几种。但存储通常不是问题。使用图表而不将它们完全加载到RAM中是一个棘手的部分。

RDF模型过于通用,无法进行严格的图形分析。如果您不介意分析速度慢并且自己编写算法,请使用现有的图表数据库 - 请参阅wikipedia

对于实际分析,使用现有的图形分析库(例如SNAP)将所有数据加载到RAM中,或者查看This question

答案 2 :(得分:2)

这里没有绝对正确的答案;有多种选择,其选择严重取决于您的需求。对于大规模的检索/遍历(例如社交网络和类似的后端),您很快就会遇到随机的I / O瓶颈;我相信将图形存储在RAM中是目前唯一可行的实践方法。对延迟敏感度较低的应用程序有多种选择,包括neo4j(具有商业风味的开源)和Allegrograph(商业版有限免费版)。

在Delver,我们最终在GigaSpaces之上的RAM中实现了我们自己的非规范化数据模型(本质上是一个表示图形的邻接列表)(某些信息可以在this presentation中找到),并且可以自定义map-reduce用于查询和数据分析的代码。如果你走这条路,Cassandra似乎是一个可行的开源平台。

答案 3 :(得分:0)

你可以看看InfiniteGraph,它将很快发布用于测试版(http://www.infinitegraph.com/

如果这是用于商业用途,那么您将看到它针对的是具有更大图表的网站。社交网站构建了定制解决方案,当时为他们工作。但他们的内部解决方案比使用InfiniteGraph这样的东西更具限制性。像Cassandra或MySQL这样的产品并不是针对这种多对多问题集而设计的。你可以做到吗?当然,但它是很多手写编码,而且不可扩展。 如果您有一个真实的项目,请告诉我们,我们可以帮助您找出图形要求。 谢谢, 养兔场 wdavidson@objectivity.com