Можете ли вы попробовать запустить
MATCH (b:Dense1) where b.id <> "1"
WITH b, b.key AS bKey
MATCH (a:Dense1) where a.id = "1" AND a.key = bKey
MERGE (a)-[:PARENT_OF]->(b)
, убедившись, что у вас есть индексы для идентификатора и ключа?
Кроме того, правильно ли я понимаю, что id НЕ уникален, и у вас есть 1 узел с id = 2 и 200k с id = 1?Если я ошибся, переверните условие, чтобы первая строка возвращала один узел, в который вы хотите добавить все отношения, а во вторую часть - все остальные 200 тыс. Узлов.Кроме того, в слиянии, поместите узел с низкой плотностью в качестве первого (так что здесь, b получит 200k отношений) - если это не так, измените его на (b) <- [: XXX] - (a). </p>
Прошло много времени с тех пор, как я имел дело с большими импортами / слияниями, но я вспоминаю, что извлекал переменную явно (например, bKey), которую затем можно сопоставить в индексе, и начиная с отдельных узлов (одного илипереход на более высокие (несколько a) несколько лучше, чем запросы с предложениями where, похожими на a.key = b.key.
Сказав, что 200k отношений в одной транзакции, И соединены с однойnode, это много, так как простое сопоставление по индексу быстро находит узлы, но все же вам нужно проверить все исходящие отношения, чтобы увидеть, случайно ли они уже ссылаются на другой узел.Итак, к тому времени, когда вы создаете свои последние отношения, вам нужно выполнить итерацию / проверку почти 200 тыс. Отношений.
Один трюк - запуск пакетов в цикле до тех пор, пока ничего не будет создано, например,
MATCH (b:Dense1) where b.id = "1"
WITH b, b.key AS bKey
MATCH (a:Dense1) where a.id <> "1" AND a.key = bKey
AND NOT (a) -[:PARENT_OF]-> (b) WITH a,b LIMIT 10000
MERGE (a)-[:PARENT_OF]->(b)
Это может показать вам, вероятно, что чем дальше пакет, тем дольше он занимает смысл - логически логично, так как все больше и больше связей из b необходимо проверять по мере продвижения.
Или, как показано в других ответах, пакетная обработка через APOC.
Последнее - должен ли это быть текущий процесс или одноразовая настройка / инициализация БД?Существуют и другие, значительно более быстрые варианты, если они предназначены только для начальной загрузки.