最近、学校で MySQL と Neo4j を比較する宿題を出しています。
「Graph Databases」という本と「Neo4j in Action」という本の最初の章を読みました。どちらの本でも、MySQL と Neo4j の違いを示しています"。
ここでは Joerg Baach 氏をフォローして、mysql と比較した neo4j のパフォーマンス (どのように改善できますか?)と同じ結果を得ました。インデックスを追加した後の MySQL はかなり高速で、Cypher は時間内に結果を取得するのに苦労しました。
その後、トラバーサル フレームワークを使用することにしました。これが私のクエリです:
for (Path p: t.description()
.depthFirst()
.relationships(RelTypes.friend, Direction.OUTGOING)
.evaluator(Evaluators.atDepth(4))
.uniqueness(Uniqueness.NODE_LEVEL)
.traverse(graphDb.index()
.forNodes("node_auto_index")
.get("noscenda_name", "person3200")
.getSingle()))
{
//....
}
ここで、結果を返すのにかかる時間を測定する必要があります。Neo4j Traversal APIのマニュアルから読んだ
Traverser オブジェクトは、TraversalDescription オブジェクトの traverse() を呼び出した結果です。これは、グラフに配置されたトラバーサルと、結果の形式の仕様を表します。実際のトラバーサルは、Traverser の反復子の next() メソッドが呼び出されるたびに遅延実行されます。
実際のトラバーサルは、next() メソッドが呼び出されるたびに実行されます。したがって、時間を測定したい場合は、ループが終了するまで待つ必要があります。私は正しいですか?
そして、私が正しければ、深さ 4 で結果を返すのに約 60 秒かかるため、Traversal API のパフォーマンスは非常に悪いです。パフォーマンスを改善するための提案はありますか?