ScramDB vs Apache Doris
Apache Doris describes its unique-key tables as the way to keep dimension tables synchronised from upstream transactional databases. That is the shape of the product: it is downstream of your database, in a frontend and backend cluster of its own. ScramDB answered the same analytical workload faster, from one process, and it is the upstream database too.
Side by side
| ScramDB | Apache Doris | |
|---|---|---|
| Position in your stack | The database itself | Downstream of it, kept in step by upserts |
| What you deploy | One binary, one process | Frontend and backend nodes |
| Transactions | Full ACID up to serializable isolation | Transactional at the load level, with merge-on-write upserts |
| Wire protocol | PostgreSQL wire protocol | MySQL protocol |
| Referential integrity | Foreign keys, CHECK constraints, triggers, stored procedures | Not documented |
| Row-level security | Policies enforced in the engine for every reader | Not documented |
| Branching | Fork the database instantly, or open it as it was at any past timestamp | Backup and restore |
| AI and agents | A semantic layer inside the engine that agents connect to directly, bound by the caller’s own permissions | Vector index for approximate nearest neighbour search |
Being downstream has a cost
Every system that receives a copy of your data inherits a pipeline, a lag and a schema that has to be kept in step by hand. Doris is built to be good at receiving that copy. ScramDB removes the copy: the analytical query reads the rows the transaction wrote, so there is nothing to synchronise and nothing to fall behind.
And it was faster here
On the same machine and the same data, ScramDB answered the analytical workload faster than Doris did, from a single process rather than a frontend and backend cluster.
When Doris is the right answer
High-concurrency real-time analytics at a scale that needs many machines, with upsert-heavy ingestion from upstream systems, under Apache 2.0.
Other head to heads
Same wire protocol, same drivers, same SQL. A columnar engine and native-code execution underneath.
ClickHouse cannot hold your transactions, so it lives next to a real database with a pipeline between them. ScramDB is both.
No columnar storage, no vectorized execution, no parallel query in the community server. Every analytical scan is a row walk.
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