Разница между 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? В чем разница работы этих двух методов?