Разница между apoc.periodic.iterate и apoc.periodic.commit при удалении большого количества узлов? - PullRequest
0 голосов
/ 04 июля 2018

В чем разница между этими двумя строками?

call apoc.periodic.iterate("MATCH (n:Nodes) return n", "DETACH DELETE n", {batchSize:10000, iterateList:true})"

call apoc.periodic.commit("match (n:Nodes) limit {limit} detach delete n RETURN count(*)",{limit:10000})

Каков наилучший способ удаления большого количества узлов?

1 Ответ

0 голосов
/ 04 июля 2018

Процедура apoc.periodic.iterate принимает два запроса:

  • первый, кто создал набор узлов в вашем примере
  • второй будет выполнен для каждого результата первого запроса

Таким образом, в вашем примере ваше соответствие всем Node вашей базы данных, а затем вы удаляете их с размером пакета 10000.

Процедура apoc.periodic.commit принимает только один запрос, и процедура будет выполнять запрос снова, и снова, и снова ..., пока ее результат не будет равен 0 .

Итак, в вашем примере вы берете первые 10000 узлов и удаляете их. Вы повторяете это поведение до тех пор, пока в вашей базе данных не останется Node.

Для возобновления оба запроса дают одинаковый результат, но не одинаковым образом. apoc.periodic.iterate займет немного больше оперативной памяти, чем apoc.periodic.commit (процедура должна сначала создать набор узлов), но с одной стороны, вы можете использовать весь свой ЦП через конфигурацию parallel:true (но будьте осторожны с замками).

Если у вас действительно огромное количество узлов для удаления, я рекомендую вам использовать apoc.periodic.commit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...