Storage-engine benchmark matrix

8 threads, random keys, compression=none, mean of 2 runs — macOS/APFS, Apple M2 Ultra (24 cores)

ondaDB benchmark suite — dataset: Apple M2 Ultra · ← Linux / xfs dataset · raw CSV

Summary across all configurations

geometric mean of (engine ÷ fastest) over every config × phase cell (35 cells); 1.00× = fastest everywhere

0.00×0.20×0.40×0.60×0.80×ondaDB (Rust)0.69×RocksDB (C++)0.41×TidesDB (C)0.39×wavesdb (Go)0.38×BadgerDB (Go)0.30×fjall (Rust)0.29×surrealkv (Rust)0.28×Wildcat (Go)0.01×
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
score (geomean)0.690.390.290.300.380.410.280.01
cell wins1410342110

Logical throughput (MB/s, key+value bytes)

ops/sec × (key size + value size) — how much payload each engine moves per second; makes the value-size sweep comparable

Put (batched, multi-threaded)

ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B8186741481076722453738
64 B / 512 B1,3962,9864725071,62876376319
16 B / 1 KiB1,4063,0007247481,48197392523
16 B / 4 KiB1,9094,4692,4341,3711,8692,1411,21136
16 B / 16 KiB1,7482,4323,0331,9828552,2131,25340
1 KiB / 256 B1,6804,1647718202,0101,1931,07628
2 KiB / 256 B1,6984,8048191,0191,7181,21578532

Get (cold, multi-threaded)

ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B30524124696326381151
64 B / 512 B1,2511,1521813626301,231713
16 B / 1 KiB1,9294724826391,1301,7671276
16 B / 4 KiB4,9812,1299,9861,3453,2083,4094988
16 B / 16 KiB11,6608,12542,0652,5516,1776,9751,93223
1 KiB / 256 B2,5301,6943866199772,0741531
2 KiB / 256 B5,3502,1954377798912,4432771

Put (batched, multi-threaded)

ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled

02M4M6M8M7.05M16 B / 100 B1M ops5.18M64 B / 512 B400k ops2.88M16 B / 1 KiB250k ops1.09M16 B / 4 KiB30k ops185k16 B / 16 KiB8k ops3.25M1 KiB / 256 B150k ops2.08M2 KiB / 256 B100k ops
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B7,047,6715,811,8601,273,708920,7565,790,9572,110,2943,218,65265,018
64 B / 512 B2,423,5645,184,331818,682880,5442,826,6861,324,1801,324,65632,604
16 B / 1 KiB1,351,7102,884,611696,295719,6091,423,836935,888888,98821,945
16 B / 4 KiB464,2751,086,805592,018333,418454,554520,706294,5238,661
16 B / 16 KiB106,604148,277184,945120,83652,108134,93976,4082,426
1 KiB / 256 B1,312,4403,253,262602,660640,9191,570,126931,832840,72621,502
2 KiB / 256 B737,1902,084,915355,310442,256745,815527,394340,84513,851

Get (cold, multi-threaded)

ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled

01M2M3M4M3.28M16 B / 100 B1M ops2.17M64 B / 512 B400k ops1.85M16 B / 1 KiB250k ops2.43M16 B / 4 KiB30k ops2.56M16 B / 16 KiB8k ops1.98M1 KiB / 256 B150k ops2.32M2 KiB / 256 B100k ops
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B2,632,3122,074,4082,120,063829,9922,808,0303,281,604129,0227,162
64 B / 512 B2,171,0391,999,484313,666628,7181,094,5782,136,631122,4205,462
16 B / 1 KiB1,854,966453,689463,886614,5721,086,8391,699,276122,0055,379
16 B / 4 KiB1,211,230517,7642,428,482327,162780,133829,124121,2161,914
16 B / 16 KiB710,962495,4302,564,934155,518376,643425,330117,8101,432
1 KiB / 256 B1,976,8201,323,479301,850483,658763,4261,619,928119,680548
2 KiB / 256 B2,321,911952,700189,502338,290386,7911,060,323120,135454

Delete (batched, multi-threaded)

ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled

05M10M15M8.75M16 B / 100 B1M ops10.51M64 B / 512 B400k ops12.25M16 B / 1 KiB250k ops8.97M16 B / 4 KiB30k ops6.31M16 B / 16 KiB8k ops1.89M1 KiB / 256 B150k ops1.12M2 KiB / 256 B100k ops
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B8,754,658696,6121,173,354921,0246,654,0364,503,9154,554,51276,541
64 B / 512 B10,511,634783,4381,455,5781,061,5027,547,2923,007,6424,358,46878,062
16 B / 1 KiB12,246,608999,9121,865,9281,236,3959,165,3995,953,9365,383,60776,138
16 B / 4 KiB8,970,0181,101,2012,284,7641,569,3587,493,7486,129,2584,239,23694,874
16 B / 16 KiB6,312,2961,038,9102,102,9491,701,9424,109,8705,008,1063,115,75694,361
1 KiB / 256 B1,425,686542,273660,920743,2071,885,2721,051,8221,255,18827,110
2 KiB / 256 B814,817387,018345,962533,0821,115,900560,515595,73417,174

Forward scan (concurrent full iterations)

ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled

05M10M15M9.78M16 B / 100 B1M ops5.52M64 B / 512 B400k ops1.34M16 B / 1 KiB250k ops346k16 B / 4 KiB30k ops249k16 B / 16 KiB8k ops2.91M1 KiB / 256 B150k ops2.36M2 KiB / 256 B100k ops
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B9,780,3009,394,3432,343,7545,497,0107,569,1383,633,7556,814,93871,548
64 B / 512 B894,1025,522,1931,592,5101,656,126146,3721,056,6652,127,45827,466
16 B / 1 KiB781,57563,125637,728977,788144,678640,9641,343,94222,910
16 B / 4 KiB306,50470,585146,316346,25897,812195,814342,3784,093
16 B / 16 KiB249,28272,70870,208202,83244,10693,32984,1542,062
1 KiB / 256 B2,318,8742,905,110618,082824,8641,841,516554,0821,052,8068,256
2 KiB / 256 B1,185,6922,363,799301,802333,0441,002,819318,156610,1764,975

Backward scan (concurrent full iterations)

ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled

05M10M8.65M16 B / 100 B1M ops3.25M64 B / 512 B400k ops999k16 B / 1 KiB250k ops402k16 B / 4 KiB30k ops312k16 B / 16 KiB8k ops1.79M1 KiB / 256 B150k ops1.38M2 KiB / 256 B100k ops
ondaDB (Rust)TidesDB (C)fjall (Rust)BadgerDB (Go)wavesdb (Go)RocksDB (C++)surrealkv (Rust)Wildcat (Go)
16 B / 100 B8,650,6096,471,4052,049,0385,460,8766,855,0033,103,9962,201,01071,858
64 B / 512 B856,7623,253,0001,531,2401,751,667151,6321,016,6641,317,45641,606
16 B / 1 KiB806,55463,620701,350999,246145,668583,124982,13233,324
16 B / 4 KiB308,13075,762215,190402,22795,720266,958315,6664,029
16 B / 16 KiB256,70268,346100,120312,09628,680137,29076,7482,012
1 KiB / 256 B1,682,6481,794,832719,900977,6721,714,162631,615651,4299,258
2 KiB / 256 B1,378,8381,104,577347,276355,156922,994296,380462,4525,360