7.3 Транзакции
Любой запрос, который обновляет граф, запускается в транзакции. Любой запрос на обновление всегда будет либо успешно выполнен, либо не выполнен вообще.
Cypher будет либо создавать новую транзакцию, либо запускать внутри существующей:
- Если не существует транзакции в контексте запуска, Cypher создаст новую транзакцию и зафиксирует ее по завершению выполнения запроса.
- В случае, если уже существует транзакция в контексте запуска, запрос будет выполняться внутри неё, и ничего не будет сохранено на диске, пока транзакция не будет успешно зафиксирована.
Следующие действия могут быть выполнены, чтобы результаты несколько запросов фиксировались в рамках единой транзакции:
- Открыть транзакцию,
- запустить ряд модифицирующих запросов Cypher,
- и зафиксировать их все одновременно.
Отметим, что запрос будет держать изменения в памяти, пока он не будет полностью выполнен. Большой запрос будет, соответственно, требовать виртуальную машину Java (JVM) с большим объёмом выделенной памяти.
Для использования транзакций поверх REST API обратитесь к Разделу 19.1 “Транзакционная конечная точка HTTP”.
При использовании встроенного Neo4j следует помнить, что все итераторы, возвращаемые из результата выполнения, должны быть полностью выбраны, чтобы гарантировать, что ресурсы, связанные с ними будут надлежащим образом закрыты. Ресурсы включают транзакции, запущенные запросом, поэтому при нарушении правильного сценария могут, например, привести к тупикам или другому неадекватному поведению.