Каков наилучший способ импорта данных, имеющих различные типы узлов и связи между ними?

#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. Обновлено в вопросе