Skip to content

FerretDB vs DocumentDB YCSB benchmark, October 23, 2026

YCSB workloads A, B and C against FerretDB 2 and standalone DocumentDB 1.0, each on its own 4 vCPU / 8 GB instance with a 10 million record dataset larger than RAM. Throughput, read p99 and update p99 at 16, 64 and 256 client threads.

Results published October 23, 2026. This page last updated November 3, 2026. Read the discussion in MongoDB vs FerretDB vs DocumentDB: benchmarks across two runs.

What was measured and why

FerretDB and standalone DocumentDB are the two MongoDB wire-protocol engines on Layerbase Cloud, and both store documents in PostgreSQL through the DocumentDB extension. This run measures the two packaged paths a client can connect to, on matched instances with the hardware profile behind our Dedicated 8GB preset, so the choice between them can rest on measured throughput and tail latency rather than on the shared storage layer.

Results

Every table below is rendered from results.csv. Throughput is rounded to whole operations per second; p99 latencies are shown in milliseconds as recorded. A dash means the workload issued no operations of that kind. Lower latency is better.

Workload C: 100% read

Workload C (100% read), measured October 23, 2026.
Client threadsEngineThroughput (ops/sec)Read p99 (ms)Update p99 (ms)Operations completedRuntime (s)
16FerretDB4,26510.055-1,000,000234
16DocumentDB5,1229.231-1,000,000195
64FerretDB4,34244.831-1,000,000230
64DocumentDB5,33840.607-1,000,000187
256FerretDB4,100191.871-1,000,000244
256DocumentDB5,462163.967-1,000,000183

Workload B: 95% read / 5% update

Workload B (95% read / 5% update), measured October 23, 2026.
Client threadsEngineThroughput (ops/sec)Read p99 (ms)Update p99 (ms)Operations completedRuntime (s)
16FerretDB3,7929.975101.9511,000,000264
16DocumentDB4,7117.37996.1911,000,000212
64FerretDB3,84150.591156.9271,000,000260
64DocumentDB5,19636.831306.9431,000,000192
256FerretDB3,838215.295263.4231,000,000261
256DocumentDB5,189167.039315.3911,000,000193

Workload A: 50% read / 50% update

Workload A (50% read / 50% update), measured October 23, 2026.
Client threadsEngineThroughput (ops/sec)Read p99 (ms)Update p99 (ms)Operations completedRuntime (s)
16FerretDB1,8867.99992.0951,000,000530
16DocumentDB2,0166.667103.8071,000,000496
64FerretDB1,78379.295324.0951,000,000561
64DocumentDB2,00527.871687.1031,000,000499
256FerretDB1,708756.735931.3271,000,000586
256DocumentDB1,821576.5112,226.1751,000,000549

Load phase

Initial load phase. Throughput rounded to whole operations per second.
EngineClient threadsRecords insertedThroughput (ops/sec)Runtime (s)
FerretDB3210,000,0003,0943,232
DocumentDB3210,000,0004,2342,362

Methodology

  • YCSB (Yahoo! Cloud Serving Benchmark) with its MongoDB client, at the pinned commit and Java version listed under Versions.
  • 10 million records loaded per engine with 32 client threads, then 1 million operations per workload phase.
  • Workloads C (100% read), B (95% read / 5% update) and A (50% read / 50% update), each at 16, 64 and 256 client threads.
  • Write concern w=1 and a 600-second cap per workload phase. Every phase completed its full million operations before the cap.
  • The suite ran C, then B, then A, with thread counts ascending within each workload. Data was loaded once per engine and reused across phases; caches were not reset and phase order was not randomized.
  • The default MongoDB driver pool is 100 connections, so 256 client threads does not mean 256 simultaneous database connections.
  • Both arms used the same PostgreSQL settings: 2 GiB shared_buffers, max_wal_size=8GB, effective_io_concurrency=200, random_page_cost=1.1, max_connections=300, synchronous_commit=on and full_page_writes=on.

Hardware

  • Two separate instances, one per engine, in a US East region.
  • Each instance: 4 vCPUs, 8 GB RAM, Debian 13, and a 100 GB network-attached high-speed volume.
  • ZFS with a 16K recordsize and the ARC capped at 2 GiB.
  • The YCSB client ran on the same instance as its database, so client CPU and memory shared the machine on both arms.
  • This is the hardware profile behind the Layerbase Dedicated 8GB preset.

Versions and image digests

Read from the pins and PostgreSQL settings captured in measurements.json.
YCSB commit66302f301b13f60d4bcb2f29f478586bb1d6f2e0
Javaopenjdk version "17.0.20" 2026-07-21
JDK releasejdk-17.0.20+8
Linux kernel6.12.113+deb13-amd64
FerretDB: FerretDB frontendghcr.io/ferretdb/ferretdb:2@sha256:5706414241eb84f0515512c37b46db0f1b1eac9e5ceb7e4c2523211c184b1985
FerretDB: PostgreSQL with DocumentDBghcr.io/ferretdb/postgres-documentdb:17@sha256:2386795ec2aa7ae559304361979f1dc5708d383ee9020ae63dadc2940dfe58f7
FerretDB: recorded PostgreSQL version17.6 (Debian 17.6-2.pgdg12+1)
DocumentDB: DocumentDB Local (gateway and PostgreSQL)ghcr.io/documentdb/documentdb/documentdb-local:pg17-1.0.0@sha256:296aeac28562ab3081cb6854692f2b51acd55b7a4356362dc365d5e86b8b2dff
DocumentDB: recorded PostgreSQL version17.11 (Debian 17.11-1.pgdg13+2)

Raw data

The original YCSB log archives are kept privately because setup and connection logs contain credentials. Their SHA-256 hashes are ferretdb-logs.tar.gz 86561d646238b66de93023fb5bde2362796235f11b60e73841856d20e119addd and documentdb-logs.tar.gz b9c9e41b2da185acba77de80bbcb65ae52e440a297ef7c5921ecbad5b4079d95.

Caveats

  • One complete run per stack, not repeated trials, so there is no estimate of run-to-run variance or confidence interval.
  • The two stacks ran different PostgreSQL minor versions (17.6 and 17.11) and bundled extension builds. The results compare whole packaged stacks; they do not isolate gateway overhead.
  • Separate instances and volumes can vary despite matching specifications.
  • The fixed workload order carries cache and update history into later phases.
  • YCSB point reads and updates do not test aggregation pipelines, application-specific indexes, transactions, change streams, failover, replication or full MongoDB compatibility.
  • w=1 with synchronous PostgreSQL commits is the tested configuration, not a replicated durability or crash-recovery guarantee.
  • Success counts are the YCSB client return status, not an independent audit of every stored value.
  • DocumentDB here is the open-source DocumentDB project. Amazon DocumentDB and MongoDB Atlas were not tested.

Cite or republish this run

The results and raw data are licensed under CC BY 4.0: quote them, chart them or republish them, with credit to Layerbase and a link back to this page. Copy whichever format fits where you are publishing.

HTML
Source: <a href="https://layerbase.com/benchmarks/2026-10-23-ferretdb-documentdb">FerretDB vs DocumentDB YCSB benchmark, October 23, 2026</a> by Layerbase, measured October 23, 2026. Data licensed under CC BY 4.0.
Markdown
Source: [FerretDB vs DocumentDB YCSB benchmark, October 23, 2026](https://layerbase.com/benchmarks/2026-10-23-ferretdb-documentdb) by Layerbase, measured October 23, 2026. Data licensed under CC BY 4.0.
Plain text
Layerbase, "FerretDB vs DocumentDB YCSB benchmark, October 23, 2026", measured October 23, 2026, https://layerbase.com/benchmarks/2026-10-23-ferretdb-documentdb. Data licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/).

Raw data: https://layerbase.com/benchmarks/2026-10-23-ferretdb-documentdb/results.csv.

Other runs are listed on the Layerbase benchmarks hub.