Skip to content

Benchmark comparison ​

The two rules this page lives by

  1. Never compare across layers. An in-process data-structure number and a networked-server number are not the same thing, and putting them on one axis is the oldest marketing trick there is.
  2. Never compare a write to a read. Reads are cheaper than writes on every engine — ours included — so we compare write-to-write, the direction our ingest path actually runs.

Sovereign Engine is a research preview, not production-ready. Everything below is reproducible; where we fall short, we say so before you have to find it.

5.9M
writes / sec · 32 cores
one Ed25519 signature per frame, over 100–256 deltas
0
allocations / op
zero-GC hot path, enforced by a CI gate
8.95s
convergence · 100 node processes
3 machines in 3 regions, no leader — a capability, not a rank
PQ
key exchange, by default
X25519MLKEM768, asserted by a test · ML-DSA-65 signing opt-in
The honest head-to-head

In-memory writes — the only chart where a bar-to-bar comparison is fair

same layer · same op type

Every bar here is an in-memory write, so the lengths actually mean something against each other. Ours is the only one paying for a signature check and a CRDT merge on the write path — one Ed25519 verify per frame, amortized across the 100–256 deltas it carries. Reads are cheaper on every engine — Dragonfly's reads reach 4M–15.5M and we don't match them; on writes, we lead.

Sovereign ingest Sovereign signature-checked5.7M–6.0M ops/s
32 cores · one Ed25519 signature per frame, over 100–256 deltas source ↗
Dragonfly 4.2M–5.2M ops/s
48 cores · bare write, no crypto source ↗
Valkey 1.19M ops/s
I/O-threaded · no crypto source ↗
Redis 72K–1.8M ops/s
single core by design · pipelined high end source ↗
Per core, the gap widens:Sovereign≈184K writes/core signature-checked frames + CRDT mergeDragonfly≈108K writes/core bare
The engineering ceiling
50.7M–68.3M ops/s
in-process · 0 allocs/op · no locks on the write path

That's our bare data-structure core — no network, no crypto, no disk. No other engine publishes a comparable isolated core number (they're all networked servers, and the network is the point), so we don't chart it against them. It isn't a request rate; it's the headroom — the reason a signature check and a CRDT merge can sit on the write path and it still serves millions. receipts ↗

A different game

The durable engines production trusts — and why we're not on this chart

fsync + quorum · the cost we don't yet pay

These engines pay for durability and replication on every write, and that costs one to two orders of magnitude. We are a research preview and we have not shipped that cost yet — so we don't put a Sovereign bar here and pretend the comparison is fair. This is the field we intend to join; when the durable path is our measured path, we'll publish that number the same way.

TigerBeetle~100K–450K transfers/s
single core · consensus + durable source ↗
ScyllaDB~75K ops/s per node
C++ · RF=3 durable source ↗
Cassandra~42K–71K ops/s per node
multi-master, last-write-wins source ↗
etcd~44K–50K writes/s
Kubernetes’ Raft store source ↗
MongoDBtens of K ops/s
the document-database default source ↗
CockroachDB~2.1K new-order txn/s
TPC-C · 128K tpmC published · serializable SQL source ↗
MySQL~10K–30K TPS
the web’s relational workhorse source ↗
PostgreSQL~5K–12K TPS
the trust standard we hold ourselves to source ↗

Where's DynamoDB? It's a managed, sharded AWS fleet — its published Prime-Day peaks are tens of millions of requests/s in aggregate across the entire service, not per node — so it has no honest place on a per-node axis. source ↗

The full landscape

Every number, with its workload, hardware, and what's actually measured

SystemWorkloadHardwareThroughputLatencyWhat's actually measured
SovereignCRDT core (HAMT.Set)Graviton4 · 32 cores50.7M–68.3M ops/s—In-process data structure: no network, crypto, or disk ↗
SovereignProduction ingestGraviton4 · 32 cores5.7M–6.0M deltas/s—One Ed25519 verify per frame (100–256 deltas) + envelope decode + CRDT apply per delta ↗
SovereignConvergence · 100 node processes3× c7gd.8xlarge · one per AWS region8.95 s to converge (published run)—Leaderless convergence time — a capability, not ops/s; six of seven logged runs 6.6–8.7 s, one miss at 10.15 s ↗
Dragonflywrite / read48 cores · in-memory4.2–5.2M write · 4–15.5M read—In-memory server, no crypto ↗
RedisSETsingle core · in-memory~72K (1.8M pipelined)sub-msIn-memory server, no crypto ↗
FoundationDB90/10 read/write, cluster24× c3.8xlarge · 384 procs8.2M ops/scommit 1.5–2.5 msCluster peak, transactional ↗
FoundationDB90/10, single coreE3-1240 · memory engine90K reads / 35K writes /s—Single-core transactional ↗
TigerBeetletransfers (batched)single core · replicated~100K–450K transfers/s—Double-entry, consensus + durable ↗
ScyllaDBwriteper node · RF=3~75K ops/s—C++ durable, quorum ↗
Cassandrawriteper node~42K–71K ops/s—Multi-master, last-write-wins ↗
CockroachDBTPC-Cmulti-node · 3× replicated128,000+ tpmCp90 tens of msTPC-C new-order transactions / minute ↗
etcdwrite3-node Raft~44K–50K writes/s—Consensus store ↗
MongoDBdocument opssingle node · replica settens of K ops/s—Document database, durable ↗
MySQLOLTP (sysbench)single node~10K–30K TPS—Relational, durable ↗
PostgreSQLpgbench (durable)single node~5K–12K TPS—Relational, durable writes ↗
DynamoDBread/write (managed)AWS fleet · aggregatemillions req/s aggregatesingle-digit msManaged, sharded service — not a per-node number ↗

Read across a row, not down a column: a 68.3M in-process core and a 128,000-tpmC durable cluster are not the same measurement — the workload and measured columns exist so you never confuse them.

Where we're genuinely different

Time and convergence — the comparison that's a model, not a number

Raw speed is table stakes. Our thesis is about time and convergence. Nobody here tracks three axes of time, and nobody else publishes a measured convergence time for a leaderless multi-region fleet.

EngineTime modelConvergenceThe honest note
SovereignTri-temporal — system × valid × assertionLeaderless — 100 node processes on 3 machines, 8.95 s on the published runThree time axes, and a convergence time that is measured on real silicon rather than asserted.
XTDBBi-temporal — valid + system (2 axes)Single-writer / logThe bitemporal leader; we add the third axis (assertion time).
DatomicTransaction-time only (1 axis)Single transactorThe immutable pioneer; a single point of write.
CouchDBNone (MVCC revisions)Multi-master, eventual + manual conflictsThe original multi-master sync — unbounded, conflicts are yours.
Realm / Atlas Device SyncNoneClient → cloud syncOffline-first mobile sync to a central cloud, not cluster convergence.

XTDB's bitemporality is the strongest prior art and it's genuinely good — we add the third axis (assertion time: what did we believe, and when did we learn we were wrong?). CouchDB pioneered multi-master sync; we keep it leaderless, merge conflicts by arithmetic instead of handing them to you, and publish how long convergence took. We're standing on their ideas, then going further.

Every figure carries its layer, its conditions, and a source. We compare writes to writes, we never put a read on a write's axis, and we don't chart ourselves against engines paying a cost we haven't shipped. If a number here doesn't reproduce, or a comparison smuggles a layer or a read-for-a-write — that's a bug. Please open an issue.

How to check us ​

  • Every figure has a source — hover the bars, or read the receipts in docs/evidence/.
  • Run it yourself. scripts/benchmark.sh reproduces the core gate; go test ./... runs clean. On a small box the 32-core gate self-skips rather than print a misleading number.
  • The harness is published. The convergence gate, the workload generator, and the integrity checks are all in the repo. We would rather you re-run it than trust it.

What we deliberately don't do ​

  • No bare "N million ops/s" headline without conditions.
  • No read number passed off as a write number, or vice versa.
  • No in-process microbench presented as a server rate.
  • No cluster aggregate presented as a per-node figure.
  • No "N× faster than Y" ratio without the absolute, the core counts, and the method.
  • No durability or consensus claimed that the measured path didn't pay for.

Find a number here that doesn't reproduce, or a comparison that smuggles a layer or a read-for-a-write — that is a bug. Please open an issue.

Engineered from first principles to solve the distributed state problem without the latency tax of traditional consensus.