個々のステートメントの代わりに UNWIND を使用したバッチ入力をする
異なる入力に対して同じクエリを実行する必要がある場合は、入力ごとに 1 つのクエリを実行するのではなく、入力バッチに対してクエリを実行する方がはるかにパフォーマンスが高くなります。
ノードのセットでマージする場合は、入力ごとにマージクエリを実行することができます。
MERGE (n:Person {`~id`: $id}) SET n.name = $name, n.age = $age, n.employer = $employer
パラメータの入力例:
params = {id: '1', name: 'john', age: 25, employer: 'Amazon'}
上記のクエリは、入力ごとに実行する必要があります。このアプローチは有効ですが、大量の入力セットに対しては、数多くのクエリの実行が必要となる場合があります。このシナリオでは、バッチ処理によってサーバーで実行されるクエリの数を減らせるほか、全体的なスループットを向上させることができます。
次のパターンを使用します。
UNWIND $persons as person MERGE (n:Person {`~id`: person.id}) SET n += person
パラメータの入力例:
params = {persons: [{id: '1', name: 'john', age: 25, employer: 'Amazon'}, {id: '2', name: 'jack', age: 28, employer: 'Amazon'}, {id: '3', name: 'alice', age: 24, employer: 'Amazon'}...]}
ワークロードに最適なバッチサイズを判断するには、さまざまなサイズで試すことをお勧めします。