7

可以说我定义了一个类 Graph。

graph iowa = {.....nodes:{edges.......}}

和类似的图簇。

一旦脚本在对象中运行它的全部。

但是如何存储 Graph 信息(包括定义的任何属性)?您是否将其保存在数据库表 csv 中?

可能不满意的查询: 在 Neo4J 中存储多个图 (它说 newo4j 一个实例一次支持一个图,如果你想运行多个图,可以在一个图下子图)

如何将图形数据存储在数据库中?

*****更新*****:关于可用 Graph DBs 下面的 Alexanders 回答,我想知道是否有人知道 VertexDB 的可能分支,他们已将这个高性能库导入任何其他语言,最好是 NodeJS还是 Python?

http://www.dekorte.com/projects/opensource/vertexdb/docs/manual.html

有没有人在使用 AllegroGraph 和 Neo4j 时阅读过这篇文章?

4

3 回答 3

9

NetworkX python 库提供了几种存储图形数据的方法:

  1. 将图形序列化为 JSON
  2. 腌制图表
  3. 以gml格式存储图形(链接
  4. 将图形写入 .dot 文件(链接)。

将图形存储在关系数据库中肯定是一个糟糕的选择,因为数据的复杂性、图形查询的复杂性、很难用 SQL 编写以及这些查询的性能。 Graph Databases, NOSQL and Neo4j文章详细描述了这个问题。

但是,我认为,您应该真正考虑使用Neo4j。我希望经过一些调查,您会找到一种方法来适应您的需求。毕竟,Neo4j有很多替代品。

DB-engines是一个很好的访问资源。有很多有用的信息,特别是,您可以将任何数据库与另一个数据库进行比较并找到最适合您的数据库。

另外,你可以参考这个漂亮的答案

更新:

由于您使用的是类似于 JSON 的结构,因此您可以考虑使用面向 JSON 的数据库,例如CouchDBMongoDB。与 Neo4j 相比,它们具有不错的性能和更好的扩展性。

于 2013-10-24T12:55:50.737 回答
2

如果您将图形数据存储在字典中,则使用 json.dump() 将其写入 json 文件并使用 json.load() 将其加载回内存非常简单。或者,如果它是一个字典列表,您将使用 json.dumps() 和 json.loads()。Python 文档在这里

于 2013-10-24T13:13:11.070 回答
2

VertexDB实现一个 RESTful API 来提供查询工具,因此将它与 python 一起使用不会有问题,因为您唯一需要的是向服务器写入适当的 HTTP 请求。

于 2013-10-24T13:35:58.480 回答