BaraDB Performance-Leitfaden
Benchmark-Methodik
Alle Benchmarks wurden ausgeführt mit:
- Compiler: Nim 2.2.0 mit
-d:release --opt:speed
- CPU: AMD Ryzen 9 5900X (12 Kerne / 24 Threads)
- Memory: 64 GB DDR4-3600
- Storage: Samsung 980 Pro NVMe SSD
- OS: Ubuntu 24.04 LTS
Die vollständige Benchmark-Suite ausführen:
Storage Engine Benchmarks
LSM-Tree Key-Value
| Metrik |
Wert |
| Write Throughput |
~580,000 ops/s |
| Read Throughput |
~720,000 ops/s |
| Durchschnittliche Write-Latenz |
1.7 µs |
| Durchschnittliche Read-Latenz |
1.4 µs |
| Testdatensatz |
100,000 Keys (16-Byte Keys, 64-Byte Values) |
Der LSM-Tree verwendet eine 64MB MemTable, WAL fsync bei jedem Write und size-tiered
Compaction mit 6 Levels.
B-Tree Index
| Metrik |
Wert |
| Insert Throughput |
~1,200,000 ops/s |
| Point Lookup Throughput |
~1,500,000 ops/s |
| Range Scan (1000 Keys) |
~0.3 ms |
| Baumhöhe (100K Keys) |
4 |
B-Tree Knoten sind 4KB mit Copy-on-Write für MVCC-Kompatibilität.
Vector Engine Benchmarks
HNSW Index
| Metrik |
Wert |
| Insert (dim=128) |
~45,000 vectors/s |
| Search top-10 (dim=128, n=10K) |
~2 ms |
| Search top-10 (dim=128, n=100K) |
~8 ms |
| Speicher pro Vektor (dim=128) |
~580 bytes |
Parameter: M=16, efConstruction=200, efSearch=64.
SIMD Distanzfunktionen
| Operation |
dim=128 |
dim=768 |
dim=1536 |
| Cosine Distance |
4.2M/s |
850K/s |
420K/s |
| L2 (Euclidean) |
4.5M/s |
920K/s |
450K/s |
| Dot Product |
4.8M/s |
980K/s |
480K/s |
SIMD verwendet AVX2 256-Bit Vektoren mit Loop Unrolling.
Quantization
| Methode |
Genauigkeitsverlust |
Speicherreduzierung |
| Scalar 8-bit |
<1% |
4× |
| Scalar 4-bit |
~3% |
8× |
| Product Quantization (PQ16) |
~5% |
16× |
| Binary |
~15% |
32× |
Full-Text Search Benchmarks
| Metrik |
Wert |
| Index Throughput |
~320,000 docs/s |
| BM25 Search |
~28,000 queries/s |
| Fuzzy Search (distance=2) |
~850 queries/s |
| Wildcard Regex Search |
~4,200 queries/s |
Testkorpus: 5 einzigartige Dokumente × 2,000 Wiederholungen (~50 Wörter/Dok).
Graph Engine Benchmarks
| Operation |
Throughput |
Latenz |
| Knoten hinzufügen |
~2.5M ops/s |
0.4 µs |
| Kante hinzufügen |
~1.8M ops/s |
0.55 µs |
| BFS (1K Knoten, 5K Kanten) |
~12K Traversierungen/s |
83 µs |
| DFS (1K Knoten, 5K Kanten) |
~15K Traversierungen/s |
67 µs |
| Dijkstra kürzester Pfad |
— |
~120 µs |
| PageRank (10 Iterationen) |
~450 Graphen/s |
2.2 ms |
| Louvain Community Detection |
— |
~45 ms |
Protokoll-Benchmarks
| Protokoll |
Verbindungen |
Queries/sec |
Latenz p99 |
| Binary (localhost) |
1 |
45,000 |
0.4 ms |
| Binary (localhost) |
100 |
380,000 |
1.2 ms |
| HTTP/REST |
1 |
12,000 |
2.1 ms |
| HTTP/REST |
100 |
95,000 |
5.8 ms |
| WebSocket |
1 |
18,000 |
1.8 ms |
Query Engine Benchmarks
| Abfragetyp |
Zeilen |
Zeit |
| Simple SELECT |
100K |
12 ms |
| SELECT + WHERE |
100K |
18 ms |
| SELECT + ORDER BY |
100K |
35 ms |
| GROUP BY + Aggregates |
100K |
42 ms |
| INNER JOIN (1K × 1K) |
1M Ergebnis |
85 ms |
| CTE (2 Ebenen) |
100K |
28 ms |
| Subquery (EXISTS) |
100K |
22 ms |
Skalierungsverhalten
Vertikale Skalierung
| Kerne |
LSM Write |
LSM Read |
Vector Search |
| 1 |
580K |
720K |
2.0 ms |
| 4 |
1.9M |
2.6M |
1.1 ms |
| 8 |
3.4M |
4.8M |
0.7 ms |
| 16 |
5.8M |
7.2M |
0.5 ms |
Speicherverbrauch
| Komponente |
Basis-Speicher |
Pro-Entity Overhead |
| LSM MemTable |
64 MB (fest) |
~1.2× Rohdaten |
| B-Tree |
8 MB (fest) |
~8 bytes/Key |
| HNSW Index |
— |
~580 bytes/Vektor (dim=128) |
| Graph |
— |
~32 bytes/Knoten, ~24 bytes/Kante |
| FTS Index |
— |
~40% von Rohtext |
| Page Cache |
256 MB (konfigurierbar) |
— |
Tuning-Leitfaden
Für Write-intensive Workloads
Für Read-intensive Workloads
Für Vector Search
Für Graph Analytics