neo4j замедляет импорт
Я пытаюсь импортировать средний набор данных из 500 000 узлов в neo4j, используя cypher. Я использую neo4j-community-2.0.0-M05 локально на iMac 3,7 ГГц i7 с SSD.
Я передаю шифр в оболочку neo4j, заключая в транзакцию каждые 40 тыс. Строк.
Я использую метки, и перед тем, как начать, я создал индексы для одного свойства для каждого помеченного узла.
Когда я ушел прошлой ночью, MATCH CREATE UNIQUE занимали около 15 мс каждый. Этим утром они принимают около 6000 мс.
Медленные запросы выглядят примерно так
MATCH n:Artifact WHERE n.pathId = 'ZZZ' CREATE UNIQUE n-[r:DEPENDS_ON]->(a:Artifact {pathId: 'YYY'}) RETURN a
1 row
5719 ms
pathId индексируется.
Я понимаю, что это веха и, вероятно, не оптимизированная производительность. Но мой импорт составляет менее трети пути, и он все больше и больше замедляется.
Стоит ли искать другие методы, кроме cypher, для импорта этих данных?
1 ответ
Я просто хочу ответить на свой вопрос на случай, если кто-то еще найдет это. Спасибо Питеру за предложение проекта пакетного импорта. Я использовал дерево 2.0.
Мой рабочий процесс закончился тем, что я (1) загрузил все данные в реляционную базу данных, (2) очистил дубликаты, а затем (3) написал скрипт для экспорта данных в файлы CSV.
Используя cypher, я выполнял импорт в течение 24 часов, прежде чем убил его. Используя инструмент импорта java, весь импорт занял 11 секунд с neo4j-community-2.0.0-M06.
Итог: не пытайтесь выписать шифр для импорта больших порций данных. Потратьте час на очистку ваших данных, если это необходимо, затем экспортируйте их в CSV и используйте инструмент пакетного импорта java.