個々のステートメントの代わりに UNWIND を使用したバッチ入力をする - Amazon Neptune

個々のステートメントの代わりに 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'}...]}

ワークロードに最適なバッチサイズを判断するには、さまざまなサイズで試すことをお勧めします。