3

私は、neo4j のブループリントとネイティブ実装の間で、neo4j のトラバーサル速度のパフォーマンス テストを行っています。レベルごとに1つのノードを持つ1000ノードのグラフを作成しました。

O->O->O->O->。. . .->O

このブループリント コードを使用して、90 ミリ秒、93 ミリ秒、79 ミリ秒 (3 回実行) の反復 (ループ コードの場合) 時間を記録しました。

Iterable<Vertex> vertices = testGraph.getVertices();

//Code block which was measured.
for(Vertex vertex : vertices){};

ネイティブ コード 270 ミリ秒、268 ミリ秒、321 ミリ秒を使用:

Iterable<Node> nodes = Traversal.description().breadthFirst().relationships(CustomRelTypes.LINKED_TO, Direction.OUTGOING).evaluator(Evaluators.all()).traverse(rootNode).nodes();

//Code block which was measured.
for(Node node : nodes){}

neo4j の設計図の実装がどのように高速なのか理解できません。それらのいずれに対しても特別な構成は行っていません。depthFirst の時間もほぼ同じです。

ブループリントと一致するようにネイティブのパフォーマンスを高速化する方法はありますか?

ありがとうございました。

4

1 に答える 1

5

ブループリントは、トラバーサル API ではなく、内部で Neo4j のネイティブ getAllNodes() メソッドを使用します。

https://github.com/tinkerpop/blueprints/blob/master/blueprints-neo4j-graph/src/main/java/com/tinkerpop/blueprints/impls/neo4j/Neo4jGraph.java#L339

したがって、同等のネイティブ Neo4j Java コードは次のようになります。

g = new EmbeddedGraphDatabase('/path/to/graph-dir');
g.getAllNodes();
于 2012-07-14T02:37:50.640 に答える