Skip to main content
All comparisons/ScramDB vs Apache Pinot

ScramDB vs Apache Pinot

Pinot is built for user-facing dashboards with very low latency on pre-shaped data, and the shape is the point: joins live in a separate multi-stage engine rather than the default query path, and a cluster means controller, broker and server processes plus ZooKeeper and deep storage. ScramDB answered the same analytical workload several times faster from one process, with ordinary SQL joins and ordinary transactions.

Faster
4.3x
ScramDB 31.6s against Pinot 135s. Pinot left queries unanswered on this run; its total counts only what it finished.
Faster from cold
1.5x
ScramDB 189s against Pinot 290s. First touch, nothing cached.
Faster to load
2.8x
ScramDB 717s against Pinot 2,032s. Full 100 million row ingest.
At a glance

Side by side

ScramDBApache Pinot
JoinsEvery SQL join in the default query pathAvailable through the multi-stage engine, not the single-stage default
What you deployOne binary, one processController, broker and server processes, plus ZooKeeper and deep storage
TransactionsFull ACID up to serializable isolationUpserts by primary key and soft deletes; no multi-statement transactions documented
Referential integrityForeign keys, CHECK constraints, triggers, stored proceduresNot part of the model
Wire protocolPostgreSQL wire protocol, every standard driver and BI toolIts own SQL API
Row-level securityPolicies enforced in the engine for every readerNot part of the model
BranchingFork the database instantly, or open it as it was at any past timestampNot applicable
AI and agentsA semantic layer inside the engine that agents connect to directly, bound by the caller’s own permissionsVector index for similarity search

Low latency on data you shaped in advance

Pinot gets its speed by knowing the question ahead of time: pre-aggregated tables, star-tree indexes, denormalised data. Ask a question it was not shaped for, especially one with a join, and you are into the multi-stage engine and a different performance profile.

ScramDB compiles whatever query you send to native machine code and reads only the column blocks it needs, so an ad hoc question and a planned one cost roughly what the data says they should.

One process, and it is your database too

Pinot is downstream of a real database and needs ZooKeeper and three service types to serve a query. ScramDB is the database, on one binary, with the analytics in the same engine.

When Pinot is the right answer

User-facing analytics at extreme concurrency where the queries are known in advance and ten millisecond latency at very high query rates is the requirement.

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.