102 lines
5.0 KiB
Markdown
102 lines
5.0 KiB
Markdown
# BaraDB Mimarisi
|
||
|
||
## Genel Bakış
|
||
|
||
BaraDB, Nim ile yazılmış bir **çok modlu veritabanı motorudur** — doküman (KV), grafik, vektör, kolonlu ve tam metin arama depolamasını **BaraQL** sorgu diliyle birleştirir.
|
||
|
||
## Katmanlı Mimari
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ 1. İSTEMCİ KATMANI │
|
||
│ İkili Protokol │ HTTP/REST │ WebSocket │ Gömülü │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ 2. SORGU KATMANI (BaraQL) │
|
||
│ Lexer → Parser → AST → IR → Optimizör → Kod Üretimi │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ 3. ÇALIŞTIRMA MOTORLARI │
|
||
│ Doküman │ Grafik │ Vektör │ Kolonlu │ FTS │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ 4. DEPOLAMA │
|
||
│ LSM-Tree │ B-Tree │ WAL │ Bloom │ Sıkıştırma │ Önbellek│
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ 5. DAĞITIK │
|
||
│ Raft Consensus │ Parçalama │ Çoğaltma │ Gossip │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## Katman 1: İstemci Katmanı
|
||
|
||
- **İkili Protokol**: Verimli big-endian ikili protokol
|
||
- **HTTP/REST**: JSON tabanlı REST API
|
||
- **WebSocket**: Tam çift yönlü akış
|
||
- **Gömülü**: Süreç içi doğrudan erişim
|
||
|
||
## Katman 2: Sorgu Katmanı (BaraQL)
|
||
|
||
1. **Lexer** (`query/lexer.nim`): 80+ token tipi
|
||
2. **Parser** (`query/parser.nim`): Recursive descent parser
|
||
3. **AST** (`query/ast.nim`): 25+ node çeşidi
|
||
4. **IR** (`query/ir.nim`): Ara temsil
|
||
5. **Optimizör** (`query/adaptive.nim`): Çapraz modlu optimizasyon
|
||
6. **Kod Üretimi** (`query/codegen.nim`): Depolama operasyonlarına çeviri
|
||
7. **Çalıştırıcı** (`query/executor.nim`): Paralel yürütme
|
||
|
||
## Katman 3: Çalıştırma Motorları
|
||
|
||
### Doküman/KV Motoru
|
||
- **LSM-Tree** (`storage/lsm.nim`): MemTable, WAL, SSTables
|
||
|
||
### Vektör Motoru (`vector/`)
|
||
- **HNSW İndeksi** (`vector/engine.nim`): Hiyerarşik Navigable Small World
|
||
- **IVF-PQ İndeksi**: Ters dosya indeksi
|
||
- **SIMD İşlemleri** (`vector/simd.nim`): AVX2-optimized
|
||
|
||
### Grafik Motoru (`graph/`)
|
||
- BFS, DFS, Dijkstra, PageRank
|
||
- **Louvain**: Topluluk tespiti
|
||
|
||
### Tam Metin Arama (`fts/`)
|
||
- Ters indeks, BM25, TF-IDF
|
||
- **Çok Dilli**: EN, BG, DE, FR, RU tokenizerları
|
||
|
||
## Katman 4: Depolama
|
||
|
||
- **LSM-Tree**: MemTable, WAL, SSTable, Bloom Filter
|
||
- **Sayfa Önbelleği**: LRU önbellek
|
||
- **Hafıza-eşlenmiş I/O**: mmap tabanlı erişim
|
||
- **Kurtarma**: WAL yeniden oynatma
|
||
|
||
## Katman 5: Dağıtık
|
||
|
||
- **Raft Consensus** (`core/raft.nim`): Lider seçimi, log çoğaltma
|
||
- **Parçalama** (`core/sharding.nim`): Hash, range, consistent hashing
|
||
- **Çoğaltma** (`core/replication.nim`): Sync, async, semi-sync
|
||
- **Gossip Protokolü** (`core/gossip.nim`): SWIM benzeri
|
||
|
||
## Temel Tasarım Kararları
|
||
|
||
1. **Saf Nim**: Cython, Python veya Rust bağımlılığı yok
|
||
2. **Birleşik Depolama**: Tek motor KV, grafik, vektör, FTS ve kolonluyi yönetir
|
||
3. **Gömülü Mod**: Kütüphane veya sunucu olarak çalışabilir
|
||
4. **İkili Protokol**: Özel verimli kablo protokolü
|
||
5. **MVCC**: Çok sürümlü eşzamanlılık kontrolü
|
||
6. **Şema-Önce**: Kalıtım destekli güçlü tipli şema sistemi
|
||
7. **Çapraz Modlu**: Tüm veri modellerinde tek sorgu dili
|
||
8. **Resmi Doğrulama**: Temel dağıtık algoritmalar TLA+'da belirtilmiş ve TLC ile model kontrolü yapılmış
|
||
|
||
## Modül İstatistikleri
|
||
|
||
| Kategori | Modüller | Kod Satırı | Amaç |
|
||
|----------|---------|------------|------|
|
||
| Core | 16 | ~4,200 | Sunucu, protokoller, işlemler, dağıtık |
|
||
| Storage | 7 | ~3,100 | LSM, B-Tree, WAL, bloom, sıkıştırma, mmap |
|
||
| Query | 7 | ~2,800 | Lexer, parser, AST, IR, optimizör, kod üretimi |
|
||
| Vector | 3 | ~1,200 | HNSW, IVF-PQ, nicemleme, SIMD |
|
||
| Graph | 3 | ~1,000 | Bitişik liste, algoritmalar, topluluk tespiti |
|
||
| FTS | 2 | ~900 | Ters indeks, BM25, belirsiz, çok dilli |
|
||
| Protocol | 7 | ~2,400 | Wire, HTTP, WebSocket, havuz, auth, hız sınırı |
|
||
| Schema | 1 | ~600 | Tipler, bağlantılar, kalıtım |
|
||
| Client | 2 | ~800 | Nim ikili istemcisi |
|
||
| CLI | 1 | ~400 | İnteraktif BaraQL kabuğu |
|
||
| **Toplam** | **49** | **~14,100** | | |