Benchmark 100M Profiles

July 11, 2026 ยท View on GitHub

Charts

Execution Time

Execution Time

Write Throughput

Write Throughput

Lookup Throughput

Lookup Throughput

Index Scan Throughput

Index Scan Throughput

Query Throughput

Query Throughput

Resource Footprint

Resource Footprint

Total By Engine

EngineStatusRun timeCompleted phase timePre-read stabilizePost-update stabilizeSettleReopenVerifyStorageProcess peak memoryFinal checksum
ZoneTreeCompleted15_211_870 ms14_876_499 ms72_094 ms213_421 ms46 ms6_166 ms42_588 ms7.4 GB56.3 GB4E408868CAFD4857
RocksDBCompleted26_163_586 ms25_261_865 ms467_556 ms412_322 ms0 ms158 ms21_305 ms12.4 GB11.1 GB4E408868CAFD4857

Correctness

Checksum validation passed across completed engines: ZoneTree, RocksDB.

Interpretation Notes

  • This benchmark measures live single-operation profile inserts, updates, reads, and indexed queries.
  • ZoneTree and RocksDB secondary indexes are maintained by the benchmark application using separate stores.
  • Embedded engines run in the benchmark process.
  • Completed phase time is the sum of measured workload phases. Run time also includes initialization, stabilization, settle/checkpoint, reopen, verification, and reporting overhead.
  • The write throughput chart includes raw write phases and derived write-readiness bars that add the following stabilization phase.
  • Storage is measured after each engine settles or checkpoints its data.
  • Process peak memory is measured for the benchmark process.

Write Readiness

EngineInsertPre-read stabilizeInsert + stabilizeInsert ready throughputUpdatePost-update stabilizeUpdate + stabilizeUpdate ready throughput
ZoneTree816_344 ms72_094 ms888_438 ms112_557/s3_526_941 ms213_421 ms3_740_362 ms26_735/s
RocksDB975_579 ms467_556 ms1_443_135 ms69_294/s3_488_173 ms412_322 ms3_900_494 ms25_638/s

Phase Results

ZoneTree

PhaseOperationsTimeThroughputChecksum
insert profiles100_000_000816_344 ms122_497/sFCB46248E0D81425
read by user id100_000_000284_645 ms351_315/s67AE5B5CBB949FF2
lookup by email100_000_000688_776 ms145_185/s194BD509DF206EEF
scan country/status index25_000_000184_348 ms135_613/sE5AD445D8FD41F6E
query country/status25_000_0001_397_633 ms17_887/sCB50E4518707DF74
scan created-at index25_000_000269_914 ms92_622/sBAA51FE433523875
query created-at range25_000_0002_466_040 ms10_138/s2686C0AE1BD960A6
scan top reputation index25_000_000125_808 ms198_716/s7A98B23B6A0990A5
query top reputation25_000_000869_563 ms28_750/s26ACD96F896D94A5
update profiles100_000_0003_526_941 ms28_353/sF7A87BCF70BA626A
post-update read by user id100_000_000361_216 ms276_843/s554A87520F10E43D
post-update lookup by email100_000_000773_479 ms129_286/s1745396EBE06F8E3
post-update scan country/status index25_000_000187_726 ms133_173/s5740FFFEAB8201F8
post-update query country/status25_000_0001_617_944 ms15_452/sD31B1C12613C4ED1
post-update scan top reputation index25_000_000122_923 ms203_380/s6AF8CAC8CCE4AD25
post-update query top reputation25_000_0001_183_199 ms21_129/s1BE71DE9C349B225

RocksDB

PhaseOperationsTimeThroughputChecksum
insert profiles100_000_000975_579 ms102_503/sFCB46248E0D81425
read by user id100_000_000539_978 ms185_193/s67AE5B5CBB949FF2
lookup by email100_000_0001_044_958 ms95_698/s194BD509DF206EEF
scan country/status index25_000_000301_223 ms82_995/sE5AD445D8FD41F6E
query country/status25_000_0003_047_132 ms8_204/sCB50E4518707DF74
scan created-at index25_000_000509_790 ms49_040/sBAA51FE433523875
query created-at range25_000_0003_661_163 ms6_828/s2686C0AE1BD960A6
scan top reputation index25_000_000275_059 ms90_890/s7A98B23B6A0990A5
query top reputation25_000_0003_160_258 ms7_911/s26ACD96F896D94A5
update profiles100_000_0003_488_173 ms28_668/sF7A87BCF70BA626A
post-update read by user id100_000_000533_499 ms187_442/s554A87520F10E43D
post-update lookup by email100_000_0001_041_403 ms96_024/s1745396EBE06F8E3
post-update scan country/status index25_000_000298_707 ms83_694/s5740FFFEAB8201F8
post-update query country/status25_000_0003_097_923 ms8_070/sD31B1C12613C4ED1
post-update scan top reputation index25_000_000273_433 ms91_430/s6AF8CAC8CCE4AD25
post-update query top reputation25_000_0003_013_588 ms8_296/s1BE71DE9C349B225

Configuration

  • Profiles: 100_000_000
  • Profile writes: individual operations
  • UserId reads: 100_000_000
  • Email lookups: 100_000_000
  • Query count: 25_000_000
  • Profile updates: 100_000_000
  • Post-update UserId reads: 100_000_000
  • Post-update email lookups: 100_000_000
  • Post-update query count: 25_000_000
  • Query limit: 100
  • Seed: 570123434
  • Timeout: 120_000 seconds per engine

Environment

  • OS: Ubuntu 24.04.3 LTS
  • Architecture: X64
  • .NET: 10.0.9
  • CPU: AMD EPYC 4345P 8-Core Processor
  • Logical processors: 16
  • Total available memory: 60.4 GB
  • Initial process working set: 6.6 GB

Engine Settings

ZoneTree

  • MutableSegmentMaxItemCount: 250000
  • SparseArrayStepSize: 16
  • KeyCacheSize: 1024
  • ValueCacheSize: 1024
  • IteratorPrefetchSize: 16
  • BlockCacheLifeTime: 1 minutes
  • BottomMergePolicy: Full bottom merge when bottom segment count exceeds 1
  • ReadStabilization: Settle before read/query phases

RocksDB

  • Databases: profiles,email-index,country-status-index,created-at-index,reputation-index
  • Compression: Zstd
  • WriteBufferMb: 1024
  • MaxWriteBufferNumber: 4
  • WriteSync: false
  • ReadStabilization: Compact before read/query phases

Durability Settings

  • ZoneTree: AsyncCompressed WAL default; MutableSegmentMaxItemCount=250000; SparseArrayStepSize=16; KeyCacheSize=1024; ValueCacheSize=1024; IteratorPrefetchSize=16; BlockCacheLifeTime=1 minutes; application-managed secondary indexes; background maintainers enabled.
  • RocksDB: WAL enabled; five separate RocksDB instances; no WriteBatch across indexes; compression=Zstd; write_buffer_size=1024 MB per database; max_write_buffer_number=4.