Neo4J子图或多个数据库

时间:2013-02-22 10:01:29

标签: neo4j subgraph

我的Neo4J(嵌入式)数据库设置如下:

  • 我将几个用户节点附加到参考节点。
  • 可以为每个用户节点附加一个或多个项目节点。
  • 每个项目节点都附有一个复杂的图表。

复杂图形可以通过单个遍历模式遍历(其中有隐藏的树结构)。

我想做的是以下内容:

  • 删除项目节点下的所有节点。
  • 当项目节点下面没有任何内容时,删除用户下方的所有项目节点
  • 将特定用户节点下的所有节点导出到.graphML(可能使用Gremlin Java API?)
  • 将.graphML文件导回特定用户节点下的数据库,而不删除位于不同用户节点下的信息。

我已经使用Gremlin GraphML阅读器导入和导出整个Neo4J数据库,但我无法找到有关导入/导出子图的内容。

如果这实际上是可行的,Neo4J将如何处理两个同时尝试导入内容的用户?例如,用户1在user1节点下导入他的部分,用户2同时在用户2节点下导入他的数据。

另一种可能性是每个用户都有一个Neo4J数据库,但这是不太可取的选择,而且我不确定它是否真的可能,无论是嵌入式还是服务器版本。我已经阅读了有关在不同端口上拥有多个服务器版本的内容,但我们的用户数量是每个定义无限制...

非常感谢任何帮助。

编辑1:我还遇到了一个名为Geoff(org.neo4j.geoff)的东西来处理子图。我对它的工作方式一无所知,但我现在正在研究它。

2 个答案:

答案 0 :(得分:3)

开始导入时,您可能会锁定用户节点,因此第二次导入必须等待(并且必须检查)。

使用cypher查询,您可以删除子图并再次将它们导出到cypher。 Neo4j Console repository中有查询结果的导出代码。

在那里你也可以找到geoff-export和import以及cypher导入器。

答案 1 :(得分:2)

一种选择可能是使用Tinkerpop blueprints之类的内容在遍历时创建通用Graph,然后执行GraphML导出。

https://github.com/tinkerpop/blueprints/wiki/GraphML-Reader-and-Writer-Library会有更多信息,但如果您想要导出子图,这可能是您的最佳选择。