0

プログラムの Neo4j のテストを開始しましたが、いくつかのパフォーマンスの問題に直面しています。タイトルにもあるように、Neo4j は Java コードに直接埋め込まれています。

私のグラフには、約 400 万のノードと数億の関係が含まれています。私のテストは、ノードのインバウンド関係の数をカウントするクエリを送信することだけです。

このプログラムは、ExecutionEngine 実行プロシージャを使用して、次のクエリを送信します。

start n=node:node_auto_index(id="United States") match s-[:QUOTES]->n return count(s)

いくつかのプリントを追加するだけで、このクエリにかかった時間がわかります。通常は約 900 ミリ秒で、かなり長いです。

最も驚いたのは、応答で「クエリ実行時間」を受け取ったことです。これは実際とは異なります。

たとえば、次のクエリが返されます。

+----------+
| count(n) |
+----------+
| 427738   |
+----------+
1 row
1 ms 

この応答によると、Neo4j がクエリに 1 ミリ秒かかったことがわかりますが、いくつかのログ メッセージを出力すると、実際には 917 ミリ秒かかったことがわかります。

1ミリ秒は、インデックス付きオブジェクト「United States」を見つけるのに必要な時間に等しいと思います.Neo4jは、関係の数をカウントするなど、残りに約916ミリ秒を要したことを意味します. この場合、このクエリの getter パフォーマンスを取得するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

1

1.8.1 と 1.9.M04 でクエリ タイマーが壊れており、サイファーの遅延が修正されました。(ほとんどのユースケースで間違いなく価値のある取引です)。でもまぁ、そのうち直ると思います。

今のところ、外部で時間を計る必要があります。

更新:その時間が妥当かどうかについての質問については...基本的に、すべての〜400kノードをスキャンしてカウントする必要があります。これは、キャッシュがウォームアップされ、それらすべてが RAM に収まる場合でも、おそらく妥当です。このような「スーパー ノード」を使用することは、回避できる場合、通常はベスト プラクティスではありませんが、将来のバージョンではこのケースに対して多くの改善が行われる予定です (少なくとも、私はそう聞いています)。

于 2013-02-18T04:48:23.110 に答える