Загрузите большой CSV-файл в neo4j - PullRequest
0 голосов
/ 11 июня 2019

Я хочу загрузить CSV, который содержит отношения между категориями Википедии rels.csv (4 миллиона отношений между категориями). Я попытался изменить файл настроек, изменив следующие значения параметров:

dbms.memory.heap.initial_size=8G 
dbms.memory.heap.max_size=8G
dbms.memory.pagecache.size=9G

Мой запрос выглядит следующим образом:

USING PERIODIC COMMIT 10000
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)

Более того, я создал индексы для catId и catName. Несмотря на все эти оптимизации, запрос все еще выполняется (со вчерашнего дня).

Можете ли вы сказать мне, нужно ли оптимизировать загрузку этого CSV-файла?

1 Ответ

1 голос
/ 11 июня 2019

Это занимает слишком много времени. 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

Слегка измененный запрос: Увеличение 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)

Некоторые предложения:

  1. Создать индекс для полей, которые используются для поиска узлов. (Не нужно индексировать другие поля при загрузке данных, это можно сделать позже, оно потребляет ненужную память)

  2. Не устанавливайте максимальный размер кучи на полную системную память. Установите 50% ОЗУ.

  3. Увеличение LIMIT: Если вы увеличиваете кучу (ОЗУ), это не увеличит производительность, если не будет использовано. Когда вы установите LIMIT на 10000, большая часть кучи будет свободна. Я могу загружать данные с лимитом 100 000 с 4G Heap. Вы можете установить 200 000 или больше. Если это вызывает какие-либо проблемы, попробуйте уменьшить их.
  4. ВАЖНО Обязательно перезапустите Neo4j после изменения / настройки конфигурации. (Если еще не сделано).

Не забудьте удалить предыдущие данные при следующем запуске загрузки CSV-запроса, так как это создаст дубликаты.

ПРИМЕЧАНИЕ: Я скачал файлы на ноутбук и использовал их, поэтому нет времени загрузки.

...