Bench run: plain / 31787125871
← plain home |
dcompact →
generated (UTC): 2026-08-14T10:14:47.940100+00:00
ToplingDB zipkeyonly db_bench | ToplingDB zipkeyvalue db_bench | RocksDB v8.10 db_bench | RocksDB master (5fe22535) db_bench | DB INFO LOGs + bench yamls (Actions artifact) — ToplingDB zipkeyonly LOG-fillrandom, ToplingDB zipkeyonly LOG-fillrandom-omit, ToplingDB zipkeyonly LOG-fillseq, ToplingDB zipkeyonly LOG-fillseq-omit, ToplingDB zipkeyonly db_bench-fillrandom.yaml, ToplingDB zipkeyonly db_bench-fillseq.yaml, ToplingDB zipkeyvalue LOG-fillrandom, ToplingDB zipkeyvalue LOG-fillrandom-omit, ToplingDB zipkeyvalue LOG-fillseq, ToplingDB zipkeyvalue LOG-fillseq-omit, ToplingDB zipkeyvalue db_bench-fillrandom.yaml, ToplingDB zipkeyvalue db_bench-fillseq.yaml, RocksDB v8.10 LOG-fillrandom, RocksDB v8.10 LOG-fillseq, RocksDB master (5fe22535) LOG-fillrandom, RocksDB master (5fe22535) LOG-fillseq
ToplingDB bench yaml (runtime graft): ToplingDB zipkeyonly db_bench-fillrandom.yaml | ToplingDB zipkeyonly db_bench-fillseq.yaml | ToplingDB zipkeyvalue db_bench-fillrandom.yaml | ToplingDB zipkeyvalue db_bench-fillseq.yaml
Runner hardware/software
| OS | Ubuntu 24.04.4 LTS |
| Kernel | 6.17.0-1022-azure |
| CPU | AMD EPYC 7763 64-Core Processor |
| Logical CPUs | 4 |
| Memory | 15.6GiB |
| /dev/shm | 7.8GiB |
| RocksDB block cache | 7.8GiB |
num=50000000 | key_size=8 | value_size=50
On-disk DB size (1.9GiB) ≤ block cache (7.8GiB) — cache can hold the entire dataset. So this benchmark mainly shows CPU and memory cost. With ToplingDB dcompact, most of that CPU and memory cost can be offloaded.
/dev/shm usage (disk space; after db_bench + omit/scan)
Allocated disk usage (IEC blocks). RocksDB uses default Snappy compression. Space ratio = engine / v8.10; <1 = less space than RocksDB, >1 = larger.
| workload | ToplingDB zipkeyonly | ToplingDB zipkeyvalue | RocksDB v8.10 | RocksDB master (5fe22535) | zipkeyonly / v8.10 (space) | zipkeyvalue / v8.10 (space) |
| fillrandom | 1.6GiB | 491.8MiB | 1.9GiB | 1.9GiB | 0.88x | 0.26x |
| fillseq | 2.4GiB | 664.6MiB | 1.6GiB | 1.6GiB | 1.50x | 0.40x |
Peak RSS (RAM; during db_bench)
RSS is Resident Set Size. RocksDB block cache = half physical memory (7.8GiB). Ratio = engine / v8.10; <1 = less RSS, >1 = more RSS. RocksDB omit columns are derived-from-main (no separate omit pass).
| workload | ToplingDB zipkeyonly | ToplingDB zipkeyvalue | RocksDB v8.10 (derived-from-main) | RocksDB master (5fe22535) | zipkeyonly / v8.10 (RSS) | zipkeyvalue / v8.10 (RSS) |
| fillrandom | 1.6GiB | 2.0GiB | 2.1GiB | 2.1GiB | 0.79x | 0.96x |
| fillrandom-omit | 130.5MiB | 148.3MiB | 2.1GiB | n/a | 0.06x | 0.07x |
| fillseq | 1.9GiB | 1.9GiB | 3.3GiB | 3.3GiB | 0.58x | 0.58x |
| fillseq-omit | 122.6MiB | 154.2MiB | 3.3GiB | n/a | 0.04x | 0.05x |
RAM usage over time
Sampled once per second from /proc/statm plus open-file page cache. The bar below each plot shows stage name + duration (consecutive repeats merge, e.g. readseq×3); colored bands mark the same intervals. Stage names may overflow into a neighbor cell; a label under the bar is used only when names would overlap.
Comparison: db_bench fillrandom suite (perf)
Benchmarks: fillrandom, flush, compact, readseq×3, readrandom. RocksDB uses default Snappy compression. compact row shows operations/seconds. RocksDB time / zipkey*: >1 = that zipkey* engine faster. Values show ops/sec.
| benchmark | ToplingDB zipkeyonly ops/sec | ToplingDB zipkeyvalue ops/sec | RocksDB v8.10 ops/sec | RocksDB master (5fe22535) ops/sec | zipkeyvalue time / zipkeyonly | v8.10 time / zipkeyonly | master (5fe22535) time / zipkeyonly | v8.10 time / zipkeyvalue | master (5fe22535) time / zipkeyvalue |
| compact | 1/28.1s | 1/39.1s | 1/30.4s | 1/22.7s | 1.39x | 1.08x | 0.81x | 0.78x | 0.58x |
| fillrandom | 1064889 | 1111437 | 663259 | 598320 | 0.96x | 1.61x | 1.78x | 1.68x | 1.86x |
| readrandom | 3950726 | 1604894 | 310146 | 319927 | 2.46x | 12.74x | 12.35x | 5.17x | 5.02x |
| readseq | 22052700 | 16532215 | 10610143 | 8104715 | 1.33x | 1.31x | 1.72x | 0.99x | 1.29x |
Comparison: db_bench fillseq suite (perf)
Same as fillrandom. Watch compact / readseq / readrandom cost for minDictZip=10 vs space savings above.
| benchmark | ToplingDB zipkeyonly ops/sec | ToplingDB zipkeyvalue ops/sec | RocksDB v8.10 ops/sec | RocksDB master (5fe22535) ops/sec | zipkeyvalue time / zipkeyonly | v8.10 time / zipkeyonly | master (5fe22535) time / zipkeyonly | v8.10 time / zipkeyvalue | master (5fe22535) time / zipkeyvalue |
| compact | 1/21.0s | 1/65.4s | 1/19.5s | 1/20.6s | 3.11x | 0.93x | 0.98x | 0.30x | 0.31x |
| fillseq | 2264363 | 2255365 | 3782787 | 3680910 | 1.00x | 0.60x | 0.62x | 0.60x | 0.61x |
| readrandom | 6994338 | 1237071 | 300609 | 309920 | 5.65x | 23.27x | 22.57x | 4.12x | 3.99x |
| readseq | 26502408 | 20059874 | 10706000 | 8053952 | 1.32x | 2.47x | 3.29x | 1.87x | 2.49x |
Lazy load demo (scan; RocksDB v8.10 baseline)
zipkey* needs an extra omit pass: scan_omit_key/value enables lazy value load (no real value load). RocksDB has no omit API, so the baseline is readseq×3 already present in the main fill* suite (no extra pass). master omitted here (v8.10 is the stronger RocksDB baseline). Time ratio = v8.10 / zipkey*: >1 = zipkey* faster, <1 = zipkey* slower. nextwithkey is ToplingDB-only.
fillrandom-omit / scan
| benchmark | ToplingDB zipkeyonly ops/sec | ToplingDB zipkeyvalue ops/sec | RocksDB v8.10 ops/sec | v8.10 time / zipkeyonly | v8.10 time / zipkeyvalue |
| nextwithkey | 39007736 | 39471025 | — | — | — |
| readseq | 38405761 | 38556833 | 10610143 | 2.29x | 2.30x |
fillseq-omit / scan
| benchmark | ToplingDB zipkeyonly ops/sec | ToplingDB zipkeyvalue ops/sec | RocksDB v8.10 ops/sec | v8.10 time / zipkeyonly | v8.10 time / zipkeyvalue |
| nextwithkey | 51496965 | 52527188 | — | — | — |
| readseq | 50902086 | 51006563 | 10706000 | 4.76x | 4.77x |
memtablerep_bench: CSPPMemTable advantage
Focus: CSPP (ToplingDB) vs skiplist. Baseline = RocksDB v8.10 skiplist. Column "CSPP / v8.10": for throughput >1 = CSPP faster; for us/op and elapsed <1 = CSPP cheaper.
| benchmark | metric | CSPP (ToplingDB) | skiplist (ToplingDB) | skiplist (RocksDB v8.10) | CSPP / v8.10 |
| fillrandom | Elapsed time | 36494401 us | 329468833 us | 316009870 us | 0.12x |
| fillrandom | Write throughput | 44.4245 MiB/s | 4.92079 MiB/s | 5.13037 MiB/s | 8.66x |
| fillrandom | write us/op | 0.364944 | 3.29469 | 3.1601 | 0.12x |
| readrandom | Elapsed time | 47113204 us | 381297329 us | 354368119 us | 0.13x |
| readrandom | Read throughput | 34.4117 MiB/s | 4.25192 MiB/s | 4.57503 MiB/s | 7.52x |
| readrandom | read us/op | 0.471132 | 3.81297 | 3.54368 | 0.13x |
Per-engine details
ToplingDB zipkeyonly
db_bench (fillrandom+compact+readseq/readrandom)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillrandom | 0.939063 | 1064889 | 46.953 | 50000000 | 58.9 MB/s |
| compact | 28060071.000000 | 0 | 28.060 | 1 | |
| readseq | 0.045566 | 21945696 | 2.278 | 50000000 | 1213.9 MB/s |
| readseq | 0.045760 | 21852583 | 2.288 | 50000000 | 1208.7 MB/s |
| readseq | 0.045345 | 22052700 | 2.267 | 50000000 | 1219.8 MB/s |
| readrandom | 0.253117 | 3950726 | 12.656 | 50000000 | 138.1 MB/s (31602297 of 50000000 found) |
db_bench (fillseq suite)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillseq | 0.441624 | 2264363 | 22.081 | 50000000 | 125.2 MB/s |
| compact | 21012517.000000 | 0 | 21.013 | 1 | |
| readseq | 0.037539 | 26638238 | 1.877 | 50000000 | 1473.4 MB/s |
| readseq | 0.037935 | 26360157 | 1.897 | 50000000 | 1458.1 MB/s |
| readseq | 0.037731 | 26502408 | 1.887 | 50000000 | 1465.9 MB/s |
| readrandom | 0.142972 | 6994338 | 7.149 | 50000000 | 386.9 MB/s (50000000 of 50000000 found) |
db_bench omit lazy-load (fillrandom DB)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| nextwithkey | 0.025582 | 39088304 | 1.279 | 50000000 | 298.2 MB/s |
| nextwithkey | 0.025615 | 39037095 | 1.281 | 50000000 | 297.8 MB/s |
| nextwithkey | 0.025635 | 39007736 | 1.282 | 50000000 | 297.6 MB/s |
| readseq | 0.026010 | 38444504 | 1.301 | 50000000 | 293.3 MB/s |
| readseq | 0.026118 | 38285689 | 1.306 | 50000000 | 292.1 MB/s |
| readseq | 0.026036 | 38405761 | 1.302 | 50000000 | 293.0 MB/s |
db_bench omit lazy-load (fillseq DB)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| nextwithkey | 0.019648 | 50894522 | 0.982 | 50000000 | 388.3 MB/s |
| nextwithkey | 0.019424 | 51481800 | 0.971 | 50000000 | 392.8 MB/s |
| nextwithkey | 0.019417 | 51496965 | 0.971 | 50000000 | 392.9 MB/s |
| readseq | 0.019642 | 50906958 | 0.982 | 50000000 | 388.4 MB/s |
| readseq | 0.019650 | 50887632 | 0.983 | 50000000 | 388.2 MB/s |
| readseq | 0.019644 | 50902086 | 0.982 | 50000000 | 388.4 MB/s |
memtablerep_bench (skiplist)
| benchmark | metric | value |
| fillrandom | Number of threads | 1 |
| fillrandom | Elapsed time | 329468833 us |
| fillrandom | Total bytes written | 1621.25 MiB |
| fillrandom | Write throughput | 4.92079 MiB/s |
| fillrandom | write us/op | 3.29469 |
| readrandom | Number of threads | 1 |
| readrandom | Elapsed time | 381297329 us |
| readrandom | Total bytes read | 1621.25 MiB |
| readrandom | Read throughput | 4.25192 MiB/s |
| readrandom | read us/op | 3.81297 |
memtablerep_bench (cspp, ToplingDB only)
| benchmark | metric | value |
| fillrandom | Number of threads | 1 |
| fillrandom | Elapsed time | 36494401 us |
| fillrandom | Total bytes written | 1621.25 MiB |
| fillrandom | Write throughput | 44.4245 MiB/s |
| fillrandom | write us/op | 0.364944 |
| readrandom | Number of threads | 1 |
| readrandom | Elapsed time | 47113204 us |
| readrandom | Total bytes read | 1621.25 MiB |
| readrandom | Read throughput | 34.4117 MiB/s |
| readrandom | read us/op | 0.471132 |
ToplingDB zipkeyvalue
db_bench (fillrandom+compact+readseq/readrandom)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillrandom | 0.899729 | 1111437 | 44.987 | 50000000 | 61.5 MB/s |
| compact | 39120267.000000 | 0 | 39.120 | 1 | |
| readseq | 0.061131 | 16358146 | 3.057 | 50000000 | 904.8 MB/s |
| readseq | 0.061098 | 16366815 | 3.055 | 50000000 | 905.3 MB/s |
| readseq | 0.060487 | 16532215 | 3.024 | 50000000 | 914.4 MB/s |
| readrandom | 0.623093 | 1604894 | 31.155 | 50000000 | 56.1 MB/s (31606044 of 50000000 found) |
db_bench (fillseq suite)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillseq | 0.443386 | 2255365 | 22.169 | 50000000 | 124.8 MB/s |
| compact | 65405711.000000 | 0 | 65.406 | 1 | |
| readseq | 0.049269 | 20296466 | 2.463 | 50000000 | 1122.7 MB/s |
| readseq | 0.049177 | 20334213 | 2.459 | 50000000 | 1124.7 MB/s |
| readseq | 0.049850 | 20059874 | 2.493 | 50000000 | 1109.6 MB/s |
| readrandom | 0.808360 | 1237071 | 40.418 | 50000000 | 68.4 MB/s (50000000 of 50000000 found) |
db_bench omit lazy-load (fillrandom DB)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| nextwithkey | 0.025717 | 38882909 | 1.286 | 50000000 | 296.7 MB/s |
| nextwithkey | 0.025527 | 39172304 | 1.276 | 50000000 | 298.9 MB/s |
| nextwithkey | 0.025333 | 39471025 | 1.267 | 50000000 | 301.1 MB/s |
| readseq | 0.025996 | 38464230 | 1.300 | 50000000 | 293.5 MB/s |
| readseq | 0.026002 | 38456272 | 1.300 | 50000000 | 293.4 MB/s |
| readseq | 0.025934 | 38556833 | 1.297 | 50000000 | 294.2 MB/s |
db_bench omit lazy-load (fillseq DB)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| nextwithkey | 0.019145 | 52230176 | 0.957 | 50000000 | 398.5 MB/s |
| nextwithkey | 0.019228 | 52001701 | 0.962 | 50000000 | 396.7 MB/s |
| nextwithkey | 0.019036 | 52527188 | 0.952 | 50000000 | 400.8 MB/s |
| readseq | 0.019624 | 50953960 | 0.981 | 50000000 | 388.7 MB/s |
| readseq | 0.019934 | 50160413 | 0.997 | 50000000 | 382.7 MB/s |
| readseq | 0.019604 | 51006563 | 0.980 | 50000000 | 389.1 MB/s |
RocksDB v8.10
db_bench (fillrandom+compact+readseq/readrandom)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillrandom | 1.508 | 663259 | 75.385 | 50000000 | 36.7 MB/s |
| compact | 30391067.000 | 0 | 30.391 | 1 | |
| readseq | 0.135 | 7423429 | 4.258 | 31606112 | 410.6 MB/s |
| readseq | 0.095 | 10518285 | 3.005 | 31606112 | 581.8 MB/s |
| readseq | 0.094 | 10610143 | 2.979 | 31606112 | 586.9 MB/s |
| readrandom | 3.224 | 310146 | 161.214 | 50000000 | 10.8 MB/s (31604217 of 50000000 found) |
db_bench (fillseq suite)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillseq | 0.264 | 3782787 | 13.218 | 50000000 | 209.2 MB/s |
| compact | 19457381.000 | 0 | 19.457 | 1 | |
| readseq | 0.154 | 6496493 | 7.696 | 50000000 | 359.3 MB/s |
| readseq | 0.094 | 10630731 | 4.703 | 50000000 | 588.0 MB/s |
| readseq | 0.093 | 10706000 | 4.670 | 50000000 | 592.2 MB/s |
| readrandom | 3.327 | 300609 | 166.329 | 50000000 | 16.6 MB/s (50000000 of 50000000 found) |
memtablerep_bench (skiplist)
| benchmark | metric | value |
| fillrandom | Number of threads | 1 |
| fillrandom | Elapsed time | 316009870 us |
| fillrandom | Total bytes written | 1621.25 MiB |
| fillrandom | Write throughput | 5.13037 MiB/s |
| fillrandom | write us/op | 3.1601 |
| readrandom | Number of threads | 1 |
| readrandom | Elapsed time | 354368119 us |
| readrandom | Total bytes read | 1621.25 MiB |
| readrandom | Read throughput | 4.57503 MiB/s |
| readrandom | read us/op | 3.54368 |
RocksDB master (5fe22535)
db_bench (fillrandom+compact+readseq/readrandom)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillrandom | 1.671 | 598320 | 83.567 | 50000000 | 33.1 MB/s |
| compact | 22675605.000 | 0 | 22.676 | 1 | |
| readseq | 0.175 | 5704257 | 5.541 | 31606403 | 315.5 MB/s |
| readseq | 0.124 | 8060538 | 3.921 | 31606403 | 445.9 MB/s |
| readseq | 0.123 | 8104715 | 3.900 | 31606403 | 448.3 MB/s |
| readrandom | 3.126 | 319927 | 156.286 | 50000000 | 11.2 MB/s (31602618 of 50000000 found) |
db_bench (fillseq suite)
| benchmark | micros/op | ops/sec | seconds | operations | extra |
| fillseq | 0.272 | 3680910 | 13.584 | 50000000 | 203.6 MB/s |
| compact | 20560036.000 | 0 | 20.560 | 1 | |
| readseq | 0.195 | 5120717 | 9.764 | 50000000 | 283.2 MB/s |
| readseq | 0.127 | 7894180 | 6.334 | 50000000 | 436.7 MB/s |
| readseq | 0.124 | 8053952 | 6.208 | 50000000 | 445.5 MB/s |
| readrandom | 3.227 | 309920 | 161.332 | 50000000 | 17.1 MB/s (50000000 of 50000000 found) |
memtablerep_bench (skiplist)
| benchmark | metric | value |
| fillrandom | Number of threads | 1 |
| fillrandom | Elapsed time | 325850414 us |
| fillrandom | Total bytes written | 1621.25 MiB |
| fillrandom | Write throughput | 4.97543 MiB/s |
| fillrandom | write us/op | 3.2585 |
| readrandom | Number of threads | 1 |
| readrandom | Elapsed time | 369537661 us |
| readrandom | Total bytes read | 1621.25 MiB |
| readrandom | Read throughput | 4.38723 MiB/s |
| readrandom | read us/op | 3.69538 |