1

私のimport.csvは多くのノードを作成し、マージは巨大なデカルト積を作成しtransaction timeout、データが非常に大きくなったため実行されます。現在、トランザクションのタイムアウトを 1 秒に設定しています。これは、他のすべてのクエリが非常に高速であり、完了するまでに 1 秒以上かかることが想定されていないためです。

タイムアウトを防ぐために、この特定のクエリを小さなチャンクに分割または実行する方法はありますか?

構成で変更が行われるたびに neo4j サービスを再起動する必要があるため、 での更新または無効化はオプションtransaction timeoutではありません。neo4j.conf

インポート スクリプトからタイムアウトに達したクエリ:

 MATCH (l:NameLabel)
 MATCH (m:Movie {id: l.id,somevalue: l.somevalue})
 MERGE (m)-[:LABEL {path: l.path}]->(l);

ノード数: 1000 ムービー、2500 ネームラベル

4

2 に答える 2

0

データベース内のノードとラベルの数は、これがインデックス作成の問題であることを示しています。Movie ノードと Namelabel ノード (ノードであるため NameLabel である必要があります) の両方に制約がありますか? 適切な制約が適用され、有効になっている必要があります。

インデックス作成とパフォーマンス

MATCH または MERGE するエンティティに対して、インデックスと制約が宣言され、ONLINE になっていることを確認してください。

1 つのラベルとインデックス付きの主キー プロパティに対して常に MATCH と MERGE を実行する

ロード ステートメントの前に USING PERIODIC COMMIT 10000 を付けます 可能であれば、ノードの作成とリレーションシップの作成を別のステートメントに分けます

インポートが遅い場合やメモリの問題が発生する場合は、Eager ローディングに関するMark のブログ投稿を参照してください。

Movie ノードに一意の名前がある場合は、CREATE UNIQUEステートメントを使用します。-ドキュメント

ノードの 1 つが一意ではないが、関係定義で使用される場合、CREATE INDEX ONステートメント。このような小さなデータセットでは、クエリがどれほど非効率的であるかがすぐにはわからない場合があります。コマンドを試して、PROFILE検索されているノードの数を確認してください。ステートメントMERGEは、各ステップでいくつかのノードのみをチェックする必要があります。

于 2017-09-18T12:41:12.823 に答える