c95bc4cd44
- Add mcp.md to: bg, fa, ru, tr, zh, ar - Add index.md to Bulgarian (bg) - Add 24 missing German (de) documentation files Translations for all supported languages now complete.
7.5 KiB
7.5 KiB
BaraDB Architektur
Überblick
BaraDB ist eine multimodale Datenbank-Engine in Nim, die Document (KV), Graph, Vector, Columnar und Full-Text Search Speicherung in einer einzigen Engine mit einer einheitlichen Abfragesprache namens BaraQL kombiniert.
Schichten-Architektur
┌─────────────────────────────────────────────────────────┐
│ 1. CLIENT LAYER │
│ Binary Protocol │ HTTP/REST │ WebSocket │ Embedded │
├─────────────────────────────────────────────────────────┤
│ 2. QUERY LAYER (BaraQL) │
│ Lexer → Parser → AST → IR → Optimizer → Codegen │
├─────────────────────────────────────────────────────────┤
│ 3. EXECUTION ENGINE │
│ Document │ Graph │ Vector │ Columnar │ FTS │
├─────────────────────────────────────────────────────────┤
│ 4. STORAGE │
│ LSM-Tree │ B-Tree │ WAL │ Bloom │ Compaction │ Cache │
├─────────────────────────────────────────────────────────┤
│ 5. DISTRIBUTED │
│ Raft Consensus │ Sharding │ Replication │ Gossip │
└─────────────────────────────────────────────────────────┘
Schicht 1: Client-Layer
Mehrere Kommunikationsprotokolle:
- Binärprotokoll (
protocol/wire.nim): Effizientes Big-Endian Binärprotokoll mit 16 Nachrichtentypen - HTTP/REST (
core/httpserver.nim): JSON-basierte REST API mit Multi-Threading - WebSocket (
core/websocket.nim): Vollduplex-Streaming - Embedded (
storage/lsm.nim): Direkter In-Process-Zugriff
Verbindungsmanagement
- Connection Pool (
protocol/pool.nim): Min/Max Verbindungslimits mit Idle-Timeout - Rate Limiting (
protocol/ratelimit.nim): Token-Bucket globale und per-Client Limits - Authentifizierung (
protocol/auth.nim): JWT mit HMAC-SHA256 und rollenbasierter Zugriff - TLS/SSL (
protocol/ssl.nim): TLS 1.3 mit auto-generierten Zertifikaten
Schicht 2: Query-Layer (BaraQL)
Die BaraQL-Pipeline:
- Lexer (
query/lexer.nim): Tokenisiert Eingabe in 80+ Tokentypen - Parser (
query/parser.nim): Rekursiver Descent-Parser produziert AST - AST (
query/ast.nim): 300+ Zeilen mit 25+ Knotenarten - IR (
query/ir.nim): Intermediate Representation für Ausführungspläne - Optimizer (
query/adaptive.nim): Adaptive Cross-Modal Query-Optimierung - Codegen (
query/codegen.nim): Übersetzt IR zu Speicheroperationen - Executor (
query/executor.nim): Führt Pläne mit Parallelisierung aus
Cross-Modal Planning
Der Optimizer (query/adaptive.nim) bestimmt die Ausführungsreihenfolge über Engines:
1. Selektivität für jedes Prädikat schätzen
2. Selektivstes Prädikat zuerst an seine Engine pushen
3. Bloom-Filter für KV-Lookups verwenden
4. Unabhängige Zweige parallelisieren
5. Results streamen um Materialisierung zu vermeiden
Schicht 3: Execution Engine
Document/KV Engine
- LSM-Tree (
storage/lsm.nim): Write-optimierte Speicherung mit MemTable, WAL, SSTables - B-Tree Index (
storage/btree.nim): Geordneter Index für Bereichsscans mit COW
Vector Engine (vector/)
- HNSW Index (
vector/engine.nim): Hierarchical Navigable Small World Graph - IVF-PQ Index (
vector/engine.nim): Inverted File Index mit Product Quantization - SIMD Operations (
vector/simd.nim): AVX2-optimierte Distanzberechnungen - Quantization (
vector/quant.nim): Scalar, Product und Binary Quantization
Graph Engine (graph/)
- Adjacency List (
graph/engine.nim): Kanten-gewichteter gerichteter Graph - Algorithmen (
graph/engine.nim): BFS, DFS, Dijkstra, PageRank - Community Detection (
graph/community.nim): Louvain-Algorithmus - Pattern Matching (
graph/community.nim): Subgraph-Isomorphie - Cypher Parser (
graph/cypher.nim): Cypher-ähnliche Graph-Abfragen
Full-Text Search (fts/)
- Inverted Index (
fts/engine.nim): Term-Document Index - Ranking (
fts/engine.nim): BM25 und TF-IDF Scoring - Fuzzy Search (
fts/engine.nim): Levenshtein-Distanz-Matching - Multi-Language (
fts/multilang.nim): Tokenizer für EN, BG, DE, FR, RU
Columnar Engine (core/columnar.nim)
- Perspalten-Speicherung für analytische Abfragen
- RLE und Dictionary-Kodierung
- SIMD-beschleunigte Aggregatfunktionen
Schicht 4: Storage
- LSM-Tree (
storage/lsm.nim): MemTable, WAL, SSTable, Bloom-Filter, Compaction - Page Cache (
storage/compaction.nim): LRU-Cache mit Trefferraten-Verfolgung - Memory-mapped I/O (
storage/mmap.nim): mmap-basierter Dateizugriff - Recovery (
storage/recovery.nim): WAL-Replay und Crash-Recovery
Write Path
Client → Protocol → Auth → Parser → AST → IR → Codegen
→ StorageOp → MVCC Txn → WAL Write → MemTable → Commit
Read Path
Client → Protocol → Auth → Parser → AST → IR → Codegen
→ StorageOp → MVCC Snapshot → MemTable → SSTable → Result
Schicht 5: Distributed
- Raft Consensus (
core/raft.nim): Leader Election, Log-Replikation - Sharding (
core/sharding.nim): Hash, Range und Consistent Hashing - Replication (
core/replication.nim): Sync, Async, Semi-Sync Modi - Gossip Protocol (
core/gossip.nim): SWIM-ähnliches Membership-Management - Distributed Transactions (
core/disttxn.nim): Two-Phase Commit
Wichtige Designentscheidungen
- Reines Nim: Keine Cython, Python oder Rust Abhängigkeiten
- Unified Storage: Eine Engine-handelt KV, Graph, Vector, FTS und Columnar
- Embedded Mode: Kann als Bibliothek oder Server laufen
- Binärprotokoll: Custom effizientes Wire-Protokoll
- MVCC: Multi-Version Concurrency Control
- Schema-First: Stark typisiertes Schema-System mit Vererbung
- Cross-Modal: Einheitliche Abfragesprache über alle Datenmodelle
- Formally Verified: Kern-Algorithmen in TLA+ spezifiziert und mit TLC model-gecheckt
Modulstatistiken
| Kategorie | Module | Codezeilen | Zweck |
|---|---|---|---|
| Core | 16 | ~4,200 | Server, Protokolle, Transaktionen, Distributed |
| Storage | 7 | ~3,100 | LSM, B-Tree, WAL, Bloom, Compaction, mmap |
| Query | 7 | ~2,800 | Lexer, Parser, AST, IR, Optimizer, Codegen, Executor |
| Vector | 3 | ~1,200 | HNSW, IVF-PQ, Quantization, SIMD |
| Graph | 3 | ~1,000 | Adjacency List, Algorithmen, Community Detection |
| FTS | 2 | ~900 | Inverted Index, BM25, Fuzzy, Multi-Language |
| Protocol | 7 | ~2,400 | Wire, HTTP, WebSocket, Pool, Auth, Rate Limit, SSL |
| Schema | 1 | ~600 | Typen, Links, Vererbung, Migrationen |
| Client | 2 | ~800 | Nim Binary Client, File Helpers |
| CLI | 1 | ~400 | Interaktive BaraQL Shell |
| Total | 49 | ~14,100 |