ACID Transactions

Multi-collection transactions with optimistic concurrency control.

# Python example
tx = db.begin_transaction()

db.tx_insert(tx, "accounts", {"id": "A", "balance": 1000})
db.tx_update(tx, "accounts", {"id": "B"}, {"$inc": {"balance": -500}})
db.tx_update(tx, "accounts", {"id": "A"}, {"$inc": {"balance": 500}})

db.commit_transaction(tx)  # atomic commit or rollback on conflict

How It Works

  • Optimistic Concurrency Control (OCC) -- Writes are buffered until commit. No locks held during the transaction.
  • Per-document versioning -- Each document has a version counter. Commit validates that no versions changed since read.
  • 3-phase commit -- Prepare, validate versions, commit. WAL entries tagged with transaction IDs.
  • Deadlock-free -- Collections are locked in sorted order (BTreeSet) during commit.
  • Crash recovery -- Transaction log with CRC32 checksums. WAL replay on startup.

Transaction API

MethodDescription
begin_transaction()Start a new transaction, returns transaction ID
tx_insert(tx, col, doc)Buffered insert
tx_find(tx, col, query)Read with snapshot isolation
tx_update(tx, col, query, update)Buffered update
tx_delete(tx, col, query)Buffered delete
commit_transaction(tx)Validate and commit atomically
rollback_transaction(tx)Discard all buffered changes