Benchmark 5M 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
ZoneTreeCompleted482_675 ms465_911 ms4_743 ms11_025 ms17 ms313 ms8 ms367.0 MB6.4 GB46D8A7E801AF2C78
RocksDBCompleted1_096_116 ms1_083_778 ms4_369 ms6_788 ms0 ms48 ms905 ms1.5 GB2.2 GB46D8A7E801AF2C78

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
ZoneTree29_378 ms4_743 ms34_120 ms146_540/s91_359 ms11_025 ms102_384 ms48_836/s
RocksDB28_300 ms4_369 ms32_669 ms153_050/s89_846 ms6_788 ms96_635 ms51_741/s

Phase Results

ZoneTree

PhaseOperationsTimeThroughputChecksum
insert profiles5_000_00029_378 ms170_197/s1CE7E98CB02A5BE5
read by user id5_000_0006_055 ms825_705/sAEA5A1780B272814
lookup by email5_000_00015_075 ms331_678/s8C938BAD6D81DE32
scan country/status index1_250_0007_195 ms173_736/s14F9C1B4EC5C77A4
query country/status1_250_00063_469 ms19_695/sBE695CC5C1575C79
scan created-at index1_250_0009_426 ms132_605/sD829C2BE1D8D7CE9
query created-at range1_250_00061_383 ms20_364/s9522258E5C41C535
scan top reputation index1_250_0005_283 ms236_600/s57554D37E1C53C65
query top reputation1_250_00040_126 ms31_152/sC5D2EF10F82C5265
update profiles5_000_00091_359 ms54_729/sAD890A8797F25027
post-update read by user id5_000_0006_156 ms812_174/s537ED4CF9543514D
post-update lookup by email5_000_00015_177 ms329_450/sF71390337A010BCF
post-update scan country/status index1_250_0007_031 ms177_781/s0CC5E86584E76211
post-update query country/status1_250_00062_010 ms20_158/s25EFC06A4834C76C
post-update scan top reputation index1_250_0005_438 ms229_846/s99CD00E2A0593D45
post-update query top reputation1_250_00041_349 ms30_231/sBB9901538093B4C5

RocksDB

PhaseOperationsTimeThroughputChecksum
insert profiles5_000_00028_300 ms176_681/s1CE7E98CB02A5BE5
read by user id5_000_00019_200 ms260_421/sAEA5A1780B272814
lookup by email5_000_00038_793 ms128_891/s8C938BAD6D81DE32
scan country/status index1_250_00015_284 ms81_784/s14F9C1B4EC5C77A4
query country/status1_250_000148_662 ms8_408/sBE695CC5C1575C79
scan created-at index1_250_00022_667 ms55_147/sD829C2BE1D8D7CE9
query created-at range1_250_000168_968 ms7_398/s9522258E5C41C535
scan top reputation index1_250_00014_331 ms87_226/s57554D37E1C53C65
query top reputation1_250_000149_858 ms8_341/sC5D2EF10F82C5265
update profiles5_000_00089_846 ms55_651/sAD890A8797F25027
post-update read by user id5_000_00019_552 ms255_732/s537ED4CF9543514D
post-update lookup by email5_000_00039_374 ms126_986/sF71390337A010BCF
post-update scan country/status index1_250_00015_193 ms82_276/s0CC5E86584E76211
post-update query country/status1_250_000150_737 ms8_293/s25EFC06A4834C76C
post-update scan top reputation index1_250_00014_226 ms87_868/s99CD00E2A0593D45
post-update query top reputation1_250_000148_789 ms8_401/sBB9901538093B4C5

Configuration

  • Profiles: 5_000_000
  • Profile writes: individual operations
  • UserId reads: 5_000_000
  • Email lookups: 5_000_000
  • Query count: 1_250_000
  • Profile updates: 5_000_000
  • Post-update UserId reads: 5_000_000
  • Post-update email lookups: 5_000_000
  • Post-update query count: 1_250_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: 371.9 MB

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.