This page documents the current semantics that are visible in the codebase today.
The clearest transaction implementation currently lives in bikodb-graph::transaction.
That layer provides:
- a
Transactiontype with a local write-set, commit()androllback(),- optional WAL integration through
TxManager, - commit-time application of buffered graph mutations.
For graph mutations executed through this transaction API, the current model is:
- operations accumulate in a local write-set,
- writes are not visible until commit,
- commit applies buffered graph work as an all-or-nothing sequence,
- WAL entries can be written before graph application when
TxManageris configured with a WAL, - rollback discards buffered work, and active transactions roll back on drop.
In practical terms, this is a graph-scoped atomic write buffer with WAL-aware commit flow.
The current transaction API uses read-through access to the underlying graph.
That means:
- reads can see committed graph state,
- reads do not expose uncommitted writes from the current transaction as a separate snapshot view,
- there is no public MVCC-style snapshot model described in the current implementation.
These are the main limits external users should understand:
- no documented MVCC implementation,
- no public entity-version conflict detection model,
- no explicit optimistic concurrency protocol based on row/entity versions,
- no user-facing isolation-level matrix,
- no public cross-model transaction contract spanning graph + document + vector state.
TxManager currently focuses on:
- transaction IDs,
- active transaction bookkeeping,
- WAL serialization,
- commit/rollback orchestration.
That is useful and real, but it is not the same thing as a published OCC/MVCC conflict story.
This is an important boundary:
- the graph transaction API exists in
bikodb-graph, - the top-level
bikodb-server::Databasefacade mainly exposes immediate mutation helpers such ascreate_node,create_edge, andset_node_property, - those helpers are not currently presented as one public transaction API spanning every model.
So if you evaluate BikoDB today, you should distinguish between:
- graph transaction building blocks that exist, and
- a full public database transaction story across the whole product surface, which is not yet fully defined.
The broader workspace also uses concurrent Rust primitives such as:
DashMap-based structures,- atomic counters,
rayonfor parallel graph algorithms,- internal resource and execution tracking helpers.
This supports good in-process concurrency, but external users should still avoid assuming enterprise-grade transactional semantics that have not yet been documented explicitly.