Python networkx 和持久性(可能在 neo4j 中)

eas*_*ger 5 python directed-graph neo4j networkx

我有一个每秒在内存中创建数千个图形的应用程序。我希望找到一种方法来保存这些以供后续查询。它们并不是特别大(可能最多约 1k 个节点)。

我需要能够存储整个图形对象,包括节点属性和边缘属性。然后,我需要能够根据节点中的时间属性在特定时间窗口内搜索图形。

有没有一种简单的方法可以将这些数据强制转换为 neo4j ?我还没有找到任何这方面的例子。虽然我发现了几个 python 库,包括嵌入式 neo4j 和休息客户端。

手动遍历图形并以这种方式存储它的常见方法是?

有没有更好的持久性替代方案?

Rap*_*aud 4

Networkx 有多种序列化方法。

在你的情况下,我会选择 graphml 序列化:

http://networkx.github.io/documentation/latest/reference/readwrite.graphml.html

使用起来非常简单:

import networkx as nx
nx.write_graphml('/path/to/file')
Run Code Online (Sandbox Code Playgroud)

要在 Neo4j 中加载它,假设您的 Neo4j<2.0,您可以使用 Tinkerpop Gremlin 在 Neo4J 中加载 graphml 转储

g.loadGraphML('/path/to/file')
Run Code Online (Sandbox Code Playgroud)

Tinkerpop 非常有用 - 不仅用于序列化/反序列化。

它将允许您使用具有共同“方言”的不同图形数据库(前提是它们有大多数人都有的“蓝图”驱动程序)