ToplingDB vs RocksDB bench results

dcompact bench → — offloads most CPU and memory cost.

Updated (UTC): 2026-08-18 15:53:25+00:00

Latest: plain

run_id=32148249444 | result table | 2026-08-18 15:53:23+00:00

raw logs: ToplingDB zipkeyonly | ToplingDB zipkeyvalue | RocksDB v8.10 | RocksDB master (323d915d) | DB INFO LOGs + bench yamls (Actions artifact)

ToplingDB bench yaml: zipkeyonly db_bench-fillrandom.yaml | zipkeyonly db_bench-fillseq.yaml | zipkeyvalue db_bench-fillrandom.yaml | zipkeyvalue db_bench-fillseq.yaml

Runner hardware/software

OSUbuntu 24.04.4 LTS
Kernel6.17.0-1022-azure
CPUAMD EPYC 7763 64-Core Processor
Logical CPUs4
Memory15.6GiB
/dev/shm7.8GiB
RocksDB block cache7.8GiB

num=100000000 | key_size=8 | value_size=50

On-disk DB size (3.7GiB) ≤ block cache (7.8GiB) — the dataset fits in cache, so this bench is a CPU and memory comparison.

/dev/shm usage (disk space; after db_bench)

Allocated disk usage (IEC blocks). zipkeyonly does not compress values (speed-optimized). RocksDB uses per-level compression (L0 none, L1-L5 Snappy, L6 Zstd), corresponding to the ToplingDB zipkeyvalue variant's level_writers (lightweight upper levels, heavyweight L6). Space ratio = engine / v8.10. color sign: ToplingDB is Better/Worse.

workloadToplingDB zipkeyonlyToplingDB zipkeyvalueRocksDB v8.10RocksDB master (323d915d)zipkeyonly / v8.10 (space)zipkeyvalue / v8.10 (space)
fillrandom suite3.0GiB664.4MiB3.7GiB3.7GiB0.82x0.17x
fillseq suite4.7GiB1.2GiB3.2GiB3.2GiB1.46x0.38x

Peak RSS (RAM; during db_bench)

RSS is Resident Set Size. RocksDB block cache = half physical memory (7.8GiB). Ratio = engine / v8.10. color sign: ToplingDB is Better/Worse. RocksDB omit cells are =readseq (same scan; no omit). scan-omit-value: restart process, reuse fill* data, scan without access value, benefited by lazy load value (ToplingDB feature).

workloadToplingDB zipkeyonlyToplingDB zipkeyvalueRocksDB v8.10RocksDB master (323d915d)zipkeyonly / v8.10 (RSS)zipkeyvalue / v8.10 (RSS)
fillrandom suite peak2.5GiB2.4GiB4.1GiB4.2GiB0.62x0.59x
fillrandom suite readrandom151.2MiB652.1MiB4.1GiB4.2GiB0.04x0.16x
fillrandom scan-omit-value141.9MiB174.0MiB4.1GiB (=readseq)4.2GiB (=readseq)0.03x0.04x
fillseq suite peak1.9GiB1.9GiB6.4GiB6.5GiB0.29x0.29x
fillseq suite readrandom137.8MiB1.2GiB6.4GiB6.5GiB0.02x0.19x
fillseq scan-omit-value132.5MiB193.4MiB6.4GiB (=readseq)6.5GiB (=readseq)0.02x0.03x

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.

startup 2.0 fillrandom 104 flush 1.9 compact 32 readseq×3 12 readrandom 26 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 MiB 0 50 100 150 200 Time (sec) ToplingDB zipkeyonly — fillrandom suite RAM rss shared anony pagecache anony+pc
startup 2.0 fillseq 44 flush 0.0 compact 42 readseq×3 9.6 readrandom 15 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 MiB 0 50 100 150 200 Time (sec) ToplingDB zipkeyonly — fillseq suite RAM rss shared anony pagecache anony+pc
startup 2.0 fillrandom 107 flush 0.0 compact 80 readseq×3 18 readrandom 73 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 MiB 0 50 100 150 200 250 300 Time (sec) ToplingDB zipkeyvalue — fillrandom suite RAM rss shared anony pagecache anony+pc
startup 2.0 fillseq 44 flush 0.0 compact 134 readseq×3 14 readrandom 89 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 MiB 0 50 100 150 200 250 300 Time (sec) ToplingDB zipkeyvalue — fillseq suite RAM rss shared anony pagecache anony+pc
fillrandom 174 flush 0.3 compact 61 readseq×3 21 readrandom 331 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000 5500 6000 6500 7000 7500 8000 MiB 0 50 100 150 200 250 300 350 400 450 500 550 600 Time (sec) RocksDB v8.10 — fillrandom suite RAM rss shared anony pagecache anony+pc
fillseq 38 flush 0.3 compact 38 readseq×3 35 readrandom 363 0 5000 10000 MiB 0 50 100 150 200 250 300 350 400 450 500 Time (sec) RocksDB v8.10 — fillseq suite RAM rss shared anony pagecache anony+pc
fillrandom 165 flush 0.3 compact 73 readseq×3 28 readrandom 318 0 5000 10000 MiB 0 50 100 150 200 250 300 350 400 450 500 550 600 Time (sec) RocksDB master (323d915d) — fillrandom suite RAM rss shared anony pagecache anony+pc
fillseq 42 flush 0.2 compact 40 readseq×3 47 readrandom 330 0 5000 10000 MiB 0 50 100 150 200 250 300 350 400 450 500 Time (sec) RocksDB master (323d915d) — fillseq suite RAM rss shared anony pagecache anony+pc

Comparison: db_bench fillrandom suite (perf)

Benchmarks: fillrandom, flush, compact, readseq×3, readrandom. RocksDB uses per-level compression (L0 none, L1-L5 Snappy, L6 Zstd), corresponding to the ToplingDB zipkeyvalue variant's level_writers (lightweight upper levels, heavyweight L6). compact row shows operations/time. color sign: ToplingDB is Better/Worse.

benchmarkToplingDB zipkeyonly ops/secToplingDB zipkeyvalue ops/secRocksDB v8.10 ops/secRocksDB master (323d915d) ops/seczipkeyonly / zipkeyvaluezipkeyonly / v8.10zipkeyonly / master (323d915d)zipkeyvalue / v8.10zipkeyvalue / master (323d915d)
fillrandom9589939349325754676064411.03x1.67x1.58x1.62x1.54x
compact1/32.3s1/80.2s1/61.4s1/73.0s2.49x1.90x2.26x0.77x0.91x
readseq24732695165763751039491876739371.49x2.38x3.22x1.59x2.16x
readrandom384995913685593022923140962.81x12.74x12.26x4.53x4.36x

Comparison: db_bench fillseq suite (perf)

Same as fillrandom. RocksDB fillseq benefits from shortcuts: trivial_move on non-overlapping SSTs; refit level skips zstd on L6: faster, larger size. Seqno-zeroing compact still runs.

benchmarkToplingDB zipkeyonly ops/secToplingDB zipkeyvalue ops/secRocksDB v8.10 ops/secRocksDB master (323d915d) ops/seczipkeyonly / zipkeyvaluezipkeyonly / v8.10zipkeyonly / master (323d915d)zipkeyvalue / v8.10zipkeyvalue / master (323d915d)
fillseq22689372249780259843824004931.01x0.87x0.95x0.87x0.94x
compact1/42.0s1/134.3s1/38.3s1/40.1s3.20x0.91x0.96x0.29x0.30x
readseq31402261211736371048715675074661.48x2.99x4.18x2.02x2.82x
readrandom663866511207292753023031655.92x24.11x21.90x4.07x3.70x

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 lazy load, so the baseline is readseq×3 already present in the main fill* suite (no extra pass). RocksDB nextwithkey cells are =readseq. master omitted here (v8.10 is the stronger RocksDB baseline). color sign: ToplingDB is Better/Worse.

scan-omit-value on data from fillrandom

benchmarkToplingDB zipkeyonly ops/secToplingDB zipkeyvalue ops/secRocksDB v8.10 ops/seczipkeyonly / v8.10zipkeyvalue / v8.10
readseq3875725639053941103949183.73x3.76x
nextwithkey399454344014582510394918 (=readseq)3.84x3.86x

scan-omit-value on data from fillseq

benchmarkToplingDB zipkeyonly ops/secToplingDB zipkeyvalue ops/secRocksDB v8.10 ops/seczipkeyonly / v8.10zipkeyvalue / v8.10
readseq5140309851449327104871564.90x4.91x
nextwithkey522032645256004110487156 (=readseq)4.98x5.01x

memtablerep_bench: CSPPMemTable advantage

Focus: CSPP (ToplingDB) vs skiplist. Baseline = RocksDB v8.10 skiplist. color sign: ToplingDB is Better/Worse.

benchmarkmetricCSPP (ToplingDB)skiplist (ToplingDB)skiplist (RocksDB v8.10)CSPP / v8.10
fillrandomElapsed time37184657 us305683098 us330611206 us0.11x
fillrandomWrite throughput43.5999 MiB/s5.30368 MiB/s4.90379 MiB/s8.89x
fillrandomwrite us/op0.3718473.056833.306110.11x
readrandomElapsed time52622742 us394789862 us383584378 us0.14x
readrandomRead throughput30.8089 MiB/s4.10661 MiB/s4.22657 MiB/s7.29x
readrandomread us/op0.5262273.94793.835840.14x

History