Skip to main content
All comparisons/ScramDB vs Citus

ScramDB vs Citus

Citus turns PostgreSQL into a distributed database by sharding tables across worker nodes. It is a clean design and it does not change what happens inside each shard: a row heap, read by the PostgreSQL executor, one tuple at a time. ScramDB answered the same analytical workload 55 times faster on a single node, and the queries that do not align with your distribution column still work.

Faster
55x
ScramDB 31.6s against Citus 1,745s. Both answered every query.
Faster from cold
11x
ScramDB 189s against Citus 2,110s. First touch, nothing cached.
Faster to load
2.1x
ScramDB 717s against Citus 1,529s. Full 100 million row ingest.
Smaller on disk
1.1x
ScramDB 16.1 GiB against Citus 17.7 GiB. Same data, after load.
At a glance

Side by side

ScramDBCitus
StorageColumnar and compressed for every tablePostgreSQL row heap per shard, with an optional columnar table access method
ExecutionQueries compile to native machine code and use every coreThe PostgreSQL executor per shard, coordinated across workers
Distribution keyNone to choose. Any query is a queryCo-location design decides which queries stay fast; unaligned joins repartition through the coordinator
What you deployOne binary, one processA coordinator plus worker nodes, each a PostgreSQL instance
Vacuum and bloatNothing to schedule, nothing to reclaim by handPostgreSQL autovacuum on every node
Wire protocolPostgreSQL wire protocol, every standard driverPostgreSQL, natively
BranchingFork the database instantly, or open it as it was at any past timestampBackup and restore
AI and agentsA semantic layer inside the engine that agents connect to directly, bound by the caller’s own permissionsExtensions, per node

Sharding moves the problem, it does not solve it

Spreading a slow scan across eight machines makes it eight times less slow, at the cost of a cluster to run, a distribution column to design around, and a coordinator in the path of anything that does not co-locate. ScramDB makes the scan fast in the first place: columnar storage, block pruning and compiled execution, on one machine.

When Citus is the right answer

Multi-tenant SaaS with a natural tenant key, where the workload shards cleanly and staying inside the PostgreSQL extension ecosystem matters more than the per-node engine.

The measurement, as of 5 September 2026. A full analytical workload over 100 million rows of real web analytics data, run on a 16 vCPU AWS instance. Ours is a single ScramDB node in its stock configuration, with the GPU off and nothing tuned for the test. Rival figures are those systems’ own published results for the same instance type. These are the numbers as of that date, not a permanent scoreboard: the engine is tuned continuously and it has got faster through every round of this work, so a later run should read better than this one.

Run it yourself in one line

One static binary, no dependencies. It picks its own config, listens on the postgres port 5432 and runs in the background.

$curl -fsSL https://scramdb.com/install | bash

Quick start · How the engine works · Talk to us

A full analytical workload over 100 million rows of real web analytics data, run on a 16 vCPU AWS instance, measured 5 September 2026. Ours is a single ScramDB node in its stock configuration, with the GPU off and nothing tuned for the test. Rival figures are those systems’ own published results for the same instance type. These are the numbers as of that date, not a permanent scoreboard: the engine is tuned continuously and it has got faster through every round of this work, so a later run should read better than this one.