Batch inputs using UNWIND instead of individual statements
Whenever the same query needs to be executed for different inputs, instead of executing one query per input, it would be much more performant to run a query for a batch of inputs.
If you want to merge on a set of nodes, one option is to run a merge query per input:
MERGE (n:Person {`~id`: $id}) SET n.name = $name, n.age = $age, n.employer = $employer
With parameters:
params = {id: '1', name: 'john', age: 25, employer: 'Amazon'}
The above query needs to be executed for every input. While this approach works, it may require many queries to be executed for a large set of input. In this scenario, batching may help reduce the number of queries executed on the server, as well as improve the overall throughput.
Use the following pattern:
UNWIND $persons as person MERGE (n:Person {`~id`: person.id}) SET n += person
With parameters:
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'}...]}
Experimentation with different batch sizes is recommended to determine what works best for your workload.