У меня есть файлы, содержащие тысячи строк, где размер файлов csv составляет от 500 МБ до 3,1 ГБ. Я сначала выполнил массовый импорт, потребовалось несколько минут, чтобы загрузить все данные в графическую базу данных. теперь для целей моего проекта мне нужно регулярно загружать данные. поэтому я написал сценарий python с использованием драйвера болта neo4j, в котором создаются все обычные узлы, выполняется обновление узла, выполняется удаление узла. Создание отношения из файлов также работает для данных небольшого размера (прототип). Проблема возникает, когда я собираюсь создать отношения из больших файлов. Хотя параллелизм работает, он работает очень медленно. мой процессор 32 ядра полностью загружен. Я проверил это через HTOP. а для партии 100-1000 правильно используется сердечник. Я пробовал размер партии 10000-100000, в этом случае параллелизм не работает. вот мой код запроса для создания загрузки CSV
"""CALL apoc.periodic.iterate('
load csv with headers from "file:///x.csv" AS row return row
','
MERGE (p1:A {ID: row.A})
MERGE (p2:B {ID: row.B})
WITH p1, p2, row
CALL apoc.create.relationship(p1, row.RELATIONSHIP, {}, p2) YIELD rel return rel
',{batchSize:10000, iterateList:true, parallel:true})"""
он отлично работает для небольшого количества данных. но он становится очень медленным, когда имеет дело с большими объемами данных. для создания 10 отношений потребовалось примерно 39 секунд. В моем случае операция слияния неэффективна или мне здесь не хватает некоторых хитростей. любезно помогите мне решить. Я работаю в экземпляре EC2, где размер RAM составляет 240G. Я пробовал разогревать. Запустите его, настроенный на 192G, но никаких существенных изменений не наблюдалось.