Операторы 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 ...
Другие вопросы по тегам