Benchmark 500K 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 41_627 ms 39_566 ms 773 ms 595 ms 17 ms 62 ms 7 ms 36.9 MB 1.2 GB DF2D9443B36E4083
RocksDB Completed 102_055 ms 99_982 ms 517 ms 1_296 ms 0 ms 30 ms 91 ms 157.8 MB 377.1 MB DF2D9443B36E4083
SQLite Completed 193_236 ms 193_180 ms n/a n/a 9 ms 0 ms 1 ms 142.2 MB 423.8 MB DF2D9443B36E4083
MySQL Completed 201_496 ms 201_327 ms n/a n/a 1 ms 4 ms 22 ms 155.5 MB 130.3 MB DF2D9443B36E4083

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.
  • 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. For MySQL, this excludes MySQL server/container memory.

Write Readiness

Engine Insert Pre-read stabilize Insert + stabilize Insert ready throughput Update Post-update stabilize Update + stabilize Update ready throughput
ZoneTree 2_217 ms 773 ms 2_991 ms 167_191/s 4_107 ms 595 ms 4_702 ms 106_333/s
RocksDB 2_554 ms 517 ms 3_071 ms 162_802/s 6_228 ms 1_296 ms 7_523 ms 66_459/s
SQLite 32_156 ms n/a 32_156 ms 15_549/s 70_914 ms n/a 70_914 ms 7_051/s
MySQL 14_739 ms n/a 14_739 ms 33_925/s 29_534 ms n/a 29_534 ms 16_929/s

Phase Results

ZoneTree

Phase Operations Time Throughput Checksum
insert profiles 500_000 2_217 ms 225_494/s B11DAA52EA85C1C5
read by user id 500_000 514 ms 972_904/s C99FB8E32773191A
lookup by email 500_000 1_021 ms 489_601/s 706F2D03429A82A7
scan country/status index 125_000 922 ms 135_625/s C8682B5E80F9553A
query country/status 125_000 6_362 ms 19_647/s 186611B1858E61AD
scan created-at index 125_000 846 ms 147_796/s 66FBD61D49358F91
query created-at range 125_000 5_696 ms 21_947/s 94A19BF05C133077
scan top reputation index 125_000 563 ms 222_058/s 9C55F81C6EE25A05
query top reputation 125_000 4_193 ms 29_813/s 52051AF97B9522C5
update profiles 500_000 4_107 ms 121_746/s 6AB28B68BED1A31E
post-update read by user id 500_000 492 ms 1_017_044/s C372C9201718339D
post-update lookup by email 500_000 970 ms 515_406/s EBA2EFF100A143BD
post-update scan country/status index 125_000 713 ms 175_297/s 4A2044B0DDBAB55C
post-update query country/status 125_000 6_270 ms 19_935/s 186111584003D4F0
post-update scan top reputation index 125_000 566 ms 220_733/s 1E83544ACD1CA8B5
post-update query top reputation 125_000 4_114 ms 30_381/s F81DD650BE1CF8C5

RocksDB

Phase Operations Time Throughput Checksum
insert profiles 500_000 2_554 ms 195_785/s B11DAA52EA85C1C5
read by user id 500_000 1_703 ms 293_654/s C99FB8E32773191A
lookup by email 500_000 2_962 ms 168_779/s 706F2D03429A82A7
scan country/status index 125_000 1_496 ms 83_549/s C8682B5E80F9553A
query country/status 125_000 14_609 ms 8_556/s 186611B1858E61AD
scan created-at index 125_000 2_017 ms 61_979/s 66FBD61D49358F91
query created-at range 125_000 15_879 ms 7_872/s 94A19BF05C133077
scan top reputation index 125_000 1_372 ms 91_102/s 9C55F81C6EE25A05
query top reputation 125_000 14_343 ms 8_715/s 52051AF97B9522C5
update profiles 500_000 6_228 ms 80_284/s 6AB28B68BED1A31E
post-update read by user id 500_000 1_712 ms 292_125/s C372C9201718339D
post-update lookup by email 500_000 2_991 ms 167_162/s EBA2EFF100A143BD
post-update scan country/status index 125_000 1_456 ms 85_865/s 4A2044B0DDBAB55C
post-update query country/status 125_000 14_882 ms 8_399/s 186111584003D4F0
post-update scan top reputation index 125_000 1_367 ms 91_440/s 1E83544ACD1CA8B5
post-update query top reputation 125_000 14_411 ms 8_674/s F81DD650BE1CF8C5

SQLite

Phase Operations Time Throughput Checksum
insert profiles 500_000 32_156 ms 15_549/s B11DAA52EA85C1C5
read by user id 500_000 1_258 ms 397_563/s C99FB8E32773191A
lookup by email 500_000 1_651 ms 302_775/s 706F2D03429A82A7
scan country/status index 125_000 2_314 ms 54_013/s C8682B5E80F9553A
query country/status 125_000 15_336 ms 8_151/s 186611B1858E61AD
scan created-at index 125_000 2_210 ms 56_549/s 66FBD61D49358F91
query created-at range 125_000 13_944 ms 8_965/s 94A19BF05C133077
scan top reputation index 125_000 1_931 ms 64_735/s 9C55F81C6EE25A05
query top reputation 125_000 14_548 ms 8_592/s 52051AF97B9522C5
update profiles 500_000 70_914 ms 7_051/s 6AB28B68BED1A31E
post-update read by user id 500_000 1_210 ms 413_190/s C372C9201718339D
post-update lookup by email 500_000 1_640 ms 304_820/s EBA2EFF100A143BD
post-update scan country/status index 125_000 2_265 ms 55_177/s 4A2044B0DDBAB55C
post-update query country/status 125_000 15_296 ms 8_172/s 186111584003D4F0
post-update scan top reputation index 125_000 1_930 ms 64_750/s 1E83544ACD1CA8B5
post-update query top reputation 125_000 14_574 ms 8_577/s F81DD650BE1CF8C5

MySQL

Phase Operations Time Throughput Checksum
insert profiles 500_000 14_739 ms 33_925/s B11DAA52EA85C1C5
read by user id 500_000 9_602 ms 52_075/s C99FB8E32773191A
lookup by email 500_000 10_814 ms 46_236/s 706F2D03429A82A7
scan country/status index 125_000 6_732 ms 18_568/s C8682B5E80F9553A
query country/status 125_000 18_220 ms 6_861/s 186611B1858E61AD
scan created-at index 125_000 5_772 ms 21_655/s 66FBD61D49358F91
query created-at range 125_000 17_818 ms 7_015/s 94A19BF05C133077
scan top reputation index 125_000 4_834 ms 25_857/s 9C55F81C6EE25A05
query top reputation 125_000 16_846 ms 7_420/s 52051AF97B9522C5
update profiles 500_000 29_534 ms 16_929/s 6AB28B68BED1A31E
post-update read by user id 500_000 9_649 ms 51_817/s C372C9201718339D
post-update lookup by email 500_000 10_878 ms 45_966/s EBA2EFF100A143BD
post-update scan country/status index 125_000 6_745 ms 18_531/s 4A2044B0DDBAB55C
post-update query country/status 125_000 18_030 ms 6_933/s 186111584003D4F0
post-update scan top reputation index 125_000 4_857 ms 25_736/s 1E83544ACD1CA8B5
post-update query top reputation 125_000 16_256 ms 7_689/s F81DD650BE1CF8C5

Configuration

  • Profiles: 500_000
  • Profile writes: individual operations
  • UserId reads: 500_000
  • Email lookups: 500_000
  • Query count: 125_000
  • Profile updates: 500_000
  • Post-update UserId reads: 500_000
  • Post-update email lookups: 500_000
  • Post-update query count: 125_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: 83.5 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

SQLite

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

MySQL

  • Host: 127.0.0.1
  • 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.