Benchmark 1M Profiles

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

Engine Status Run time Completed phase time Pre-read stabilize Post-update stabilize Settle Reopen Verify Storage Process peak memory Final checksum
ZoneTree Completed 85_247 ms 80_447 ms 2_164 ms 1_681 ms 15 ms 112 ms 7 ms 73.4 MB 1.7 GB B7578931045C8FC5
RocksDB Completed 221_057 ms 217_506 ms 1_165 ms 1_970 ms 0 ms 44 ms 151 ms 361.7 MB 629.4 MB B7578931045C8FC5
SQLite Completed 491_633 ms 491_516 ms n/a n/a 53 ms 0 ms 5 ms 284.6 MB 637.4 MB B7578931045C8FC5
MySQL Completed 1_303_147 ms 1_302_930 ms n/a n/a 1 ms 5 ms 39 ms 311.7 MB 135.2 MB B7578931045C8FC5

Correctness

Checksum validation passed across completed engines: ZoneTree, RocksDB, SQLite, MySQL.

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.
  • SQLite and MySQL maintain secondary indexes inside the database engine.
  • MySQL is measured as a client/server database over TCP.
  • 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.
  • Storage is measured after each engine settles or checkpoints its data.
  • Process peak memory is measured for the benchmark process. For MySQL, this excludes MySQL server/container memory.

Phase Results

ZoneTree

Phase Operations Time Throughput Checksum
insert profiles 1_000_000 5_629 ms 177_664/s 70EEB1E90366F6E5
read by user id 1_000_000 988 ms 1_012_059/s 0FB577C390019AC8
lookup by email 1_000_000 2_227 ms 448_947/s 9C199CC596F7AC10
scan country/status index 250_000 1_620 ms 154_332/s B3350AAEFBCE068F
query country/status 250_000 12_075 ms 20_704/s 11A194A99CB7D634
scan created-at index 250_000 1_634 ms 153_026/s E3FE4E613ABE23A5
query created-at range 250_000 10_872 ms 22_995/s B8595B9702849552
scan top reputation index 250_000 978 ms 255_725/s FD457DADD7424105
query top reputation 250_000 7_438 ms 33_610/s B472892F8C7EF235
update profiles 1_000_000 11_906 ms 83_995/s 2440ADD57E65500B
post-update read by user id 1_000_000 987 ms 1_013_229/s 7DB9AA24CC9A8B8E
post-update lookup by email 1_000_000 2_209 ms 452_782/s 43569B6DA38ACCB5
post-update scan country/status index 250_000 1_345 ms 185_899/s 896A595A5F979F99
post-update query country/status 250_000 12_230 ms 20_441/s EF5D80897CBF7824
post-update scan top reputation index 250_000 976 ms 256_097/s 905E8A81EE9017E5
post-update query top reputation 250_000 7_335 ms 34_085/s 1A17E74A9E34D635

RocksDB

Phase Operations Time Throughput Checksum
insert profiles 1_000_000 10_374 ms 96_398/s 70EEB1E90366F6E5
read by user id 1_000_000 4_617 ms 216_610/s 0FB577C390019AC8
lookup by email 1_000_000 9_217 ms 108_501/s 9C199CC596F7AC10
scan country/status index 250_000 2_913 ms 85_815/s B3350AAEFBCE068F
query country/status 250_000 27_761 ms 9_006/s 11A194A99CB7D634
scan created-at index 250_000 4_840 ms 51_653/s E3FE4E613ABE23A5
query created-at range 250_000 32_011 ms 7_810/s B8595B9702849552
scan top reputation index 250_000 2_549 ms 98_095/s FD457DADD7424105
query top reputation 250_000 25_966 ms 9_628/s B472892F8C7EF235
update profiles 1_000_000 23_257 ms 42_997/s 2440ADD57E65500B
post-update read by user id 1_000_000 4_673 ms 213_988/s 7DB9AA24CC9A8B8E
post-update lookup by email 1_000_000 9_278 ms 107_779/s 43569B6DA38ACCB5
post-update scan country/status index 250_000 2_798 ms 89_346/s 896A595A5F979F99
post-update query country/status 250_000 28_567 ms 8_751/s EF5D80897CBF7824
post-update scan top reputation index 250_000 2_547 ms 98_152/s 905E8A81EE9017E5
post-update query top reputation 250_000 26_139 ms 9_564/s 1A17E74A9E34D635

SQLite

Phase Operations Time Throughput Checksum
insert profiles 1_000_000 130_182 ms 7_682/s 70EEB1E90366F6E5
read by user id 1_000_000 2_714 ms 368_397/s 0FB577C390019AC8
lookup by email 1_000_000 3_574 ms 279_794/s 9C199CC596F7AC10
scan country/status index 250_000 4_514 ms 55_386/s B3350AAEFBCE068F
query country/status 250_000 28_271 ms 8_843/s 11A194A99CB7D634
scan created-at index 250_000 4_489 ms 55_693/s E3FE4E613ABE23A5
query created-at range 250_000 25_344 ms 9_864/s B8595B9702849552
scan top reputation index 250_000 3_956 ms 63_203/s FD457DADD7424105
query top reputation 250_000 26_268 ms 9_517/s B472892F8C7EF235
update profiles 1_000_000 192_475 ms 5_195/s 2440ADD57E65500B
post-update read by user id 1_000_000 2_627 ms 380_698/s 7DB9AA24CC9A8B8E
post-update lookup by email 1_000_000 3_501 ms 285_638/s 43569B6DA38ACCB5
post-update scan country/status index 250_000 4_493 ms 55_643/s 896A595A5F979F99
post-update query country/status 250_000 28_676 ms 8_718/s EF5D80897CBF7824
post-update scan top reputation index 250_000 3_977 ms 62_863/s 905E8A81EE9017E5
post-update query top reputation 250_000 26_456 ms 9_450/s 1A17E74A9E34D635

MySQL

Phase Operations Time Throughput Checksum
insert profiles 1_000_000 141_359 ms 7_074/s 70EEB1E90366F6E5
read by user id 1_000_000 100_070 ms 9_993/s 0FB577C390019AC8
lookup by email 1_000_000 102_114 ms 9_793/s 9C199CC596F7AC10
scan country/status index 250_000 36_185 ms 6_909/s B3350AAEFBCE068F
query country/status 250_000 63_856 ms 3_915/s 11A194A99CB7D634
scan created-at index 250_000 35_702 ms 7_002/s E3FE4E613ABE23A5
query created-at range 250_000 62_493 ms 4_000/s B8595B9702849552
scan top reputation index 250_000 29_321 ms 8_526/s FD457DADD7424105
query top reputation 250_000 55_532 ms 4_502/s B472892F8C7EF235
update profiles 1_000_000 289_650 ms 3_452/s 2440ADD57E65500B
post-update read by user id 1_000_000 92_333 ms 10_830/s 7DB9AA24CC9A8B8E
post-update lookup by email 1_000_000 100_100 ms 9_990/s 43569B6DA38ACCB5
post-update scan country/status index 250_000 36_727 ms 6_807/s 896A595A5F979F99
post-update query country/status 250_000 67_034 ms 3_729/s EF5D80897CBF7824
post-update scan top reputation index 250_000 32_098 ms 7_789/s 905E8A81EE9017E5
post-update query top reputation 250_000 58_356 ms 4_284/s 1A17E74A9E34D635

Configuration

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

Environment

  • OS: Microsoft Windows 10.0.26200
  • Architecture: X64
  • .NET: 10.0.6
  • CPU: Intel(R) Core(TM) Ultra 7 265KF
  • Logical processors: 20
  • Total available memory: 63.6 GB
  • Initial process working set: 104.5 MB

Engine Settings

ZoneTree

  • MutableSegmentMaxItemCount: 250000
  • SparseArrayStepSize: 16
  • KeyCacheSize: 1024
  • ValueCacheSize: 1024
  • IteratorPrefetchSize: 16
  • BlockCacheLifeTime: 1 minutes
  • 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

SQLite

  • JournalMode: WAL
  • Synchronous: NORMAL
  • CacheMb: 1024
  • MmapMb: 1024
  • TempStore: MEMORY

MySQL

  • Host: 192.168.178.25
  • Port: 3306
  • Database: profilebench
  • User: root

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.
  • SQLite: WAL journal mode; synchronous=NORMAL; cache=1024 MB; mmap=1024 MB; native SQL indexes; single-row writes use autocommit.
  • MySQL: InnoDB; benchmark Docker disables binlog, sets innodb_flush_log_at_trx_commit=2 and sync_binlog=0; native SQL indexes; single-row writes use autocommit.