DevReplicate

Enterprise developer delivery · 2026-09-23

Recovery benchmark

How long a developer waits between the first call to the enterprise download API and a usable local copy of the anonymized database, per engine and dataset size. The measurements come from one developer machine and show the shape and order of magnitude, not a performance guarantee.

Which engines these numbers cover

Three engines were measured on 2026-09-23: PostgreSQL 15.19, MariaDB 10.11.19 and Redis 7.0.15.

Not measured. MongoDB, Apache Kafka and Redpanda, Microsoft SQL Server, Oracle Database and CouchDB have no figures here, and none are estimated from the three that do: their developer download and restore workflows have not been timed by this benchmark harness, so there is no comparable first API call measurement here. Valkey is not measured either — the Redis row is redis-server 7.0.15; no recovery benchmark was run against Valkey. MySQL and Percona Server are not measured separately from MariaDB, and the MariaDB figures are a logical dump, not the physical path. An engine’s absence here means only that: not measured. It is not a claim in either direction about how fast it would be.

What was measured

rows / keys: the number of rows or keys in the dataset. artifact: the size of the published artifact. All timing columns are in milliseconds. prepare and publish are the operator’s side, outside the developer total.

For each size (10,000 / 100,000 / 1,000,000 rows or keys), the harness:

  1. prepare -- seeds the rows on the primary under a hash rule and waits until the anonymized replica holds every one (the replication side; not part of the developer's wait).
  2. publish -- takes a fresh base and publishes it to the artifact catalog (backup-base + backup-publish, or backup-publish alone for Redis). This is the operator's schedule, reported separately.
  3. api -- GET /databases/default/latest with a database-scoped token.
  4. download -- GET .../artifacts/{id}/download, one request.
  5. verify -- SHA-256 of the bytes against the manifest.
  6. restore -- unpack and restore with the artifact's own restore.sh (PostgreSQL: a new instance on a spare port; MariaDB: an import into a fresh database; Redis: a redis-server booted on the .rdb, counted as usable only once it has finished LOADING) until every row is present.

developer total = api + download + verify + restore. Every harness asserts the restored copy carries no plaintext before reporting.

Results (milliseconds)

PostgreSQL 15.19 -- the artifact is a physical base of the replica server plus its WAL, which is why 10,000 rows already weigh 102 MB:

PostgreSQL 15.19 — timings in milliseconds
rows artifact prepare publish api download verify restore developer total
10,000 102 MB 483 491 8 53 225 1209 1495
100,000 124 MB 4465 531 10 61 271 2140 2482
1,000,000 339 MB 40721 1403 10 129 751 1516 2406

MariaDB 10.11.19 -- the artifact is a logical .sql.gz; the import is the cost that grows with size:

MariaDB 10.11.19 — timings in milliseconds
rows artifact prepare publish api download verify restore developer total
10,000 154 KB 1346 84 7 6 2 158 173
100,000 1.4 MB 858 126 8 6 5 399 418
1,000,000 13.8 MB 6469 897 7 11 40 2927 2985

Redis 7.0.15 -- an RDB snapshot over the replication protocol:

Redis 7.0.15 — timings in milliseconds
keys artifact prepare publish api download verify restore developer total
10,000 297 KB 5846 4924 8 5 3 114 130
100,000 3.0 MB 6659 5175 6 8 11 117 142
1,000,000 30.9 MB 15682 5365 9 18 74 390 491

Caveats