Влияние производительности запуска APOC в Neo4j при импорте средних и больших графиков и решений - PullRequest
0 голосов
/ 13 января 2019

Я использую APOC для импорта графиков среднего размера (узлы 2К, отношения 2К). Я также использую около дюжины триггеров. Когда я импортирую график, используя процедуру импорта GraphML, график импортируется нормально (импорт выполняется довольно быстро), а затем запрос зависает (запрос, который создает узел GraphImport, который запускает импорт). Когда я удаляю все триггеры, импорт завершается нормально. Я предполагаю, что обработка триггеров должна завершиться, прежде чем процедура импорта вернется ??? Казалось бы, или триггеры вызывают проблемы с производительностью или могут быть ошибкой в ​​APOC. Я мог бы отключить триггеры, импортировать график (не нужно запускать триггеры для них), а затем снова включить их, но я мог пропустить триггеры, которые мне действительно нужны в это время. Кто-нибудь сталкивался с этой проблемой?

Вот триггер:

CALL apoc.trigger.add ('import', 'UNWIND {creationNodes} AS n WITH n MATCH (n: GraphImport) CALL apoc.import.graphml (n.url, {batchSize: 10000, readLabels: true, storeNodeIds) : false, defaultRelationshipType: "RELATED"}) YIELD-файл, источник, формат, узлы, отношения, свойства, время RETURN null ', {phase:' after '});

Следующее выполнит импорт, но затем зависнет:

CREATE (: GraphImport {url: "..."}) ...

Когда все остальные триггеры удалены, импорт завершается нормально. Я не ожидал, что обработка триггеров должна будет завершиться до операции, которая вызвала триггер. Я вполне уверен, что именно так это и работает, потому что при возникновении ошибки в триггере вы получите исключение для операции, которая вызывает срабатывание триггера.

...