Benchmark 10M 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
ZoneTreeCompleted1_037_916 ms1_003_624 ms11_319 ms21_475 ms34 ms639 ms8 ms730.0 MB20.2 GB78E34B89C21C4B51
RocksDBCompleted2_267_368 ms2_246_395 ms5_874 ms12_487 ms0 ms52 ms2_175 ms2.0 GB2.9 GB78E34B89C21C4B51

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
ZoneTree61_305 ms11_319 ms72_624 ms137_696/s205_745 ms21_475 ms227_220 ms44_010/s
RocksDB57_008 ms5_874 ms62_881 ms159_030/s204_026 ms12_487 ms216_512 ms46_187/s

Phase Results

ZoneTree

PhaseOperationsTimeThroughputChecksum
insert profiles10_000_00061_305 ms163_119/s07762AC56C55E0A5
read by user id10_000_00014_612 ms684_376/sF4608F0DA193D0D9
lookup by email10_000_00037_524 ms266_497/sADE91BF4BD85A55B
scan country/status index2_500_00014_682 ms170_280/sFBF42B2AEF322871
query country/status2_500_000128_968 ms19_385/s590A469174D5C47A
scan created-at index2_500_00019_293 ms129_581/sAA7BB5512A595F45
query created-at range2_500_000137_209 ms18_220/sD5F1890132634766
scan top reputation index2_500_00011_524 ms216_943/sC813C20204E07EE5
query top reputation2_500_00079_346 ms31_508/s7F5BB4ED96D5DEE5
update profiles10_000_000205_745 ms48_604/s6BDE7DC8A52F666F
post-update read by user id10_000_00014_518 ms688_809/s5D5C9BD3AB671AA6
post-update lookup by email10_000_00037_267 ms268_331/sD68F7DE2F29ABC22
post-update scan country/status index2_500_00014_702 ms170_042/sF0F2E613042BB2C5
post-update query country/status2_500_000130_125 ms19_212/sBE9E7BB15662BF49
post-update scan top reputation index2_500_00011_503 ms217_336/sE1890D959DA900A5
post-update query top reputation2_500_00085_302 ms29_308/sB57C8C02E31652A5

RocksDB

PhaseOperationsTimeThroughputChecksum
insert profiles10_000_00057_008 ms175_415/s07762AC56C55E0A5
read by user id10_000_00044_080 ms226_863/sF4608F0DA193D0D9
lookup by email10_000_00085_513 ms116_942/sADE91BF4BD85A55B
scan country/status index2_500_00029_793 ms83_913/sFBF42B2AEF322871
query country/status2_500_000305_075 ms8_195/s590A469174D5C47A
scan created-at index2_500_00046_090 ms54_241/sAA7BB5512A595F45
query created-at range2_500_000348_998 ms7_163/sD5F1890132634766
scan top reputation index2_500_00027_152 ms92_074/sC813C20204E07EE5
query top reputation2_500_000304_148 ms8_220/s7F5BB4ED96D5DEE5
update profiles10_000_000204_026 ms49_013/s6BDE7DC8A52F666F
post-update read by user id10_000_00047_916 ms208_701/s5D5C9BD3AB671AA6
post-update lookup by email10_000_00089_672 ms111_518/sD68F7DE2F29ABC22
post-update scan country/status index2_500_00029_363 ms85_140/sF0F2E613042BB2C5
post-update query country/status2_500_000304_905 ms8_199/sBE9E7BB15662BF49
post-update scan top reputation index2_500_00026_980 ms92_661/sE1890D959DA900A5
post-update query top reputation2_500_000295_678 ms8_455/sB57C8C02E31652A5

Configuration

  • Profiles: 10_000_000
  • Profile writes: individual operations
  • UserId reads: 10_000_000
  • Email lookups: 10_000_000
  • Query count: 2_500_000
  • Profile updates: 10_000_000
  • Post-update UserId reads: 10_000_000
  • Post-update email lookups: 10_000_000
  • Post-update query count: 2_500_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: 708.3 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.