0

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)}

グレムリンで実行します。

スムーズに実行され、プロパティを確認すると、g.v(2381).map()期待どおりの結果が得られます。

しかし、gremlin を離れて neo4j サーバーを起動すると、これらの変更は存在しません。

誰でも理由とこれを修正する方法を説明できますか?

私の推測では、gremlin のグラフが埋め込まれていることと関係があると思います。

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

何か案は?

4

1 に答える 1

2

g.shutdown()Groovy スクリプトの最後にa が必要です。g.shutdown()グラフへのすべての変更がないと、メモリに残る可能性が高くなります。ディスクからグラフを再初期化すると(/path/to/graph.dbあなたの場合)、まだメモリにあった変更が失われます。g.shutdown()現在のトランザクションをメモリからディスクにフラッシュします。これにより、変更が保持され、データベースに再度アクセスしようとしたときに取得されます。

お役に立てれば。

:組み込みデータベースの予感は正しいです。すべての REST API リクエストが単一のトランザクションとして扱われるため、Neo4j の REST インターフェイスを使用する場合、この問題は発生しません。

于 2013-03-05T11:02:43.687 に答える