我正在尝试将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]]
有什么想法吗?
答案 0 :(得分:2)
在groovy脚本的末尾需要g.shutdown()
。如果没有g.shutdown()
,图表的所有更改都很可能留在内存中。从磁盘重新初始化图形(在您的情况下为/path/to/graph.db
)将丢失仍在内存中的更改。 g.shutdown()
将当前事务从内存刷新到磁盘。这将确保您的更改保持不变,并在您尝试再次访问数据库时检索。
希望这有帮助。
注意:您对嵌入式数据库的预感是正确的。如果您使用Neo4j的REST接口,则不会发生此问题,因为每个REST API请求都被视为单个事务。