Это занимает слишком много времени. 4 миллиона отношений должны занять несколько минут, если не секунд.
Я только что загрузил все данные по ссылке, которой вы поделились, за 321 секунду (Cats-90 и Rels-231) с менее чем половиной настроек памяти на моем персональном ноутбуке.
dbms.memory.heap.initial_size=1G
dbms.memory.heap.max_size=4G
dbms.memory.pagecache.size=1512m
И это не предел, Может быть улучшено в дальнейшем.
![enter image description here](https://i.stack.imgur.com/LyZmj.jpg)
Слегка измененный запрос: Увеличение LIMIT в 10 раз
USING PERIODIC COMMIT 100000
LOAD CSV FROM
"https://github.com/jbarrasa/datasets/blob/master/wikipedia/data/rels.csv?raw=true" AS row
MATCH (from:Category { catId: row[0]})
MATCH (to:Category { catId: row[1]})
CREATE (from)-[:SUBCAT_OF]->(to)
Некоторые предложения:
Создать индекс для полей, которые используются для поиска узлов. (Не нужно индексировать другие поля при загрузке данных, это можно сделать позже, оно потребляет ненужную память)
Не устанавливайте максимальный размер кучи на полную системную память. Установите 50% ОЗУ.
- Увеличение
LIMIT
: Если вы увеличиваете кучу (ОЗУ), это не увеличит производительность, если не будет использовано. Когда вы установите LIMIT
на 10000, большая часть кучи будет свободна. Я могу загружать данные с лимитом 100 000 с 4G Heap. Вы можете установить 200 000 или больше. Если это вызывает какие-либо проблемы, попробуйте уменьшить их.
- ВАЖНО Обязательно перезапустите Neo4j после изменения / настройки конфигурации. (Если еще не сделано).
Не забудьте удалить предыдущие данные при следующем запуске загрузки CSV-запроса, так как это создаст дубликаты.
ПРИМЕЧАНИЕ: Я скачал файлы на ноутбук и использовал их, поэтому нет времени загрузки.