17

Python用のpy2neoを介してRESTAPIを使用すると、Neo4jがノードとリレーションシップ/アーク/エッジを追加するのに時間がかかることがわかりました。これは、各RESTAPI呼び出しが単一の自己完結型トランザクションとして実行されるためであると理解しています。

具体的には、ノード間に関係がある数百のノードのペアを追加するには、ローカルホストで実行して数秒かかります。

Pythonを使用しながらパフォーマンスを大幅に向上させるための最良のアプローチは何ですか?

バルブフローとグレムリンを使用することは、一括挿入トランザクションを構築する方法でしょうか?

ありがとう!

4

5 に答える 5

9

py2neoで一括作成を行うにはいくつかの方法があり、それぞれがサーバーへの呼び出しを 1 回だけ行います。

  1. メソッドを使用してcreate、単一のバッチで多数のノードと関係を構築します。
  2. サイファー CREATE ステートメントを使用します。
  3. 新しいWriteBatchクラス (今週リリースされたばかり) を使用して、ノードとリレーションシップのバッチを手動で作成します (これは実際には 1 の手動バージョンです)。

コードをお持ちの場合は、喜んでそれを見て、パフォーマンスの調整に関する提案を行います。インスピレーションを得ることができるかもしれないかなりの数のテストもあります.

乾杯、ニゲ

于 2012-09-29T00:48:27.900 に答える
6

バッチ挿入を行っていない限り、Neo4j の書き込みパフォーマンスは遅くなります。

Neo4j バッチ インポーター ( https://github.com/jexp/batch-import ) は、データを Neo4j にロードする最速の方法です。これは Java ユーティリティですが、実行可能ファイルを実行しているだけなので、Java の知識は必要ありません。型付きデータとインデックスを処理し、CSV ファイルからインポートします。

Bulbs ( http://bulbflow.com/ ) モデルで使用するには、モデルget_bundle()メソッドを使用して、挿入用に準備されたデータ、インデックス名、およびインデックス キーを取得し、データを CSV ファイルに出力します。または、データをモデル化したくない場合は、データを Python から CSV ファイルに出力するだけです。

それはあなたのために働くでしょうか?

于 2012-10-01T15:17:59.720 に答える
2

まあ、私自身、neo4j からの膨大なパフォーマンスが必要でした。グラフのパフォーマンスを向上させるために、次のことを行うことになります。

  1. 多くの問題があったため、py2neo を捨てました。また、neo4j が提供する REST エンドポイントを使用すると非常に便利ですが、必ずリクエスト セッションを使用してください。
  2. OGM (Object-Graph Mapper) の代わりに、一括挿入に raw cypher クエリを使用します。高性能システムが必要な場合、これは非常に重要です。
  3. パフォーマンスがまだ私のニーズに十分ではなかったため、WITH * AND UNION 句を使用して 6 ~ 10 個のクエリをマージするカスタム システムの作成を終了しました。これにより、パフォーマンスが 3 ~ 5 倍向上しました。
  4. 少なくとも 1000 のクエリで、より大きなトランザクション サイズを使用します。
于 2015-06-24T12:13:54.743 に答える
0

大量のノードを非常に高速に Neo4K に挿入するには

バッチインサーター

http://neo4j.com/docs/stable/batchinsert-examples.html

私の場合、私はJavaに取り組んでいます。

于 2015-12-24T20:17:30.207 に答える