Skip to main content
DB
ProductDurability and consistency

Acknowledged once durable, seen by the next read

One durability contract for every table and every request: your write is acknowledged only after it is durable in the write-ahead log, and when the receipt returns, the next read sees it. Everything derived from the write hears about it once, after that.

The acknowledgement contract

What happens before you get the receipt

Three steps, in order, on every table and every request. Select one to see what the node does and what you can read about it.

What you can read01 / 03
the owner and committed frontier of every tablet
SELECT relation_id, tablet_id, owner_epoch, committed_frontier
FROM system.tablets;

Guarantees

Five contracts your application builds on

The consistency page states them in one table. Here it is, row for row.

The five consistency guarantees and what each means.
Atomic statementsA statement is applied completely or not at all.
TransactionsBEGIN … COMMIT applies several statements atomically.
Read-after-writeThe next read after a receipt sees the write.
AS OF COMMITA read of a VERSIONED table at an earlier commit.
Exact derived stateTransformations and materialized views equal their definitions.

Contracts, not measurements. Each row is stated on the consistency page.

Consistency in the docs

Read-after-write

Your next read sees your write

When a write returns its receipt, the next read sees it, with no retry. A read that runs while a write is in flight returns either the state before that write or the state after it, never a partly applied row.

A transformation or materialized view applies each source commit as it is published, so its target follows its sources continuously and always equals its definition over them.

receipt → next read
the write is visible to the read that follows it
before or after
never a partly applied row
exact derived state
a target always equals its definition
a write to one group of a row
UPSERT INTO balances (
chain_id, address, token, amount, updated_at, balance_index, balance_version
)
VALUES (1, '0x9c2e4f1a', 'USDC', 2500000000, '2026-10-01 12:00:00.000', 1001, 1)
ATTRIBUTE GROUP holding;
the read that follows sees it
SELECT address, token, amount, updated_at
FROM balances
WHERE chain_id = 1 AND address = '0x9c2e4f1a';

Atomicity

One statement, one write; several, one commit

A write statement changes one row of one table, or one attribute group of it. It is validated completely before it commits, and it commits as a whole; an error names its reason.

Open a transaction and the writes inside it, across groups, rows and tables, become visible together at commit, or are discarded as one.

INSERT · UPSERT · REPLACE
one row tuple, optionally one attribute group of it
UPDATE · DELETE
the row with one complete primary key
CREATE · ALTER · DROP
the one definition change
BEGIN … COMMIT · ROLLBACK
several statements, applied atomically or discarded
two balances and a transfer, visible together
BEGIN;
UPSERT INTO balances (
chain_id, address, token, amount, updated_at, balance_index, balance_version
)
VALUES (1, '0x4b1e7c2a', 'USDC', 1500000000, '2026-10-01 12:00:00.000', 1001, 1)
ATTRIBUTE GROUP holding;
UPSERT INTO balances (
chain_id, address, token, amount, updated_at, balance_index, balance_version
)
VALUES (1, '0x9c2e4f1a', 'USDC', 2500000000, '2026-10-01 12:00:00.000', 1001, 1)
ATTRIBUTE GROUP holding;
INSERT INTO transfers (
chain_id, token, sender, recipient, amount, transferred_at, _index
)
VALUES (
1, 'USDC', '0x4b1e7c2a', '0x9c2e4f1a', 1000000000, '2026-10-01 12:00:00.000',
1001
);
COMMIT;

One owner per tablet

Ordered by one owner, kept by its replicas

Each tablet has exactly one owner at a time, and its log lives on more than one node.

Owner

One owner serializes each tablet

A table is split into tablets by its shard key. Each tablet has one owner that orders its commits, identified by an owner epoch and a commit sequence, and its records go to a local, segmented, checksummed write-ahead log with group commit.

owner epoch · commit sequence
Replicas

A replica takes over with every acknowledged write

The log of each tablet is replicated to its replicas on other nodes. When a node is lost, a replica takes over with every write that was acknowledged.

replicated WAL
Control plane

A quorum runs the cluster

A Raft quorum runs the control plane. Tablets migrate, split and merge at run time as the data grows, and each tablet maps to one write-ahead log domain of its runtime.

Raft · migrate · split · merge

Recovery and backups

A restart replays, a backup restores

When the node opens, each tablet picks up exactly where the durable log left off. A backup adds a point-in-time copy you can bring back on a new node.

  1. 01

    Load the last checkpoint

    Each tablet starts from the checkpoint it last completed.

    checkpoint_frontier

  2. 02

    Replay the log written after it

    The write-ahead log suffix written since that checkpoint is replayed on top of it.

    replayed_wal_suffix_records

  3. 03

    Repair a torn final record, and say so

    If the process stopped in the middle of writing a record, the torn tail is repaired, and the tablet records that it did.

    repaired_torn_wal_tail

  4. 04

    Accept writes again

    The tablet serves again, and each transformation resumes from its own durable cursor, rebuilds from current rows or reseeds, logging its choice.

    event=derived_runtime_resume_shape

Backups

A backup captures a consistent copy of a node’s tables, their versions and the definitions that maintain them. Restoring it on a new node brings the tables back at the backup’s commit, and transformations resume from their checkpoints. Replication protects against the loss of a node; backups protect against the loss of data.

Backup and recovery

Health and readiness

Know when a node serves, and when it drains

The readiness probe answers 200 while the node serves requests and 503 while it drains, and a system relation reports the health of each component.

On a planned stop the node keeps answering reads, tells clients to retry new writes on another node, and waits until every transformation’s durable checkpoint has reached the committed heads of its sources before it exits, logging one line per transformation.

GET /auth/issuers
200 while serving · 503 while draining
system.health_signals
the health of each component, as rows
event=planned_stop_drain
one line per transformation: drained, deadline or unobserved
node.lifecycle.stop_drain_seconds
bounds the drain
the probe, and what a drain answers
# readiness: 200 while serving, 503 while draining
GET /auth/issuers
# a new public write during a drain: retry it on another node
resource_exhausted (HTTP 429)
component health, read like any table
SELECT *
FROM system.health_signals;

Questions about durability and consistency

What a technical buyer asks about acknowledgements, visibility and recovery, answered from the docs.

After the tablet’s owner has ordered it, its records have joined a write-ahead log group, and that group has been written to the local log and passed one persistence barrier. Only then is the receipt sent and the write published to everything derived from it.

One contract, every table, every request

Start a node, write a row and read it back. The operations docs cover the log, recovery, backups and the probe you wire into your platform.