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
geometric mean of (engine ÷ fastest) over every config × phase cell (35 cells); 1.00× = fastest everywhere
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| score (geomean) | 0.69 | 0.39 | 0.29 | 0.30 | 0.38 | 0.41 | 0.28 | 0.01 |
| cell wins | 14 | 10 | 3 | 4 | 2 | 1 | 1 | 0 |
ops/sec × (key size + value size) — how much payload each engine moves per second; makes the value-size sweep comparable
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 818 | 674 | 148 | 107 | 672 | 245 | 373 | 8 |
| 64 B / 512 B | 1,396 | 2,986 | 472 | 507 | 1,628 | 763 | 763 | 19 |
| 16 B / 1 KiB | 1,406 | 3,000 | 724 | 748 | 1,481 | 973 | 925 | 23 |
| 16 B / 4 KiB | 1,909 | 4,469 | 2,434 | 1,371 | 1,869 | 2,141 | 1,211 | 36 |
| 16 B / 16 KiB | 1,748 | 2,432 | 3,033 | 1,982 | 855 | 2,213 | 1,253 | 40 |
| 1 KiB / 256 B | 1,680 | 4,164 | 771 | 820 | 2,010 | 1,193 | 1,076 | 28 |
| 2 KiB / 256 B | 1,698 | 4,804 | 819 | 1,019 | 1,718 | 1,215 | 785 | 32 |
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 305 | 241 | 246 | 96 | 326 | 381 | 15 | 1 |
| 64 B / 512 B | 1,251 | 1,152 | 181 | 362 | 630 | 1,231 | 71 | 3 |
| 16 B / 1 KiB | 1,929 | 472 | 482 | 639 | 1,130 | 1,767 | 127 | 6 |
| 16 B / 4 KiB | 4,981 | 2,129 | 9,986 | 1,345 | 3,208 | 3,409 | 498 | 8 |
| 16 B / 16 KiB | 11,660 | 8,125 | 42,065 | 2,551 | 6,177 | 6,975 | 1,932 | 23 |
| 1 KiB / 256 B | 2,530 | 1,694 | 386 | 619 | 977 | 2,074 | 153 | 1 |
| 2 KiB / 256 B | 5,350 | 2,195 | 437 | 779 | 891 | 2,443 | 277 | 1 |
ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 7,047,671 | 5,811,860 | 1,273,708 | 920,756 | 5,790,957 | 2,110,294 | 3,218,652 | 65,018 |
| 64 B / 512 B | 2,423,564 | 5,184,331 | 818,682 | 880,544 | 2,826,686 | 1,324,180 | 1,324,656 | 32,604 |
| 16 B / 1 KiB | 1,351,710 | 2,884,611 | 696,295 | 719,609 | 1,423,836 | 935,888 | 888,988 | 21,945 |
| 16 B / 4 KiB | 464,275 | 1,086,805 | 592,018 | 333,418 | 454,554 | 520,706 | 294,523 | 8,661 |
| 16 B / 16 KiB | 106,604 | 148,277 | 184,945 | 120,836 | 52,108 | 134,939 | 76,408 | 2,426 |
| 1 KiB / 256 B | 1,312,440 | 3,253,262 | 602,660 | 640,919 | 1,570,126 | 931,832 | 840,726 | 21,502 |
| 2 KiB / 256 B | 737,190 | 2,084,915 | 355,310 | 442,256 | 745,815 | 527,394 | 340,845 | 13,851 |
ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 2,632,312 | 2,074,408 | 2,120,063 | 829,992 | 2,808,030 | 3,281,604 | 129,022 | 7,162 |
| 64 B / 512 B | 2,171,039 | 1,999,484 | 313,666 | 628,718 | 1,094,578 | 2,136,631 | 122,420 | 5,462 |
| 16 B / 1 KiB | 1,854,966 | 453,689 | 463,886 | 614,572 | 1,086,839 | 1,699,276 | 122,005 | 5,379 |
| 16 B / 4 KiB | 1,211,230 | 517,764 | 2,428,482 | 327,162 | 780,133 | 829,124 | 121,216 | 1,914 |
| 16 B / 16 KiB | 710,962 | 495,430 | 2,564,934 | 155,518 | 376,643 | 425,330 | 117,810 | 1,432 |
| 1 KiB / 256 B | 1,976,820 | 1,323,479 | 301,850 | 483,658 | 763,426 | 1,619,928 | 119,680 | 548 |
| 2 KiB / 256 B | 2,321,911 | 952,700 | 189,502 | 338,290 | 386,791 | 1,060,323 | 120,135 | 454 |
ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 8,754,658 | 696,612 | 1,173,354 | 921,024 | 6,654,036 | 4,503,915 | 4,554,512 | 76,541 |
| 64 B / 512 B | 10,511,634 | 783,438 | 1,455,578 | 1,061,502 | 7,547,292 | 3,007,642 | 4,358,468 | 78,062 |
| 16 B / 1 KiB | 12,246,608 | 999,912 | 1,865,928 | 1,236,395 | 9,165,399 | 5,953,936 | 5,383,607 | 76,138 |
| 16 B / 4 KiB | 8,970,018 | 1,101,201 | 2,284,764 | 1,569,358 | 7,493,748 | 6,129,258 | 4,239,236 | 94,874 |
| 16 B / 16 KiB | 6,312,296 | 1,038,910 | 2,102,949 | 1,701,942 | 4,109,870 | 5,008,106 | 3,115,756 | 94,361 |
| 1 KiB / 256 B | 1,425,686 | 542,273 | 660,920 | 743,207 | 1,885,272 | 1,051,822 | 1,255,188 | 27,110 |
| 2 KiB / 256 B | 814,817 | 387,018 | 345,962 | 533,082 | 1,115,900 | 560,515 | 595,734 | 17,174 |
ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 9,780,300 | 9,394,343 | 2,343,754 | 5,497,010 | 7,569,138 | 3,633,755 | 6,814,938 | 71,548 |
| 64 B / 512 B | 894,102 | 5,522,193 | 1,592,510 | 1,656,126 | 146,372 | 1,056,665 | 2,127,458 | 27,466 |
| 16 B / 1 KiB | 781,575 | 63,125 | 637,728 | 977,788 | 144,678 | 640,964 | 1,343,942 | 22,910 |
| 16 B / 4 KiB | 306,504 | 70,585 | 146,316 | 346,258 | 97,812 | 195,814 | 342,378 | 4,093 |
| 16 B / 16 KiB | 249,282 | 72,708 | 70,208 | 202,832 | 44,106 | 93,329 | 84,154 | 2,062 |
| 1 KiB / 256 B | 2,318,874 | 2,905,110 | 618,082 | 824,864 | 1,841,516 | 554,082 | 1,052,806 | 8,256 |
| 2 KiB / 256 B | 1,185,692 | 2,363,799 | 301,802 | 333,044 | 1,002,819 | 318,156 | 610,176 | 4,975 |
ops/sec — higher is better; whiskers span min–max across runs; the group leader is value-labeled
| ondaDB (Rust) | TidesDB (C) | fjall (Rust) | BadgerDB (Go) | wavesdb (Go) | RocksDB (C++) | surrealkv (Rust) | Wildcat (Go) | |
|---|---|---|---|---|---|---|---|---|
| 16 B / 100 B | 8,650,609 | 6,471,405 | 2,049,038 | 5,460,876 | 6,855,003 | 3,103,996 | 2,201,010 | 71,858 |
| 64 B / 512 B | 856,762 | 3,253,000 | 1,531,240 | 1,751,667 | 151,632 | 1,016,664 | 1,317,456 | 41,606 |
| 16 B / 1 KiB | 806,554 | 63,620 | 701,350 | 999,246 | 145,668 | 583,124 | 982,132 | 33,324 |
| 16 B / 4 KiB | 308,130 | 75,762 | 215,190 | 402,227 | 95,720 | 266,958 | 315,666 | 4,029 |
| 16 B / 16 KiB | 256,702 | 68,346 | 100,120 | 312,096 | 28,680 | 137,290 | 76,748 | 2,012 |
| 1 KiB / 256 B | 1,682,648 | 1,794,832 | 719,900 | 977,672 | 1,714,162 | 631,615 | 651,429 | 9,258 |
| 2 KiB / 256 B | 1,378,838 | 1,104,577 | 347,276 | 355,156 | 922,994 | 296,380 | 462,452 | 5,360 |