0

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

所以我创建了以下 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]]

有任何想法吗?

4

1 回答 1

2

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

希望这可以帮助。

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

于 2013-03-05T11:02:43.687 回答