Gremlin:迭代地设置属性到现有的图形数据库



我正在尝试在我现有的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]]

任何想法?

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

希望对你有帮助。

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

相关内容

  • 没有找到相关文章

最新更新