#database #performance #optimization #neo4j #query-optimization
Вопрос:
У меня есть требование, в соответствии с которым я должен импортировать не менее 8000 узлов и в общей сложности 19000 отношений. Существуют различные типы отношений с различными свойствами, и сказанное справедливо и для узлов.
Проблема заключается во времени, затрачиваемом на выполнение запроса. Я разбил запрос на небольшие различные запросы. Я предоставляю им различные параметры и использую UNWIND
их для пакетной обработки данных во всех подзапросах. Однако это отнимает много времени. Каждый раз на моем локальном компьютере это занимает около 7 секунд.
Другой подход, который я протестировал, чтобы сократить это время, состоял в создании запроса, состоящего только из CREATE
и OPTIONAL MATCH
es. Итак, я бы проанализировал пакет и создал запрос следующим образом:
OPTIONAL MATCH (target1 { id: target1Id }) OPTIONAL MATCH (target2 { id: target2Id }) .... CREATE (n1:n1Label { ...n1Properties }) CREATE (n1)-[:r1 {...properties}]-gt;(target1) CREATE (n2:n2Label { ...n2Properties }) CREATE (n2)-[:r2 {...properties}]-gt;(target7) ...
Однако это было намного медленнее, так как базе данных требовалось около 5 секунд для обработки каждой партии.
Я довольно невежественен в том, как я могу улучшить производительность. Я реализовал создание индексов. Однако особого эффекта они произвести не могут.
Ваш вклад в решение этой проблемы был бы весьма признателен.
Спасибо.
Обновить
Вот как выглядит входной json
[ { p1: { x: "", y: "", z: [{...}, {...}, {...}], a: [{...}, {...}, {...}] }, p2: { x1: "", x2: "", }, p3: { x: "", y1: "", z: [{...}, {...}, {...}] }, p4: { x1: "", y: "", a: [{...}, {...}, {...}] } }, ... ]
Свойства-это просто фиктивные ключи. Я не уверен, разрешено ли мне раскрывать ключи, поэтому просто делаю это таким образом.
Комментарии:
1. Это кажется очень медленной производительностью для Neo4j. Как вы подключаетесь? Вы используете LOAD CSV или какой-то другой метод?
2. Я передаю массив данных в качестве параметра ($data) Затем размотайте его и займитесь другой работой.
3. как выглядят ваши входные данные?
4. Обновлено в вопросе