Database internals and transactional behavior
To maintain data integrity and ensure reliable transactional behavior, Neo4j DBMS supports transactions with full ACID properties, and it uses a write-ahead transaction log to ensure durability.
-
Atomicity — If a part of a transaction fails, the database state is left unchanged.
-
Consistency — Every transaction leaves the database in a consistent state.
-
Isolation — During a transaction, modified data cannot be accessed by other operations.
-
Durability — The DBMS can always recover the results of a committed transaction.
Neo4j DBMS supports the following transactional behavior:
-
All database operations that access the graph, indexes, or schema must be performed in a transaction.
-
The default isolation level is read-committed isolation level.
-
Write locks are acquired automatically at the node and relationship levels. However, you can also manually acquire write locks if you want to achieve a higher level of isolation — serializable isolation level.
-
Data retrieved by traversals is not protected from modification by other transactions.
-
Non-repeatable reads may occur (i.e., only write locks are acquired and held until the end of the transaction).
-
Deadlock detection is built into the core transaction management.
The following sections describe the transactional behavior in detail and how to control it: