Gremlin:SetProperty迭代到现有的图数据库

时间:2013-03-05 10:34:09

标签: groovy neo4j jung pagerank gremlin

我正在尝试将JUNG的PageRank算法运行到我现有的neo4j图形数据库中,并将节点的得分保存为属性以供将来参考。

所以我创建了以下groovy文件:

import edu.uci.ics.jung.algorithms.scoring.PageRank

g  = new Neo4jGraph('/path/to/graph.db')
j = new GraphJung(g)

pr = new PageRank<Vertex,Edge>(j, 0.15d)
pr.evaluate()
g.V.sideEffect{it.pagerank=pr.getVertexScore(it)}

并通过gremlin运行。

它运行顺畅,如果我通过g.v(2381).map()查看房产,我会得到我期望的结果。

然而,当我离开gremlin并启动我的neo4j服务器时,这些修改是不存在的。

任何人都可以解释为什么以及如何解决这个问题?

我的预感是它与嵌入gremlin中的图形有关:

gremlin> g
==>neo4jgraph[EmbeddedGraphDatabase [/path/to/graph.db]]

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在groovy脚本的末尾需要g.shutdown()。如果没有g.shutdown(),图表的所有更改都很可能留在内存中。从磁盘重新初始化图形(在您的情况下为/path/to/graph.db)将丢失仍在内存中的更改。 g.shutdown()将当前事务从内存刷新到磁盘。这将确保您的更改保持不变,并在您尝试再次访问数据库时检索。

希望这有帮助。

注意:您对嵌入式数据库的预感是正确的。如果您使用Neo4j的REST接口,则不会发生此问题,因为每个REST API请求都被视为单个事务。