0

Neo4J グラフ データベース (プロバイダーとして GrapheneDB を使用) を利用する .Net アプリケーションを作成しました。新しいグラフ オブジェクトを保存すると、パフォーマンスの問題が発生します。グラフの履歴を保持していないので、保存するたびに、最初にノードと関係を含む古いグラフを削除してから、新しいグラフを保存します。ノードにまだインデックスを付けていません。これらのグラフを一度に複数ロードするのは非常に高速なので、これは問題ではないと思います。

私の save メソッドは、各ブランチをステップ実行し、ノードと関係をマージします。(きれいにするために、各ステップから関係を除外しました)。完全なクエリが作成された後、コードは 1 回で実行されます。

  1. ルート ノード 37 とノード 4 をマージします。
  2. type1 ノード 12-17 を 4 とマージ
  3. type2 ノード 18-22 を 4 とマージ
  4. 2 を 37 とマージする
  5. 7-11 を 2 にマージ
  6. 5 を 37 とマージします (関係を作成します)
  7. 23-26 を 5 にマージ
  8. 6 を 37 とマージします (関係を作成します)
  9. 30-27 を 6 とマージ

ノード 2、4、5、6 は、100 ~ 200 のリーフ ノードを持つことができます。私のデータベースには、これらのグラフが約 100 個あります。この保存には、実稼働環境でサーバーに 10 ~ 20 秒かかる場合があり、タイムアウトになることもあります。

ここに画像の説明を入力

別の方法で保存しようとしましたが、時間がかかりますが、タイムアウトすることはあまりありません。最初にノードのグループを作成します。各ノードにはルート ID 37 が格納されます。各グループは個別の実行で作成されます。ノードを作成したら、子ノードとルート ノードを選択して関係を作成します。これにより、クエリが個別の小さなクエリに分割されます。

この保存のパフォーマンスを改善するにはどうすればよいですか? これらのグラフを 30 個読み込むには、3 ~ 5 秒かかります。また、データが追加されるにつれて、保存のパフォーマンスが大幅に低下することにも注意してください。

4

1 に答える 1