Разница между apoc.periodic.commit и apoc.periodic.iterate в Cypher

Я хочу написать метод полной чистки моей базы Neo4j. Узлов там может быть порядка нескольких миллионов, поэтому такой запрос не проходит по памяти:

MATCH (n)
DETACH DELETE n

Я попытался использовать apoc.periodic.commit:

CALL apoc.periodic.commit("
    MATCH (n)
    WITH n LIMIT $limit
    DETACH DELETE n
", {limit:100000})
YIELD updates
RETURN updates as count

Однако, запуская такой запрос, я получаю 0, и ничего не удаляется. Сам запрос выполняется пару секунд.

А вот с помощью apoc.periodic.iterate я добился нужного эффекта, база полностью очистилась, удаление ~2kk узлов заняло ~30 секунд:

CALL apoc.periodic.iterate(
    "MATCH (n) RETURN n",
    "DETACH DELETE n",
    {batchSize: $limit}
)
YIELD total
RETURN total as count

Собственно, вопрос, почему отказывается работать commit? В чем разница работы этих двух методов?


Ответы (0 шт):