Я использую 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: "..."}) ...
Когда все остальные триггеры удалены, импорт завершается нормально. Я не ожидал, что обработка триггеров должна будет завершиться до операции, которая вызвала триггер. Я вполне уверен, что именно так это и работает, потому что при возникновении ошибки в триггере вы получите исключение для операции, которая вызывает срабатывание триггера.