docs: add multi-language documentation (ru, fa, zh, tr, ar)
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# İkili Protokol API
|
||||
|
||||
Yüksek performanslı istemci bağlantıları için düşük seviyeli wire protokolü.
|
||||
|
||||
## Mesaj Formatı
|
||||
|
||||
Tüm mesajlar big-endian bayt sırası kullanır:
|
||||
|
||||
```
|
||||
┌────────┬────────┬────────┬────────┬─────────────┐
|
||||
│ Length │ Type │ Seq │ Status │ Payload │
|
||||
│ 4 bytes│ 1 byte │ 2 bytes│ 1 byte │ N bytes │
|
||||
└────────┴────────┴────────┴────────┴─────────────┘
|
||||
```
|
||||
|
||||
## Mesaj Türleri
|
||||
|
||||
### Query (0x01)
|
||||
|
||||
```nim
|
||||
let msg = makeQueryMessage(seq, "SELECT * FROM users")
|
||||
```
|
||||
|
||||
### Insert (0x02)
|
||||
|
||||
```nim
|
||||
let msg = makeInsertMessage(seq, "users", data)
|
||||
```
|
||||
|
||||
### Update (0x03)
|
||||
|
||||
```nim
|
||||
let msg = makeUpdateMessage(seq, "users", updates, where)
|
||||
```
|
||||
|
||||
### Delete (0x04)
|
||||
|
||||
```nim
|
||||
let msg = makeDeleteMessage(seq, "users", where)
|
||||
```
|
||||
|
||||
### Ready (0x05)
|
||||
|
||||
```nim
|
||||
let msg = makeReadyMessage(seq)
|
||||
```
|
||||
|
||||
### Error (0x06)
|
||||
|
||||
```nim
|
||||
let msg = makeErrorMessage(seq, code, message)
|
||||
```
|
||||
|
||||
## Yanıt Kodları
|
||||
|
||||
| Kod | Ad | Açıklama |
|
||||
|-----|-----|----------|
|
||||
| 0x00 | OK | Başarılı |
|
||||
| 0x01 | ERROR | Genel hata |
|
||||
| 0x02 | AUTH_REQUIRED | Kimlik doğrulama gerekli |
|
||||
| 0x03 | INVALID_QUERY | Sözdizimi hatası |
|
||||
| 0x04 | NOT_FOUND | Kaynak bulunamadı |
|
||||
@@ -0,0 +1,62 @@
|
||||
# HTTP/REST API
|
||||
|
||||
Web uygulamaları için JSON tabanlı REST API.
|
||||
|
||||
## Base URL
|
||||
|
||||
```
|
||||
http://localhost:9470/api
|
||||
```
|
||||
|
||||
## Uç Noktalar
|
||||
|
||||
### GET /api/users
|
||||
|
||||
Tüm kullanıcıları listele:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/api/users
|
||||
```
|
||||
|
||||
### GET /api/users/:id
|
||||
|
||||
ID ile kullanıcı getir:
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/api/users/1
|
||||
```
|
||||
|
||||
### POST /api/users
|
||||
|
||||
Kullanıcı oluştur:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/users \
|
||||
-d '{"Name": "Charlie", "age": 35}'
|
||||
```
|
||||
|
||||
### PUT /api/users/:id
|
||||
|
||||
Kullanıcı güncelle:
|
||||
|
||||
```bash
|
||||
curl -X PUT http://localhost:9470/api/users/1 \
|
||||
-d '{"Name": "Alice", "age": 31}'
|
||||
```
|
||||
|
||||
### DELETE /api/users/:id
|
||||
|
||||
Kullanıcı sil:
|
||||
|
||||
```bash
|
||||
curl -X DELETE http://localhost:9470/api/users/1
|
||||
```
|
||||
|
||||
## Sorgu Uç Noktası
|
||||
|
||||
BaraQL sorgularını HTTP ile çalıştır:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/query \
|
||||
-d '{"sql": "SELECT * FROM users WHERE age > 18"}'
|
||||
```
|
||||
@@ -0,0 +1,78 @@
|
||||
# WebSocket API
|
||||
|
||||
Gerçek zamanlı veri akışları ve anlık bildirimler için tam çift yönlü akış.
|
||||
|
||||
## Bağlantı
|
||||
|
||||
```
|
||||
ws://localhost:9471/ws
|
||||
```
|
||||
|
||||
## İstemci Örneği
|
||||
|
||||
```javascript
|
||||
const ws = new WebSocket('ws://localhost:9471/ws');
|
||||
|
||||
ws.onopen = () => {
|
||||
ws.send(JSON.stringify({
|
||||
type: 'query',
|
||||
sql: 'SELECT * FROM users'
|
||||
}));
|
||||
};
|
||||
|
||||
ws.onmessage = (event) => {
|
||||
console.log('Received:', JSON.parse(event.data));
|
||||
};
|
||||
```
|
||||
|
||||
## Mesaj Formatı
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "query",
|
||||
"id": "uuid",
|
||||
"sql": "SELECT * FROM users"
|
||||
}
|
||||
```
|
||||
|
||||
## Mesaj Türleri
|
||||
|
||||
### Sorgu İsteği
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "query",
|
||||
"id": "123",
|
||||
"sql": "SELECT * FROM users"
|
||||
}
|
||||
```
|
||||
|
||||
### Sorgu Yanıtı
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "result",
|
||||
"id": "123",
|
||||
"data": [{"id": 1, "name": "Alice"}]
|
||||
}
|
||||
```
|
||||
|
||||
### Abonelik
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "subscribe",
|
||||
"table": "users"
|
||||
}
|
||||
```
|
||||
|
||||
### Anlık Bildirim
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "push",
|
||||
"table": "users",
|
||||
"action": "insert",
|
||||
"data": {"id": 3, "name": "Charlie"}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,102 @@
|
||||
# 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** | |
|
||||
@@ -0,0 +1,82 @@
|
||||
# Yedekleme ve Kurtarma
|
||||
|
||||
## Çevrimiçi Anlık Görüntüler
|
||||
|
||||
BaraDB sunucuyu durdurmadan çevrimiçi anlık görüntüleri destekler.
|
||||
|
||||
### Anlık Görüntü Oluşturma
|
||||
|
||||
```nim
|
||||
import barabadb/core/backup
|
||||
|
||||
var bm = newBackupManager()
|
||||
bm.createSnapshot("/backup/baradb_2025-01-15")
|
||||
```
|
||||
|
||||
### CLI ile
|
||||
|
||||
```bash
|
||||
./build/baradadb --snapshot --output=/backup/snapshot.db
|
||||
```
|
||||
|
||||
### HTTP API ile
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/backup \
|
||||
-d '{"destination": "/backup/snapshot.db"}'
|
||||
```
|
||||
|
||||
### Otomatik Yedeklemeler
|
||||
|
||||
```bash
|
||||
0 2 * * * /usr/local/bin/baradadb --snapshot --output=/backup/baradb_$(date +\%Y\%m\%d).db
|
||||
find /backup -name "baradb_*.db" -mtime +7 -delete
|
||||
```
|
||||
|
||||
## Zaman Noktası Kurtarma (PITR)
|
||||
|
||||
### snapshot + WAL'dan Kurtarma
|
||||
|
||||
```bash
|
||||
./build/baradadb --recover \
|
||||
--checkpoint=/backup/snapshot.db \
|
||||
--wal-dir=/backup/wal
|
||||
```
|
||||
|
||||
### SQL ile Kurtarma
|
||||
|
||||
```sql
|
||||
RECOVER TO TIMESTAMP '2026-05-07T12:00:00';
|
||||
```
|
||||
|
||||
## Felaket Kurtarma Senaryoları
|
||||
|
||||
### Senaryo 1: Dosya Bozulması
|
||||
|
||||
```bash
|
||||
cp /backup/sstables/000012.sst ./data/sstables/
|
||||
./build/baradadb --rebuild-index
|
||||
```
|
||||
|
||||
### Senaryo 2: Tam Veri Kaybı
|
||||
|
||||
```bash
|
||||
cp /backup/snapshot.db ./data/
|
||||
./build/baradadb --recover --wal-dir=/backup/wal
|
||||
```
|
||||
|
||||
### Senaryo 3: Küme Düğümü Arızası
|
||||
|
||||
```bash
|
||||
BARADB_RAFT_NODE_ID=newnode \
|
||||
BARADB_RAFT_PEERS=node1:9001,node2:9001 \
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
## En İyi Uygulamalar
|
||||
|
||||
1. Kurtarmayı düzenli olarak test edin
|
||||
2. Yedeklemeleri uzakta saklayın (S3, GCS, Azure Blob)
|
||||
3. Yedeklemeleri şifreleyin
|
||||
4. Yedekleme işlerini izleyin
|
||||
5. RTO/RPO'nuzu belgelendirin
|
||||
@@ -0,0 +1,110 @@
|
||||
# BaraQL - Sorgu Dili Referansı
|
||||
|
||||
BaraQL, grafik, vektör ve doküman operasyonları için uzantılarla SQL uyumlu bir sorgu dilidir.
|
||||
|
||||
## Veri Tipleri
|
||||
|
||||
| Tip | Açıklama | Örnek |
|
||||
|-----|----------|-------|
|
||||
| `null` | Boş değer | `null` |
|
||||
| `bool` | Boolean | `true`, `false` |
|
||||
| `int8` | 8-bit işaretli tamsayı | `127` |
|
||||
| `int16` | 16-bit işaretli tamsayı | `32767` |
|
||||
| `int32` | 32-bit işaretli tamsayı | `2147483647` |
|
||||
| `int64` | 64-bit işaretli tamsayı | `9223372036854775807` |
|
||||
| `float32` | 32-bit kayan nokta | `3.14` |
|
||||
| `float64` | 64-bit kayan nokta | `3.14159265359` |
|
||||
| `str` | UTF-8 string | `'hello'` |
|
||||
| `vector` | Float32 vektör | `[0.1, 0.2, 0.3]` |
|
||||
| `datetime` | ISO 8601 zaman damgası | `'2025-01-15T10:30:00Z'` |
|
||||
| `uuid` | UUID v4 | `'550e8400-e29b-41d4-a716-446655440000'` |
|
||||
|
||||
## Temel Sorgular
|
||||
|
||||
### SELECT
|
||||
|
||||
```sql
|
||||
SELECT * FROM users;
|
||||
SELECT name, age FROM users;
|
||||
SELECT name AS full_name FROM users;
|
||||
SELECT * FROM users LIMIT 10 OFFSET 20;
|
||||
```
|
||||
|
||||
### WHERE
|
||||
|
||||
```sql
|
||||
SELECT * FROM users WHERE age > 18;
|
||||
SELECT * FROM users WHERE age BETWEEN 18 AND 65;
|
||||
SELECT * FROM users WHERE department IN ('Engineering', 'Sales');
|
||||
SELECT * FROM users WHERE name LIKE 'A%';
|
||||
```
|
||||
|
||||
### INSERT
|
||||
|
||||
```sql
|
||||
INSERT users { name := 'Alice', age := 30 };
|
||||
INSERT users { { name := 'Alice', age := 30 }, { name := 'Bob', age := 25 } };
|
||||
```
|
||||
|
||||
### UPDATE
|
||||
|
||||
```sql
|
||||
UPDATE users SET age = 31 WHERE name = 'Alice';
|
||||
```
|
||||
|
||||
### DELETE
|
||||
|
||||
```sql
|
||||
DELETE FROM users WHERE name = 'Bob';
|
||||
```
|
||||
|
||||
## JOIN
|
||||
|
||||
```sql
|
||||
SELECT u.name, o.total
|
||||
FROM users u
|
||||
INNER JOIN orders o ON u.id = o.user_id;
|
||||
```
|
||||
|
||||
## CTE (Common Table Expressions)
|
||||
|
||||
```sql
|
||||
WITH active_users AS (
|
||||
SELECT * FROM users WHERE active = true
|
||||
)
|
||||
SELECT * FROM active_users;
|
||||
```
|
||||
|
||||
## Vektör Arama
|
||||
|
||||
```sql
|
||||
INSERT articles { title := 'Nim Programming', embedding := [0.1, 0.2, 0.3, 0.4] };
|
||||
|
||||
SELECT title FROM articles
|
||||
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, 0.4])
|
||||
LIMIT 5;
|
||||
```
|
||||
|
||||
## Grafik Kalıpları
|
||||
|
||||
```sql
|
||||
MATCH (p:Person)-[:KNOWS]->(friend:Person)
|
||||
WHERE p.name = 'Alice'
|
||||
RETURN friend.name;
|
||||
```
|
||||
|
||||
## İşlemler
|
||||
|
||||
```sql
|
||||
BEGIN;
|
||||
INSERT users { name := 'Alice', age := 30 };
|
||||
COMMIT;
|
||||
```
|
||||
|
||||
## Grafik Kalıpları
|
||||
|
||||
```sql
|
||||
MATCH (p:Person)-[:KNOWS]->(friend:Person)
|
||||
WHERE p.name = 'Alice'
|
||||
RETURN friend.name;
|
||||
```
|
||||
@@ -0,0 +1,26 @@
|
||||
# B-Tree İndeksi
|
||||
|
||||
Verimli aralık taramaları ve nokta aramaları için sıralı indeks yapısı.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/storage/btree
|
||||
|
||||
var btree = newBTreeIndex[string, string]()
|
||||
|
||||
btree.insert("key1", "value1")
|
||||
btree.insert("key2", "value2")
|
||||
|
||||
let values = btree.get("key1")
|
||||
let range = btree.scan("key_a", "key_z")
|
||||
btree.delete("key1")
|
||||
```
|
||||
|
||||
## Özellikler
|
||||
|
||||
- Sıralı anahtar-değer depolama
|
||||
- Aralık sorguları (BETWEEN, >, <, >=, <=)
|
||||
- Önek taramaları
|
||||
- Yapılandırılabilir sayfa boyutu
|
||||
- İteratör desteği
|
||||
@@ -0,0 +1,76 @@
|
||||
# Değişiklik Günlüğü
|
||||
|
||||
## [0.1.0] — 2025-01-15
|
||||
|
||||
### Eklenenler
|
||||
|
||||
- **Çekirdek Depolama Motorları**
|
||||
- MemTable, WAL, SSTables ve size-tiered compaction ile LSM-Tree
|
||||
- MVCC copy-on-write ile aralık tarama ve B-Tree sıralı indeks
|
||||
- Bloom filtreleri
|
||||
- Memory-mapped I/O
|
||||
- LRU sayfa önbelleği
|
||||
|
||||
- **Sorgu Motoru (BaraQL)**
|
||||
- 80+ token türüyle SQL uyumlu lexer
|
||||
- 25+ düğüm türüyle AST üreten recursive descent parser
|
||||
- IR ara temsili
|
||||
- Çapraz modlu planlama ile adaptif sorgu optimizatörü
|
||||
- Paralelleştirme ile sorgu yürütücüsü
|
||||
|
||||
- **BaraQL Dil Özellikleri**
|
||||
- SELECT, INSERT, UPDATE, DELETE
|
||||
- WHERE, ORDER BY, LIMIT, OFFSET
|
||||
- GROUP BY, HAVING, toplama fonksiyonları
|
||||
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
|
||||
- CTEs (WITH)
|
||||
- Alt sorgular
|
||||
- CASE ifadeleri
|
||||
- UNION, INTERSECT, EXCEPT
|
||||
|
||||
- **Vektör Motoru**
|
||||
- HNSW indeksi
|
||||
- IVF-PQ indeksi
|
||||
- SIMD optimize edilmiş mesafe fonksiyonları
|
||||
- Nicemleme: skaler 8-bit/4-bit, ürün, ikili
|
||||
|
||||
- **Grafik Motoru**
|
||||
- Bitişik liste depolaması
|
||||
- BFS ve DFS geçişi
|
||||
- Dijkstra en kısa yol
|
||||
- PageRank
|
||||
- Louvain topluluk tespiti
|
||||
- Cypher sorgu ayrıştırıcısı
|
||||
|
||||
- **Tam Metin Arama**
|
||||
- Ters indeks
|
||||
- BM25 sıralaması
|
||||
- TF-IDF
|
||||
- Fuzzy arama
|
||||
- Çok dilli tokenizatörler
|
||||
|
||||
- **Protokoller**
|
||||
- 16 mesaj türüyle Binary wire protocol
|
||||
- HTTP/REST JSON API
|
||||
- WebSocket akışı
|
||||
- Connection pooling
|
||||
- JWT kimlik doğrulama
|
||||
- TLS/SSL
|
||||
|
||||
- **Dağıtık Sistemler**
|
||||
- Raft konsensüs
|
||||
- Hash, range, consistent-hash parçalama
|
||||
- Sync/async/semi-sync çoğaltma
|
||||
- Gossip protokolü
|
||||
- İki aşamalı commit
|
||||
|
||||
### Performans
|
||||
|
||||
- LSM-Tree: 580K yazma/s, 720K okuma/s
|
||||
- B-Tree: 1.2M ekleme/s, 1.5M arama/s
|
||||
- Vector SIMD: 850K kosinüs mesafesi/s (dim=768)
|
||||
|
||||
### Testler
|
||||
|
||||
- 56 test paketinde 262 test
|
||||
- %100 geçme oranı
|
||||
@@ -0,0 +1,66 @@
|
||||
# İstemci SDK'ları
|
||||
|
||||
BaraDB JavaScript/TypeScript, Python, Nim ve Rust için resmi istemci kütüphaneleri sağlar.
|
||||
|
||||
## JavaScript / TypeScript
|
||||
|
||||
### Kurulum
|
||||
|
||||
```bash
|
||||
npm install baradb
|
||||
```
|
||||
|
||||
### Temel Kullanım
|
||||
|
||||
```typescript
|
||||
import { Client } from 'baradb';
|
||||
|
||||
const client = new Client('localhost', 9472);
|
||||
await client.connect();
|
||||
|
||||
const result = await client.query('SELECT name, age FROM users WHERE age > 18');
|
||||
```
|
||||
|
||||
## Python
|
||||
|
||||
### Kurulum
|
||||
|
||||
```bash
|
||||
pip install baradb
|
||||
```
|
||||
|
||||
### Temel Kullanım
|
||||
|
||||
```python
|
||||
from baradb import Client
|
||||
|
||||
client = Client("localhost", 9472)
|
||||
client.connect()
|
||||
result = client.query("SELECT name, age FROM users WHERE age > 18")
|
||||
```
|
||||
|
||||
## Nim (Gömülü Mod)
|
||||
|
||||
```nim
|
||||
import barabadb/storage/lsm
|
||||
|
||||
var db = newLSMTree("./data")
|
||||
db.put("key", cast[seq[byte]]("value"))
|
||||
let (found, val) = db.get("key")
|
||||
db.close()
|
||||
```
|
||||
|
||||
## Rust
|
||||
|
||||
```rust
|
||||
use baradb::Client;
|
||||
|
||||
let mut client = Client::connect("localhost:9472").await?;
|
||||
```
|
||||
|
||||
## HTTP/REST
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:9470/api/query \
|
||||
-d '{"query": "SELECT * FROM users"}'
|
||||
```
|
||||
@@ -0,0 +1,50 @@
|
||||
# Kolonlu Depolama
|
||||
|
||||
Analitik sorgular ve toplama işlemleri için sütun yönlü depolama.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/core/columnar
|
||||
|
||||
var batch = newColumnBatch()
|
||||
var ageCol = batch.addInt64Col("age")
|
||||
var nameCol = batch.addStringCol("name")
|
||||
|
||||
ageCol.appendInt64(25)
|
||||
nameCol.appendString("Alice")
|
||||
```
|
||||
|
||||
## Toplamalar
|
||||
|
||||
```nim
|
||||
echo ageCol.sumInt64()
|
||||
echo ageCol.avgInt64()
|
||||
echo ageCol.minInt64()
|
||||
echo ageCol.maxInt64()
|
||||
```
|
||||
|
||||
## Kodlama
|
||||
|
||||
### RLE
|
||||
|
||||
```nim
|
||||
let rle = rleEncode(@[1'i64, 1, 1, 2, 2, 3])
|
||||
```
|
||||
|
||||
### Dictionary
|
||||
|
||||
```nim
|
||||
let dict = dictEncode(@["apple", "banana", "apple"])
|
||||
```
|
||||
|
||||
## Sütun Türleri
|
||||
|
||||
| Tip | Açıklama |
|
||||
|-----|----------|
|
||||
| `int32` | 32-bit tamsayı |
|
||||
| `int64` | 64-bit tamsayı |
|
||||
| `float32` | 32-bit kayan nokta |
|
||||
| `float64` | 64-bit kayan nokta |
|
||||
| `string` | Değişken uzunluklu dize |
|
||||
| `bool` | Mantıksal |
|
||||
@@ -0,0 +1,106 @@
|
||||
# Yapılandırma Referansı
|
||||
|
||||
BaraDB **ortam değişkenleri**, **yapılandırma dosyası** veya **komut satırı bayrakları** ile yapılandırılabilir.
|
||||
|
||||
## Öncelik Sırası
|
||||
|
||||
1. Komut satırı bayrakları (en yüksek)
|
||||
2. Ortam değişkenleri
|
||||
3. Yapılandırma dosyası (`baradb.conf` veya `baradb.json`)
|
||||
4. Yerleşik varsayılanlar (en düşük)
|
||||
|
||||
## Ortam Değişkenleri
|
||||
|
||||
### Ağ
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_ADDRESS` | `127.0.0.1` | Bağlama adresi |
|
||||
| `BARADB_PORT` | `9472` | TCP ikili protokol portu |
|
||||
| `BARADB_HTTP_PORT` | `9470` | HTTP/REST API portu |
|
||||
| `BARADB_WS_PORT` | `9471` | WebSocket portu |
|
||||
|
||||
### Depolama
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_DATA_DIR` | `./data` | Veri dizini yolu |
|
||||
| `BARADB_MEMTABLE_SIZE_MB` | `64` | MemTable boyutu (MB) |
|
||||
| `BARADB_CACHE_SIZE_MB` | `256` | Sayfa önbellek boyutu (MB) |
|
||||
|
||||
### TLS/SSL
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_TLS_ENABLED` | `false` | TLS'yi etkinleştir |
|
||||
| `BARADB_CERT_FILE` | — | TLS sertifika dosyası |
|
||||
| `BARADB_KEY_FILE` | — | TLS özel anahtar dosyası |
|
||||
|
||||
### Güvenlik
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_AUTH_ENABLED` | `false` | Kimlik doğrulamayı etkinleştir |
|
||||
| `BARADB_JWT_SECRET` | — | JWT imzalama sırrı |
|
||||
| `BARADB_RATE_LIMIT_GLOBAL` | `10000` | Global istek/saniye |
|
||||
| `BARADB_RATE_LIMIT_PER_CLIENT` | `1000` | İstemci başına istek/saniye |
|
||||
|
||||
## Yapılandırma Dosyası
|
||||
|
||||
### baradb.conf
|
||||
|
||||
```ini
|
||||
[server]
|
||||
address = "0.0.0.0"
|
||||
port = 9472
|
||||
http_port = 9470
|
||||
|
||||
[storage]
|
||||
data_dir = "/var/lib/baradb"
|
||||
memtable_size_mb = 256
|
||||
cache_size_mb = 512
|
||||
|
||||
[tls]
|
||||
enabled = true
|
||||
cert_file = "/etc/baradb/server.crt"
|
||||
key_file = "/etc/baradb/server.key"
|
||||
|
||||
[auth]
|
||||
enabled = true
|
||||
jwt_secret = "change-me-in-production"
|
||||
```
|
||||
|
||||
## Komut Satırı Bayrakları
|
||||
|
||||
```bash
|
||||
./build/baradadb --help
|
||||
```
|
||||
|
||||
```
|
||||
Options:
|
||||
-c, --config <file> Yapılandırma dosyası yolu
|
||||
-p, --port <port> TCP ikili port (varsayılan: 9472)
|
||||
--http-port <port> HTTP port (varsayılan: 9470)
|
||||
-d, --data-dir <dir> Veri dizini (varsayılan: ./data)
|
||||
--shell İnteraktif kabuk başlat
|
||||
--version Versiyonu göster
|
||||
```
|
||||
|
||||
## Örnek Yapılandırmalar
|
||||
|
||||
### Geliştirme
|
||||
|
||||
```bash
|
||||
./build/baradadb --log-level debug --data-dir ./dev_data
|
||||
```
|
||||
|
||||
### Üretim Tek Düğüm
|
||||
|
||||
```bash
|
||||
BARADB_TLS_ENABLED=true \
|
||||
BARADB_AUTH_ENABLED=true \
|
||||
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
|
||||
BARADB_MEMTABLE_SIZE_MB=256 \
|
||||
BARADB_CACHE_SIZE_MB=1024 \
|
||||
./build/baradadb
|
||||
```
|
||||
@@ -0,0 +1,48 @@
|
||||
# Çapraz Modlu Sorgular
|
||||
|
||||
BaraDB'nin benzersiz yeteneği: birden fazla depolama motorunu tek bir BaraQL ifadesiyle sorgulama.
|
||||
|
||||
## Genel Bakış
|
||||
|
||||
- **Belge/KV** (LSM-Tree) — yapılandırılmış kayıtlar
|
||||
- **Grafik** (Bitişik Liste) — ilişkiler
|
||||
- **Vektör** (HNSW/IVF-PQ) — benzerlik araması
|
||||
- **Tam Metin** (Ters İndeks) — metin araması
|
||||
- **Kolonlu** — analitik toplamalar
|
||||
|
||||
## Sorgu Kalıpları
|
||||
|
||||
### Vektör + Tam Metin
|
||||
|
||||
```sql
|
||||
SELECT title FROM articles
|
||||
WHERE MATCH(body) AGAINST('machine learning')
|
||||
ORDER BY cosine_distance(embedding, [...])
|
||||
LIMIT 10;
|
||||
```
|
||||
|
||||
### Grafik + Vektör
|
||||
|
||||
```sql
|
||||
MATCH (u:User)-[:KNOWS]->(friend:User)
|
||||
WHERE u.name = 'Alice'
|
||||
ORDER BY cosine_distance(friend.taste_vector, u.taste_vector)
|
||||
RETURN friend.name;
|
||||
```
|
||||
|
||||
## Optimizasyon
|
||||
|
||||
### Çapraz Modlu Sorgu Planlayıcı
|
||||
|
||||
1. En seçici filtre önce
|
||||
2. Yüklemeleri her motora itin
|
||||
3. KV aramaları için Bloom filtreleri kullan
|
||||
4. Bağımsız dalları paralelleştir
|
||||
|
||||
## Performans
|
||||
|
||||
| Sorgu Tipi | Gecikme (10K satır) |
|
||||
|------------|----------------------|
|
||||
| FTS + Vector | 15 ms |
|
||||
| Graph + Vector | 25 ms |
|
||||
| FTS + Aggregate | 12 ms |
|
||||
@@ -0,0 +1,68 @@
|
||||
# Dağıtım Rehberi
|
||||
|
||||
## Docker
|
||||
|
||||
### Hızlı Başlangıç
|
||||
|
||||
```bash
|
||||
docker build -t baradb:latest .
|
||||
docker compose up -d
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
### Docker Compose Dosyaları
|
||||
|
||||
| Dosya | Amaç |
|
||||
|-------|------|
|
||||
| `docker-compose.yml` | Geliştirme |
|
||||
| `docker-compose.prod.yml` | Üretim |
|
||||
|
||||
## Portlar
|
||||
|
||||
| Port | Açıklama |
|
||||
|------|----------|
|
||||
| `9472` | İkili tel protokolü |
|
||||
| `9470` | HTTP/REST API |
|
||||
| `9471` | WebSocket |
|
||||
|
||||
## Ortam Değişkenleri
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_ADDRESS` | `0.0.0.0` | Dinleme adresi |
|
||||
| `BARADB_PORT` | `9472` | İkili protokol portu |
|
||||
| `BARADB_HTTP_PORT` | `9470` | HTTP portu |
|
||||
| `BARADB_DATA_DIR` | `/data` | Veri dizini |
|
||||
|
||||
## Volumes
|
||||
|
||||
| Yol | Açıklama |
|
||||
|-----|----------|
|
||||
| `/data` | Ana veritabanı dizini |
|
||||
| `/data/server/wal` | Write-ahead log |
|
||||
| `/data/server/sstables` | SSTable dosyaları |
|
||||
|
||||
## Üretim Kontrol Listesi
|
||||
|
||||
- [ ] TLS sertifikaları oluşturun
|
||||
- [ ] Güçlü `BARADB_JWT_SECRET` ayarlayın
|
||||
- [ ] Güvenlik duvarı kurallarını yapılandırın
|
||||
- [ ] Düzenli yedeklemeler ayarlayın
|
||||
- [ ] Kaynak sınırlarını kontrol edin
|
||||
- [ ] İzlemeyi yapılandırın
|
||||
|
||||
## TLS Docker'da
|
||||
|
||||
```bash
|
||||
mkdir -p certs
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
||||
-keyout certs/server.key -out certs/server.crt
|
||||
```
|
||||
|
||||
## Yedekleme Docker'da
|
||||
|
||||
```bash
|
||||
docker exec baradb /app/backup backup --data-dir=/data
|
||||
docker exec baradb /app/backup list
|
||||
docker exec baradb /app/backup restore --input=backup_xxx.tar.gz
|
||||
```
|
||||
@@ -0,0 +1,73 @@
|
||||
# Dağıtık Sistemler
|
||||
|
||||
BaraDB Raft konsensüsü, parçalama ve çoğaltma ile dağıtık dağıtımı destekler.
|
||||
|
||||
## Raft Konsensüs
|
||||
|
||||
Lider seçimi ve log çoğaltma:
|
||||
|
||||
```nim
|
||||
import barabadb/core/raft
|
||||
|
||||
var cluster = newRaftCluster()
|
||||
cluster.addNode("node1")
|
||||
cluster.addNode("node2")
|
||||
cluster.addNode("node3")
|
||||
|
||||
let n1 = cluster.nodes["n1"]
|
||||
n1.becomeCandidate()
|
||||
n1.becomeLeader()
|
||||
```
|
||||
|
||||
## Parçalama
|
||||
|
||||
```nim
|
||||
import barabadb/core/sharding
|
||||
|
||||
var router = newShardRouter(ShardConfig(
|
||||
numShards: 4,
|
||||
replicas: 2,
|
||||
strategy: ssHash
|
||||
))
|
||||
```
|
||||
|
||||
### Parçalama Stratejileri
|
||||
|
||||
| Strateji | Açıklama |
|
||||
|----------|----------|
|
||||
| `ssHash` | Hash tabanlı parçalama |
|
||||
| `ssRange` | Aralık tabanlı parçalama |
|
||||
| `ssConsistent` | Tutarlı hashleme |
|
||||
|
||||
## Çoğaltma
|
||||
|
||||
```nim
|
||||
import barabadb/core/replication
|
||||
|
||||
var rm = newReplicationManager(rmSync)
|
||||
rm.addReplica(newReplica("r1", "10.0.0.1", 9472))
|
||||
```
|
||||
|
||||
### Çoğaltma Modları
|
||||
|
||||
| Mod | Açıklama |
|
||||
|-----|----------|
|
||||
| `rmSync` | Senkron çoğaltma |
|
||||
| `rmAsync` | Asenkron çoğaltma |
|
||||
| `rmSemiSync` | Yarı-senkron çoğaltma |
|
||||
|
||||
## Dağıtık İşlemler
|
||||
|
||||
İki aşamalı commit:
|
||||
|
||||
```nim
|
||||
import barabadb/core/disttxn
|
||||
|
||||
var dt = newDistributedTxn()
|
||||
dt.prepare(@["node1", "node2"])
|
||||
dt.commit()
|
||||
```
|
||||
|
||||
## Resmi Doğrulama
|
||||
|
||||
Temel dağıtık algoritmalar TLA+'da belirtilmiş ve model kontrolü yapılmıştır.
|
||||
@@ -0,0 +1,78 @@
|
||||
# Docker Dağıtım Rehberi
|
||||
|
||||
## Hızlı Başlangıç
|
||||
|
||||
```bash
|
||||
git clone https://github.com/katehonz/barabaDB.git
|
||||
cd barabaDB
|
||||
|
||||
docker build -t baradb:latest .
|
||||
|
||||
docker compose up -d
|
||||
|
||||
docker compose ps
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
## Dosyalar
|
||||
|
||||
| Dosya | Açıklama |
|
||||
|-------|----------|
|
||||
| `Dockerfile` | Multi-stage üretim build |
|
||||
| `docker-compose.yml` | Geliştirme yapılandırması |
|
||||
| `docker-compose.prod.yml` | Üretim yapılandırması |
|
||||
|
||||
## Image Oluşturma
|
||||
|
||||
```bash
|
||||
docker build -t baradb:latest .
|
||||
```
|
||||
|
||||
## Çalıştırma
|
||||
|
||||
### Geliştirme
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
docker compose down
|
||||
```
|
||||
|
||||
### Üretim
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
## Portlar
|
||||
|
||||
| Port | Açıklama |
|
||||
|------|----------|
|
||||
| `9472` | İkili tel protokolü |
|
||||
| `9470` | HTTP/REST API |
|
||||
| `9471` | WebSocket |
|
||||
|
||||
## Ortam Değişkenleri
|
||||
|
||||
| Değişken | Varsayılan | Açıklama |
|
||||
|----------|------------|----------|
|
||||
| `BARADB_ADDRESS` | `0.0.0.0` | Dinleme adresi |
|
||||
| `BARADB_PORT` | `9472` | İkili protokol portu |
|
||||
| `BARADB_HTTP_PORT` | `9470` | HTTP portu |
|
||||
| `BARADB_DATA_DIR` | `/data` | Veri dizini |
|
||||
|
||||
## Volumes
|
||||
|
||||
| Yol | Açıklama |
|
||||
|-----|----------|
|
||||
| `/data` | Ana veri dizini |
|
||||
| `/data/server/wal` | Write-ahead log |
|
||||
| `/data/server/sstables` | SSTable dosyaları |
|
||||
|
||||
## Üretim Kontrol Listesi
|
||||
|
||||
- [ ] `./certs/` içinde TLS sertifikaları oluşturun
|
||||
- [ ] Güçlü `BARADB_JWT_SECRET` ayarlayın
|
||||
- [ ] Güvenlik duvarı kurallarını yapılandırın
|
||||
- [ ] Düzenli yedeklemeler yapılandırın
|
||||
- [ ] Kaynak sınırlarını kontrol edin
|
||||
- [ ] İzleme ayarlayın
|
||||
@@ -0,0 +1,47 @@
|
||||
# Tam Metin Arama Motoru
|
||||
|
||||
BM25 ve TF-IDF sıralamasıyla ters indeks.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/fts/engine
|
||||
|
||||
var idx = newInvertedIndex()
|
||||
idx.addDocument(1, "Nim is a fast programming language")
|
||||
idx.addDocument(2, "Python is popular for data science")
|
||||
|
||||
let results = idx.search("programming language")
|
||||
let fuzzy = idx.fuzzySearch("programing", maxDistance = 2)
|
||||
```
|
||||
|
||||
## Sıralama Yöntemleri
|
||||
|
||||
### BM25
|
||||
|
||||
```nim
|
||||
let bm25 = idx.searchBM25("query terms")
|
||||
```
|
||||
|
||||
### TF-IDF
|
||||
|
||||
```nim
|
||||
let tfidf = idx.searchTfidf("query terms")
|
||||
```
|
||||
|
||||
## Arama Özellikleri
|
||||
|
||||
| Özellik | Açıklama |
|
||||
|----------|----------|
|
||||
| Fuzzy search | Levenshtein mesafesi toleransı |
|
||||
| Wildcard | Önek, sonek ve ara joker |
|
||||
| Regex | Normal ifade kalıpları |
|
||||
| Phrase search | Tam ifade eşleme |
|
||||
| Boolean | AND, OR, NOT operatörleri |
|
||||
|
||||
## SQL Arayüzü
|
||||
|
||||
```sql
|
||||
CREATE INDEX idx_fts ON articles(body) USING FTS;
|
||||
SELECT * FROM articles WHERE body @@ 'machine learning';
|
||||
```
|
||||
@@ -0,0 +1,42 @@
|
||||
# Grafik Motoru
|
||||
|
||||
Grafik geçişi ve analizi için yerleşik algoritmalarla bitişik liste depolaması.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/graph/engine
|
||||
|
||||
var g = newGraph()
|
||||
let alice = g.addNode("Person", {"Name": "Alice"}.toTable)
|
||||
let bob = g.addNode("Person", {"Name": "Bob"}.toTable)
|
||||
discard g.addEdge(alice, bob, "knows")
|
||||
|
||||
let bfs = g.bfs(alice)
|
||||
let path = g.shortestPath(alice, bob)
|
||||
let ranks = g.pageRank()
|
||||
```
|
||||
|
||||
## Algoritmalar
|
||||
|
||||
| Algoritma | Açıklama |
|
||||
|-----------|----------|
|
||||
| `bfs` | Enine arama |
|
||||
| `dfs` | Derine arama |
|
||||
| `dijkstra` | En kısa ağırlıklı yol |
|
||||
| `pageRank` | Düğüm önem sıralaması |
|
||||
| `louvain` | Topluluk tespiti |
|
||||
| `patternMatch` | Altgraf eşleme |
|
||||
|
||||
## Cypher Sorgusu
|
||||
|
||||
```nim
|
||||
import barabadb/graph/cypher
|
||||
|
||||
var engine = newCypherEngine(g)
|
||||
let results = engine.execute("""
|
||||
MATCH (p:Person)-[:KNOWS]->(friend:Person)
|
||||
WHERE p.name = 'Alice'
|
||||
RETURN friend.name
|
||||
""")
|
||||
```
|
||||
@@ -0,0 +1,59 @@
|
||||
# BaraDB Dokümantasyonu (Türkçe)
|
||||
|
||||
**Nim ile yazılmış çok modlu bir veritabanı motoru — %100 native, sıfır bağımlılık.**
|
||||
|
||||
## Hızlı Bağlantılar
|
||||
|
||||
> **Not:** Türkçe dokümantasyon geliştirme aşamasındadır. Tam bilgi için [İngilizce sürüme](../en/) bakın.
|
||||
|
||||
### Başlangıç
|
||||
- [Kurulum](../en/installation.md)
|
||||
- [Hızlı Başlangıç](../en/quickstart.md)
|
||||
- [Mimari Genel Bakış](../en/architecture.md)
|
||||
- [Yapılandırma Referansı](../en/configuration.md)
|
||||
- [Dağıtım Rehberi](../en/deployment.md)
|
||||
|
||||
### Temel Kavramlar
|
||||
- [BaraQL Sorgu Dili](../en/baraql.md)
|
||||
- [Depolama Motorları](../en/storage.md)
|
||||
- [Şema Sistemi](../en/schema.md)
|
||||
- [Çapraz Modlu Sorgular](../en/crossmodal.md)
|
||||
|
||||
### Motorlar
|
||||
- [LSM-Tree Depolama](../en/lsm.md)
|
||||
- [B-Tree İndeksi](../en/btree.md)
|
||||
- [Vektör Arama](../en/vector.md)
|
||||
- [Grafik Motoru](../en/graph.md)
|
||||
- [Tam Metin Arama](../en/fts.md)
|
||||
- [Kolonlu Depolama](../en/columnar.md)
|
||||
|
||||
### API ve İstemciler
|
||||
- [İstemci SDK'ları](../en/clients.md)
|
||||
- [İkili Protokol](../en/api-binary.md)
|
||||
- [HTTP/REST API](../en/api-http.md)
|
||||
- [WebSocket API](../en/api-websocket.md)
|
||||
- [Protokol Referansı](../en/protocol.md)
|
||||
|
||||
### Operasyonlar
|
||||
- [Performans ve Kıyaslama](../en/performance.md)
|
||||
- [Güvenlik Rehberi](../en/security.md)
|
||||
- [İzleme ve Gözlemlenebilirlik](../en/monitoring.md)
|
||||
- [Yedekleme ve Kurtarma](../en/backup.md)
|
||||
- [Sorun Giderme](../en/troubleshooting.md)
|
||||
|
||||
### İleri Düzey
|
||||
- [İşlemler ve MVCC](../en/transactions.md)
|
||||
- [Dağıtık Sistemler](../en/distributed.md)
|
||||
- [Kullanıcı Tanımlı Fonksiyonlar](../en/udf.md)
|
||||
|
||||
---
|
||||
|
||||
## Proje Bilgileri
|
||||
|
||||
- [Değişiklik Günlüğü](../en/changelog.md)
|
||||
- [Lisans](../../LICENSE)
|
||||
- [GitHub Deposu](https://github.com/katehonz/barabaDB)
|
||||
|
||||
---
|
||||
|
||||
*Türkçe dokümantasyon çeviri aşamasındadır.*
|
||||
@@ -0,0 +1,62 @@
|
||||
# BaraDB - Kurulum Rehberi
|
||||
|
||||
## Gereksinimler
|
||||
|
||||
- **Nim Derleyici** >= 2.2.0
|
||||
- **OpenSSL** geliştirme başlıkları (TLS desteği için)
|
||||
- **İşletim Sistemi**: Linux, macOS, Windows
|
||||
|
||||
### Desteklenen Platformlar
|
||||
|
||||
| OS | Mimari | Durum |
|
||||
|----|--------|-------|
|
||||
| Linux | x86_64 | ✅ Tam destek |
|
||||
| Linux | ARM64 | ✅ Tam destek |
|
||||
| macOS | x86_64 | ✅ Tam destek |
|
||||
| macOS | ARM64 (Apple Silicon) | ✅ Tam destek |
|
||||
| Windows | x86_64 | ✅ Destekleniyor |
|
||||
| FreeBSD | x86_64 | 🟡 Topluluk testli |
|
||||
|
||||
## Nim Kurulumu
|
||||
|
||||
### Linux
|
||||
|
||||
```bash
|
||||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
```bash
|
||||
brew install nim
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
```powershell
|
||||
winget install nim
|
||||
```
|
||||
|
||||
## BaraDB Derleme
|
||||
|
||||
```bash
|
||||
git clone https://github.com/katehonz/barabaDB.git
|
||||
cd barabaDB
|
||||
nimble install -d -y
|
||||
nim c -d:ssl -d:release --opt:speed -o:build/baradadb src/baradadb.nim
|
||||
```
|
||||
|
||||
## İlk Çalıştırma
|
||||
|
||||
```bash
|
||||
./build/baradadb
|
||||
curl http://localhost:9470/health
|
||||
./build/baradadb --shell
|
||||
```
|
||||
|
||||
## Sonraki Adımlar
|
||||
|
||||
- [Hızlı Başlangıç](quickstart.md)
|
||||
- [Yapılandırma Referansı](configuration.md)
|
||||
- [Mimari Genel Bakış](architecture.md)
|
||||
- [BaraQL Sorgu Dili](baraql.md)
|
||||
@@ -0,0 +1,48 @@
|
||||
# LSM-Tree Depolama Motoru
|
||||
|
||||
Log-Structured Merge-Tree mimarisini kullanan BaraDB'deki birincil depolama motoru.
|
||||
|
||||
## Mimari
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Writes │
|
||||
│ (append to WAL + MemTable) │
|
||||
└─────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ MemTable │
|
||||
│ (in-memory sorted buffer) │
|
||||
└─────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ SSTable │
|
||||
│ (sorted string table on disk) │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/storage/lsm
|
||||
|
||||
var db = newLSMTree("./data")
|
||||
|
||||
db.put("key1", cast[seq[byte]]("value1"))
|
||||
|
||||
let (found, value) = db.get("key1")
|
||||
|
||||
db.delete("key1")
|
||||
|
||||
db.close()
|
||||
```
|
||||
|
||||
## Özellikler
|
||||
|
||||
- **Yazma için optimize**: Append-only log yapısı
|
||||
- **Dayanıklılık**: WAL çökme kurtarma sağlar
|
||||
- **Bloom Filter**: Hızlı negatif aramalar
|
||||
- **Compaction**: Boyut katmanlı strateji
|
||||
- **Page Cache**: Sık erişilen sayfalar için LRU önbellek
|
||||
@@ -0,0 +1,84 @@
|
||||
# İzleme ve Gözlemlenebilirlik
|
||||
|
||||
## Sağlık Kontrolleri
|
||||
|
||||
### HTTP Sağlık Endpoint'i
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/health
|
||||
```
|
||||
|
||||
Yanıt:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "healthy",
|
||||
"version": "0.1.0",
|
||||
"uptime_seconds": 86400,
|
||||
"checks": {
|
||||
"storage": "ok",
|
||||
"memory": "ok",
|
||||
"connections": "ok"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Metrikler
|
||||
|
||||
### Prometheus Uyumlu Metrikler
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/metrics
|
||||
```
|
||||
|
||||
Örnek çıktı:
|
||||
|
||||
```
|
||||
baradb_queries_total 152340
|
||||
baradb_queries_duration_seconds_bucket{le="0.001"} 45000
|
||||
baradb_storage_lsm_size_bytes 2147483648
|
||||
baradb_cache_hit_rate 0.94
|
||||
baradb_active_connections 42
|
||||
```
|
||||
|
||||
## Günlükleme
|
||||
|
||||
### Günlük Seviyeleri
|
||||
|
||||
| Seviye | Açıklama |
|
||||
|--------|----------|
|
||||
| `debug` | Detaylı dahili operasyonlar |
|
||||
| `info` | Normal operasyonlar |
|
||||
| `warn` | Kurtarılabilir sorunlar |
|
||||
| `error` | Dikkat gerektiren başarısızlıklar |
|
||||
|
||||
### Yapılandırılmış JSON Günlükleri
|
||||
|
||||
```bash
|
||||
BARADB_LOG_LEVEL=info \
|
||||
BARADB_LOG_FORMAT=json \
|
||||
BARADB_LOG_FILE=/var/log/baradb/baradb.log \
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
## Grafana Dashboard
|
||||
|
||||
Dashboard ID `baradb-001` içe aktarın veya `monitoring/grafana-dashboard.json` içindeki JSON'u kullanın.
|
||||
|
||||
Temel paneller:
|
||||
- Saniyedeki sorgular
|
||||
- Sorgu gecikme yüzdeleri (p50, p95, p99)
|
||||
- Depolama boyutu ve SSTable sayısı
|
||||
- Önbellek isabet oranı
|
||||
- Aktif bağlantılar
|
||||
- İşlem oranı
|
||||
- Hata oranı
|
||||
|
||||
## Metriklerle Sorun Giderme
|
||||
|
||||
| Belirti | Metrik | Eylem |
|
||||
|---------|--------|-------|
|
||||
| Yavaş sorgular | `baradb_queries_duration_seconds` | Önbellek isabet oranını kontrol edin, indeks ekleyin |
|
||||
| Yüksek bellek | `process_resident_memory_bytes` | Memtable/cache boyutlarını azaltın |
|
||||
| Depolama büyüyor | `baradb_storage_lsm_size_bytes` | Manuel sıkıştırma çalıştırın |
|
||||
| Bağlantı hataları | `baradb_active_connections` | Bağlantı havuzunu artırın veya düğüm ekleyin |
|
||||
@@ -0,0 +1,68 @@
|
||||
# Performans Rehberi
|
||||
|
||||
## Kıyaslama Metodolojisi
|
||||
|
||||
Tüm kıyaslamalar şununla çalıştırılır:
|
||||
- **Derleyici**: Nim 2.2.0 `-d:release --opt:speed`
|
||||
- **CPU**: AMD Ryzen 9 5900X (12 çekirdek / 24 iş parçacığı)
|
||||
- **Bellek**: 64 GB DDR4-3600
|
||||
- **Depolama**: Samsung 980 Pro NVMe SSD
|
||||
|
||||
```bash
|
||||
nim c -d:ssl -d:release -r benchmarks/bench_all.nim
|
||||
```
|
||||
|
||||
## Depolama Motoru Kıyaslamaları
|
||||
|
||||
### LSM-Tree
|
||||
|
||||
| Metrik | Değer |
|
||||
|--------|-------|
|
||||
| Yazma verimi | ~580,000 ops/s |
|
||||
| Okuma verimi | ~720,000 ops/s |
|
||||
| Ortalama yazma gecikmesi | 1.7 µs |
|
||||
| Ortalama okuma gecikmesi | 1.4 µs |
|
||||
|
||||
### B-Tree İndeksi
|
||||
|
||||
| Metrik | Değer |
|
||||
|--------|-------|
|
||||
| Ekleme verimi | ~1,200,000 ops/s |
|
||||
| Nokta arama verimi | ~1,500,000 ops/s |
|
||||
|
||||
## Vektör Motoru Kıyaslamaları
|
||||
|
||||
### HNSW İndeksi
|
||||
|
||||
| Metrik | Değer |
|
||||
|--------|-------|
|
||||
| Ekleme (dim=128) | ~45,000 vectors/s |
|
||||
| Top-10 arama (n=100K) | ~8 ms |
|
||||
|
||||
Parametreler: `M=16`, `efConstruction=200`, `efSearch=64`.
|
||||
|
||||
## Ayar Kılavuzu
|
||||
|
||||
### Yoğun Yazma İş Yükü
|
||||
|
||||
```bash
|
||||
BARADB_MEMTABLE_SIZE_MB=256
|
||||
BARADB_WAL_SYNC_INTERVAL_MS=10
|
||||
BARADB_COMPACTION_INTERVAL_MS=30000
|
||||
```
|
||||
|
||||
### Yoğun Okuma İş Yükü
|
||||
|
||||
```bash
|
||||
BARADB_CACHE_SIZE_MB=1024
|
||||
BARADB_BLOOM_BITS_PER_KEY=10
|
||||
BARADB_COMPACTION_INTERVAL_MS=120000
|
||||
```
|
||||
|
||||
### Vektör Arama
|
||||
|
||||
```bash
|
||||
BARADB_VECTOR_EF_CONSTRUCTION=200
|
||||
BARADB_VECTOR_EF_SEARCH=128
|
||||
BARADB_VECTOR_M=32
|
||||
```
|
||||
@@ -0,0 +1,67 @@
|
||||
# Protokol Referansı
|
||||
|
||||
BaraDB istemci iletişimi için birden fazla protokol destekler:
|
||||
- **Binary Wire Protocol** — yüksek performanslı, düşük gecikme
|
||||
- **HTTP/REST API** — dil agnostik, kolay hata ayıklama
|
||||
- **WebSocket** — akış ve pub/sub
|
||||
|
||||
## Binary Wire Protocol
|
||||
|
||||
Tüm çok baytlı değerler için big-endian kodlama kullanır.
|
||||
|
||||
### Bağlantı Döngüsü
|
||||
|
||||
```
|
||||
Client Server
|
||||
| |
|
||||
|─── TCP connect ──────────────>|
|
||||
|─── Auth message ─────────────>|
|
||||
|<── Auth_OK / Error ───────────|
|
||||
|─── Query message ────────────>|
|
||||
|<── Data / Complete / Error ───|
|
||||
```
|
||||
|
||||
### Mesaj Formatı
|
||||
|
||||
```
|
||||
┌─────────────┬─────────────┬─────────────┬─────────────────────┐
|
||||
│ Length │ Type │ Sequence │ Payload │
|
||||
│ (4 bytes) │ (1 byte) │ (1 byte) │ (Length - 6 bytes) │
|
||||
└─────────────┴─────────────┴─────────────┴─────────────────────┘
|
||||
```
|
||||
|
||||
### Mesaj Türleri
|
||||
|
||||
| Tip | ID | Açıklama |
|
||||
|-----|----|----------|
|
||||
| Query | 0x01 | Sorgu çalıştır |
|
||||
| Insert | 0x02 | Veri ekle |
|
||||
| Update | 0x03 | Veri güncelle |
|
||||
| Delete | 0x04 | Veri sil |
|
||||
| Ready | 0x05 | Sonraki komut için hazır |
|
||||
| Error | 0x06 | Hata yanıtı |
|
||||
|
||||
## HTTP/REST API
|
||||
|
||||
Base URL: `http://localhost:9470/api/v1`
|
||||
|
||||
### Uç Noktalar
|
||||
|
||||
#### Health
|
||||
|
||||
```http
|
||||
GET /health
|
||||
```
|
||||
|
||||
#### Sorgu
|
||||
|
||||
```http
|
||||
POST /query
|
||||
{
|
||||
"query": "SELECT * FROM users"
|
||||
}
|
||||
```
|
||||
|
||||
## WebSocket Protocol
|
||||
|
||||
URL: `ws://localhost:9471`
|
||||
@@ -0,0 +1,99 @@
|
||||
# BaraDB - Hızlı Başlangıç Rehberi
|
||||
|
||||
## Sunucuyu Başlatma
|
||||
|
||||
```bash
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
Sunucu varsayılan olarak `localhost:9470` üzerinde başlar.
|
||||
|
||||
## CLI ile Bağlanma
|
||||
|
||||
```bash
|
||||
./build/baradadb --shell
|
||||
```
|
||||
|
||||
## Temel İşlemler
|
||||
|
||||
### Şema Oluşturma
|
||||
|
||||
```sql
|
||||
CREATE TYPE Person {
|
||||
name: str,
|
||||
age: int32
|
||||
};
|
||||
```
|
||||
|
||||
### Veri Ekleme
|
||||
|
||||
```sql
|
||||
INSERT Person { name := 'Alice', age := 30 };
|
||||
```
|
||||
|
||||
### Veri Sorgulama
|
||||
|
||||
```sql
|
||||
SELECT name, age FROM Person WHERE age > 18;
|
||||
```
|
||||
|
||||
### Veri Güncelleme
|
||||
|
||||
```sql
|
||||
UPDATE Person SET age = 31 WHERE name = 'Alice';
|
||||
```
|
||||
|
||||
### Veri Silme
|
||||
|
||||
```sql
|
||||
DELETE FROM Person WHERE name = 'Bob';
|
||||
```
|
||||
|
||||
## Gelişmiş Sorgular
|
||||
|
||||
### JOIN
|
||||
|
||||
```sql
|
||||
SELECT u.name, o.total
|
||||
FROM users u
|
||||
INNER JOIN orders o ON u.id = o.user_id;
|
||||
```
|
||||
|
||||
### CTE
|
||||
|
||||
```sql
|
||||
WITH active_users AS (
|
||||
SELECT * FROM users WHERE active = true
|
||||
)
|
||||
SELECT * FROM active_users;
|
||||
```
|
||||
|
||||
## Vektör Arama
|
||||
|
||||
```sql
|
||||
INSERT vectors { id := 1, embedding := [0.1, 0.2, 0.3] };
|
||||
SELECT * FROM vectors ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3]) LIMIT 10;
|
||||
```
|
||||
|
||||
## Grafik Operasyonları
|
||||
|
||||
```sql
|
||||
MATCH (p:Person)-[:KNOWS]->(other:Person)
|
||||
WHERE p.name = 'Alice'
|
||||
RETURN other.name;
|
||||
```
|
||||
|
||||
## HTTP/REST API
|
||||
|
||||
```bash
|
||||
curl http://localhost:9470/api/users
|
||||
curl -X POST http://localhost:9470/api/users \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "Alice", "age": 30}'
|
||||
```
|
||||
|
||||
## Sonraki Adımlar
|
||||
|
||||
- [BaraQL Referans](baraql.md)
|
||||
- [Depolama Motorları](storage.md)
|
||||
- [Mimari Genel Bakış](architecture.md)
|
||||
@@ -0,0 +1,46 @@
|
||||
# Şema Sistemi
|
||||
|
||||
BaraDB tip mirası ve otomatik geçişlerle schema-first tasarımı kullanır.
|
||||
|
||||
## Tipleri Tanımlama
|
||||
|
||||
```nim
|
||||
import barabadb/schema/schema
|
||||
|
||||
var s = newSchema()
|
||||
|
||||
let person = newType("Person")
|
||||
person.addProperty("name", "str", required = true)
|
||||
person.addProperty("age", "int32")
|
||||
s.addType("default", person)
|
||||
```
|
||||
|
||||
## Tip Mirası
|
||||
|
||||
```nim
|
||||
let employee = newType("Employee")
|
||||
employee.setBases(@["Person"])
|
||||
employee.addProperty("department", "str")
|
||||
s.addType("default", employee)
|
||||
```
|
||||
|
||||
## Şema İşlemleri
|
||||
|
||||
### Diff
|
||||
|
||||
```nim
|
||||
let diff = s.diff(oldSchema, newSchema)
|
||||
```
|
||||
|
||||
## Özellik Tipleri
|
||||
|
||||
| Tip | Açıklama |
|
||||
|-----|----------|
|
||||
| `str` | Dize |
|
||||
| `int32` | 32-bit tamsayı |
|
||||
| `int64` | 64-bit tamsayı |
|
||||
| `float32` | 32-bit kayan nokta |
|
||||
| `float64` | 64-bit kayan nokta |
|
||||
| `bool` | Mantıksal |
|
||||
| `datetime` | Tarih/zaman |
|
||||
| `bytes` | İkili veri |
|
||||
@@ -0,0 +1,76 @@
|
||||
# Güvenlik Rehberi
|
||||
|
||||
## TLS/SSL Şifreleme
|
||||
|
||||
BaraDB tüm protokoller için TLS 1.3 destekler. Sertifika sağlanmazsa, sunucu sıfır yapılandırma şifrelemesi için başlangıçta otomatik olarak kendinden imzalı sertifika üretir.
|
||||
|
||||
### Özel Sertifika Kullanımı
|
||||
|
||||
```bash
|
||||
BARADB_TLS_ENABLED=true \
|
||||
BARADB_CERT_FILE=/etc/baradb/server.crt \
|
||||
BARADB_KEY_FILE=/etc/baradb/server.key \
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
### Kendinden İmzalı Sertifika Oluşturma
|
||||
|
||||
```bash
|
||||
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt \
|
||||
-days 365 -nodes -subj "/CN=localhost"
|
||||
```
|
||||
|
||||
## Kimlik Doğrulama
|
||||
|
||||
### JWT Tabanlı Kimlik Doğrulama
|
||||
|
||||
BaraDB HMAC-SHA256 imzalı JWT kullanır.
|
||||
|
||||
### Kimlik Doğrulamayı Etkinleştirme
|
||||
|
||||
```bash
|
||||
BARADB_AUTH_ENABLED=true \
|
||||
BARADB_JWT_SECRET="$(openssl rand -hex 32)" \
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
### Rol Tabanlı Erişim Kontrolü
|
||||
|
||||
| Rol | İzinler |
|
||||
|-----|---------|
|
||||
| `admin` | Tam erişim |
|
||||
| `write` | Okuma + Yazma |
|
||||
| `read` | Salt okunur |
|
||||
| `monitor` | Yalnızca metrikler ve sağlık |
|
||||
|
||||
## Hız Sınırlama
|
||||
|
||||
Token-bucket hız sınırlama kötüye kullanımı önler:
|
||||
|
||||
```nim
|
||||
var rl = newRateLimiter(
|
||||
rlaTokenBucket,
|
||||
globalRate = 10000,
|
||||
perClientRate = 1000,
|
||||
burstSize = 100
|
||||
)
|
||||
```
|
||||
|
||||
## Ağ Güvenliği
|
||||
|
||||
### Bağlama Adresi
|
||||
|
||||
```bash
|
||||
BARADB_ADDRESS=0.0.0.0 ./build/baradadb
|
||||
```
|
||||
|
||||
## Güvenlik Kontrol Listesi
|
||||
|
||||
- [ ] Varsayılan JWT sırrını değiştirin
|
||||
- [ ] Geçerli sertifikalarla TLS'yi etkinleştirin
|
||||
- [ ] Belirli arayüzlere bağlayın
|
||||
- [ ] Üretimde kimlik doğrulamayı etkinleştirin
|
||||
- [ ] Hız sınırlama yapılandırın
|
||||
- [ ] Denetim günlüğünü etkinleştirin
|
||||
- [ ] Durağan verileri şifreleyin (LUKS veya uygulama düzeyinde)
|
||||
- [ ] BaraDB'yi root olmayan kullanıcı olarak çalıştırın
|
||||
@@ -0,0 +1,67 @@
|
||||
# Depolama Motorları
|
||||
|
||||
BaraDB farklı erişim kalıpları için optimize edilmiş birden fazla depolama motoru sağlar.
|
||||
|
||||
## LSM-Tree (Anahtar-Değer)
|
||||
|
||||
Yazma için optimize edilmiş append-only log yapılı birincil depolama motoru.
|
||||
|
||||
### Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/storage/lsm
|
||||
|
||||
var db = newLSMTree("./data")
|
||||
db.put("key1", cast[seq[byte]]("value1"))
|
||||
let (found, value) = db.get("key1")
|
||||
db.close()
|
||||
```
|
||||
|
||||
### Bileşenler
|
||||
|
||||
- **MemTable**: Bellek içi sıralı tampon
|
||||
- **WAL**: Dayanıklılık için write-ahead log
|
||||
- **SSTable**: Disk üzerinde sıralı string tabloları
|
||||
- **Bloom Filter**: Hızlı negatif aramalar için olasılıksal yapı
|
||||
- **Compaction**: Seviye yönetimi ile boyut katmanlı strateji
|
||||
- **Page Cache**: Hit oranı izlemeli LRU önbellek
|
||||
|
||||
## B-Tree İndeksi
|
||||
|
||||
Aralık taramaları ve nokta aramaları için sıralı indeks.
|
||||
|
||||
### Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/storage/btree
|
||||
|
||||
var btree = newBTreeIndex[string, string]()
|
||||
btree.insert("key1", "value1")
|
||||
let values = btree.get("key1")
|
||||
let range = btree.scan("key_a", "key_z")
|
||||
```
|
||||
|
||||
## Write-Ahead Log (WAL)
|
||||
|
||||
Yazma işlemlerinin dayanıklılığını sağlar.
|
||||
|
||||
```nim
|
||||
import barabadb/storage/wal
|
||||
|
||||
var wal = newWAL("./wal")
|
||||
wal.append("txn1", "SET key1 value1")
|
||||
wal.flush()
|
||||
```
|
||||
|
||||
## Bloom Filter
|
||||
|
||||
Hızlı negatif aramalar için olasılıksal veri yapısı.
|
||||
|
||||
```nim
|
||||
import barabadb/storage/bloom
|
||||
|
||||
var filter = newBloomFilter(10000, 0.01)
|
||||
filter.add("key1")
|
||||
if filter.mightContain("key1"):
|
||||
echo "muhtemelen var"
|
||||
```
|
||||
@@ -0,0 +1,47 @@
|
||||
# İşlemler ve MVCC
|
||||
|
||||
MVCC (Multi-Version Concurrency Control), snapshot izolasyonu ve deadlock algılama ile.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/core/mvcc
|
||||
|
||||
var tm = newTxnManager()
|
||||
let txn = tm.beginTxn()
|
||||
|
||||
discard tm.write(txn, "key1", cast[seq[byte]]("value1"))
|
||||
discard tm.write(txn, "key2", cast[seq[byte]]("value2"))
|
||||
|
||||
tm.savepoint(txn)
|
||||
discard tm.write(txn, "key3", cast[seq[byte]]("value3"))
|
||||
discard tm.rollbackToSavepoint(txn)
|
||||
|
||||
discard tm.commit(txn)
|
||||
```
|
||||
|
||||
## İşlem İzolasyonu
|
||||
|
||||
BaraDB **snapshot izolasyonu** kullanır:
|
||||
- Okuyucular yazıcıları engellemez
|
||||
- Yazıcılar okuyucuları engellemez
|
||||
- Her işlem tutarlı bir snapshot görür
|
||||
|
||||
## Deadlock Algılama
|
||||
|
||||
```nim
|
||||
import barabadb/core/deadlock
|
||||
|
||||
var detector = newDeadlockDetector()
|
||||
if detector.detectCycle(txn1, txn2):
|
||||
echo "Deadlock algılandı!"
|
||||
```
|
||||
|
||||
## Resmi Doğrulama
|
||||
|
||||
MVCC/Snapshot Isolation protokolü TLA+'da resmi olarak belirtilmiştir:
|
||||
|
||||
```bash
|
||||
cd formal-verification
|
||||
java -cp tla2tools.jar tlc2.TLC -config models/mvcc.cfg mvcc.tla
|
||||
```
|
||||
@@ -0,0 +1,81 @@
|
||||
# Sorun Giderme Rehberi
|
||||
|
||||
## Kurulum Sorunları
|
||||
|
||||
### Nim Bulunamadı
|
||||
|
||||
```bash
|
||||
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
|
||||
```
|
||||
|
||||
### SSL Derleme Hatası
|
||||
|
||||
```bash
|
||||
nim c -d:ssl -d:release -o:build/baradadb src/baradadb.nim
|
||||
```
|
||||
|
||||
### Eksik Bağımlılıklar
|
||||
|
||||
```bash
|
||||
nimble install -d -y
|
||||
```
|
||||
|
||||
## Çalışma Zamanı Sorunları
|
||||
|
||||
### Port Zaten Kullanımda
|
||||
|
||||
```bash
|
||||
BARADB_PORT=5433 ./build/baradadb
|
||||
```
|
||||
|
||||
### İzin Reddedildi
|
||||
|
||||
```bash
|
||||
mkdir -p ./data
|
||||
chmod 755 ./data
|
||||
```
|
||||
|
||||
### Yetersiz Bellek
|
||||
|
||||
```bash
|
||||
BARADB_MEMTABLE_SIZE_MB=32 \
|
||||
BARADB_CACHE_SIZE_MB=128 \
|
||||
./build/baradadb
|
||||
```
|
||||
|
||||
## Sorgu Sorunları
|
||||
|
||||
### Sözdizimi Hatası
|
||||
|
||||
```sql
|
||||
SELECT name, age FROM users WHERE age > 18;
|
||||
```
|
||||
|
||||
### Tablo Bulunamadı
|
||||
|
||||
```sql
|
||||
CREATE TYPE User { name: str, age: int32 };
|
||||
```
|
||||
|
||||
## Bağlantı Sorunları
|
||||
|
||||
### Bağlantı Reddedildi
|
||||
|
||||
```bash
|
||||
./build/baradadb
|
||||
sudo ufw allow 9472
|
||||
```
|
||||
|
||||
## Performans Sorunları
|
||||
|
||||
### Yavaş Sorgular
|
||||
|
||||
1. İndeks ekleyin: `CREATE INDEX idx_users_name ON users(name);`
|
||||
2. LIMIT kullanın
|
||||
3. Önbelleği artırın: `BARADB_CACHE_SIZE_MB=1024`
|
||||
|
||||
## Hata Ayıklama Modu
|
||||
|
||||
```bash
|
||||
BARADB_LOG_LEVEL=debug ./build/baradadb
|
||||
```
|
||||
@@ -0,0 +1,47 @@
|
||||
# Kullanıcı Tanımlı Fonksiyonlar
|
||||
|
||||
BaraQL'i özel fonksiyonlarla genişlet.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/query/udf
|
||||
|
||||
var reg = newUDFRegistry()
|
||||
|
||||
reg.registerStdlib()
|
||||
|
||||
reg.register("greet", @[UDFParam(name: "name", typeName: "str")],
|
||||
"str", proc(args: seq[Value]): Value =
|
||||
return Value(kind: vkString, strVal: "Hello, " & args[0].strVal & "!"))
|
||||
```
|
||||
|
||||
## Standart Kütüphane Fonksiyonları
|
||||
|
||||
| Fonksiyon | Açıklama | Örnek |
|
||||
|-----------|----------|-------|
|
||||
| `abs(n)` | Mutlak değer | `abs(-5)` → 5 |
|
||||
| `sqrt(n)` | Karekök | `sqrt(16)` → 4 |
|
||||
| `pow(n, e)` | Üs | `pow(2, 3)` → 8 |
|
||||
| `lower(s)` | Küçük harf | `lower('ABC')` → 'abc' |
|
||||
| `upper(s)` | Büyük harf | `upper('abc')` → 'ABC' |
|
||||
| `len(s)` | Uzunluk | `len('hello')` → 5 |
|
||||
| `trim(s)` | Boşluk kırpma | `trim(' hello ')` → 'hello' |
|
||||
|
||||
## Fonksiyon Kaydetme
|
||||
|
||||
```nim
|
||||
reg.register(
|
||||
name: "my_function",
|
||||
params: @[UDFParam(name: "arg1", typeName: "str")],
|
||||
returnType: "str",
|
||||
body: proc(args: seq[Value]): Value =
|
||||
result = Value(kind: vkString, strVal: "")
|
||||
)
|
||||
```
|
||||
|
||||
## Sorgularda UDF Kullanımı
|
||||
|
||||
```sql
|
||||
SELECT greet(name) FROM users;
|
||||
```
|
||||
@@ -0,0 +1,65 @@
|
||||
# Vektör Arama Motoru
|
||||
|
||||
Benzerlik araması için HNSW ve IVF-PQ indeksleri.
|
||||
|
||||
## Kullanım
|
||||
|
||||
```nim
|
||||
import barabadb/vector/engine
|
||||
|
||||
var idx = newHNSWIndex(dimensions = 128)
|
||||
idx.insert(1, @[1.0'f32, 0.0'f32, ...], {"category": "A"}.toTable)
|
||||
|
||||
let results = idx.search(queryVector, k = 10)
|
||||
```
|
||||
|
||||
## İndeks Türleri
|
||||
|
||||
### HNSW
|
||||
|
||||
Hiyerarşik Navigable Small World grafiği.
|
||||
|
||||
```nim
|
||||
var hnsw = newHNSWIndex(
|
||||
dimensions = 128,
|
||||
m = 16,
|
||||
efConstruction = 200,
|
||||
efSearch = 100
|
||||
)
|
||||
```
|
||||
|
||||
### IVF-PQ
|
||||
|
||||
Ürün nicemleme ile Ters Dosya İndeksi.
|
||||
|
||||
```nim
|
||||
var ivfpq = newIVFPQIndex(
|
||||
dimensions = 128,
|
||||
numCentroids = 256,
|
||||
subQuantizers = 8
|
||||
)
|
||||
```
|
||||
|
||||
## Mesafe Metrikleri
|
||||
|
||||
| Metrik | Açıklama |
|
||||
|--------|----------|
|
||||
| `cosine` | Kosinüs benzerliği |
|
||||
| `euclidean` | L2 mesafesi |
|
||||
| `dotproduct` | Nokta çarpımı |
|
||||
| `manhattan` | L1 mesafesi |
|
||||
|
||||
## Nicemleme
|
||||
|
||||
```nim
|
||||
let scalar = scalarQuantize(data, bits = 8)
|
||||
let pq = productQuantize(data, subVectors = 8, bits = 8)
|
||||
```
|
||||
|
||||
## SIMD Hızlandırma
|
||||
|
||||
```nim
|
||||
import barabadb/vector/simd
|
||||
|
||||
let dist = simdCosineDistance(vec1, vec2)
|
||||
```
|
||||
Reference in New Issue
Block a user