ノードを挿入するプロセスを高速化するために、Neo4j で独自のプラグインを開発しました。主な理由は、ノードとリレーションシップが存在しない場合にのみノードとリレーションシップを挿入する必要があり、REST API を使用すると遅すぎる可能性があるためです。
プラグインを 100 回呼び出して、毎回約 100 個のノードと 100 個の関係を挿入しようとすると、呼び出しごとに約 350 ミリ秒かかります。ロックの原因を除外するために、各呼び出しは異なるノードを挿入しています。
ただし、呼び出しを並列化すると (一度に 2、3、4...)、応答時間は並列度に応じて低下します。一度に 2 つの呼び出しを行うと 200 個のオブジェクトを挿入するのに 750 ミリ秒かかり、3 回行うと 1000 ミリ秒かかります。
HttpWebRequest を使用して、.NET MVC コントローラーからプラグインを呼び出しています。maxConnection を 10000 に設定すると、すべての TCP 接続が開いていることがわかります。
この問題について少し調査しましたが、非常に間違っているようです。neo4j 構成またはプラグイン コードで何か間違ったことをしたに違いありません。VisualVM を使用すると、呼び出しを処理するために Neo4j によって起動されたスレッドが順次動作していることがわかりました。リンクされた画像を参照してください。
http://i.imgur.com/vPWofTh.png
私のconf:Windows 8、RAM Neo4j 2.0M03の2コア8G、confチューニングなしのサービスとしてインストール
誰かが私を助けてくれることを願っています。このままでは、Neo4j を本番環境で使用することはできません。ここでは、数十の同時呼び出しがあり、連続して実行することはできません。