Операторы Neo4j 10k MERGE терпят неудачу
Я запускаю операцию пакетного слияния в Neo4j, но она продолжает давать сбой. Я увеличил размер кучи и предел кучи, но похоже, что мои операции, возможно, не поддерживаются или есть более подходящий способ сделать это.
У меня есть 10 тысяч таких операторов MERGE
var transaction = `
MERGE (n0: Account {sfRecordId:$Id0})
ON CREATE SET ...
ON MATCH SET ...
MERGE (n1: Account {sfRecordId:$Id1})
ON CREATE SET ...
ON MATCH SET ...
MERGE ... //10k
// then send to Neo4j via the Javascript driver:
tx.run(transaction, bindParams)
Мой размер кучи установлен на
server.memory.heap.initial_size=2G
server.memory.heap.max_size=3G
Я пробовал отправлять их все сразу, я пробовал объединять их в пакеты по 100, 500, 1 и 10000.
Ни один из них, кажется, не вставляет мои 10k.
Первые рандомные 500-4к попадают, но потом сервер вылетает с ошибкой нехватки памяти.
1 ответ
Создание очень большого оператора для массовой вставки данных не рекомендуется. Хорошим способом вставки таких объемных данных является подготовка списка объектов и использованиеUNWIND
чтобы перебрать его:
UNWIND $data as item
MERGE (n:Account {sfRecordId:item.Id})
ON CREATE SET ...
ON MATCH SET ...