102 lines
6.2 KiB
Markdown
102 lines
6.2 KiB
Markdown
# بنية BaraDB
|
|
|
|
## نظرة عامة
|
|
|
|
BaraDB هو **محرك قاعدة بيانات متعدد الأنماط** مكتوب بـ Nim يجمع بين تخزين المستندات (KV) والرسم البياني والمتجهي والعمودي والبحث النصي الكامل في محرك واحد مع لغة استعلام موحدة **BaraQL**.
|
|
|
|
## البنية الطبقية
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ 1. طبقة العميل │
|
|
│ البروتوكول الثنائي │ HTTP/REST │ WebSocket │ مضمن │
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ 2. طبقة الاستعلام (BaraQL) │
|
|
│ المحلل اللغوي → المحلل → AST → IR → المحسن → توليد الكود│
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ 3. محركات التنفيذ │
|
|
│ المستندات │ الرسم البياني │ المتجه │ العمودي │ FTS │
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ 4. التخزين │
|
|
│ LSM-Tree │ B-Tree │ WAL │ Bloom │ الضغط │ الذاكرة المؤقتة│
|
|
├─────────────────────────────────────────────────────────┤
|
|
│ 5. الموزع │
|
|
│ توافق Raft │ التجزئة │ النسخ │ Gossip │
|
|
└─────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## الطبقة 1: طبقة العميل
|
|
|
|
- **البروتوكول الثنائي**: بروتوكول ثنائي فعال big-endian
|
|
- **HTTP/REST**: واجهة REST مبنية على JSON
|
|
- **WebSocket**: دفق ثنائي الاتجاه كامل
|
|
- **المدمج**: وصول مباشر داخل العملية
|
|
|
|
## الطبقة 2: طبقة الاستعلام (BaraQL)
|
|
|
|
1. **المحلل اللغوي** (`query/lexer.nim`): أكثر من 80 نوع رمز
|
|
2. **المحلل** (`query/parser.nim`): محلل تنازلي تكراري
|
|
3. **AST** (`query/ast.nim`): أكثر من 25 نوع عقدة
|
|
4. **IR** (`query/ir.nim`): تمثيل وسيط
|
|
5. **المحسن** (`query/adaptive.nim`): تحسين عبر الأنماط
|
|
6. **توليد الكود** (`query/codegen.nim`): ترجمة إلى عمليات التخزين
|
|
7. **المنفذ** (`query/executor.nim`): تنفيذ متوازي
|
|
|
|
## الطبقة 3: محركات التنفيذ
|
|
|
|
### محرك المستندات/KV
|
|
- **LSM-Tree** (`storage/lsm.nim`): MemTable، WAL، SSTables
|
|
|
|
### المحرك المتجهي (`vector/`)
|
|
- **فهرس HNSW** (`vector/engine.nim`): رسم بياني صغير قابل للملاحة هرمي
|
|
- **فهرس IVF-PQ**: ملف مقلوب مع تكميم المنتج
|
|
- **عمليات SIMD** (`vector/simd.nim`): محسّن بـ AVX2
|
|
|
|
### محرك الرسم البياني (`graph/`)
|
|
- BFS، DFS، Dijkstra، PageRank
|
|
- **Louvain**: كشف المجتمع
|
|
|
|
### البحث النصي الكامل (`fts/`)
|
|
- الفهرس المقلوب، BM25، TF-IDF
|
|
- **متعدد اللغات**: tokenizers لـ EN، BG، DE، FR، RU
|
|
|
|
## الطبقة 4: التخزين
|
|
|
|
- **LSM-Tree**: MemTable، WAL، SSTable، Bloom Filter
|
|
- **ذاكرة الصفحة**: ذاكرة مؤقتة LRU
|
|
- **I/O المعينة**: وصول قائم على mmap
|
|
- **الاستعادة**: إعادة تشغيل WAL
|
|
|
|
## الطبقة 5: الموزع
|
|
|
|
- **توافق Raft** (`core/raft.nim`): انتخاب القائد، نسخ السجل
|
|
- **التجزئة** (`core/sharding.nim`): hash، range، تجزئة متسقة
|
|
- **النسخ** (`core/replication.nim`): متزامن، غير متزامن، شبه متزامن
|
|
- **بروتوكول Gossip** (`core/gossip.nim`): مثل SWIM
|
|
|
|
## قرارات التصميم الرئيسية
|
|
|
|
1. **Nim نقي**: بدون تبعيات Cython أو Python أو Rust
|
|
2. **تخزين موحد**: محرك واحد لـ KV والرسم البياني والمتجة وFTS والعمودي
|
|
3. **الوضع المدمج**: يمكن تشغيله كمكتبة أو خادم
|
|
4. **البروتوكول الثنائي**: بروتوكول سلكي فعال مخصص
|
|
5. **MVCC**: تحكم في التزامن متعدد الإصدارات
|
|
6. **المخطط أولاً**: نظام مخطط مكتوب بشدة مع الوراثة
|
|
7. **عبر الأنماط**: لغة استعلام واحدة عبر جميع نماذج البيانات
|
|
8. **التحقق الرسمي**: الخوارزميات الموزعة الأساسية محددة في TLA+ ومتحقق منها مع TLC
|
|
|
|
## إحصائيات الوحدات
|
|
|
|
| الفئة | الوحدات | أسطر الكود | الغرض |
|
|
|-------|---------|------------|-------|
|
|
| Core | 16 | ~4,200 | الخادم، البروتوكولات، المعاملات، الموزع |
|
|
| Storage | 7 | ~3,100 | LSM، B-Tree، WAL، bloom، الضغط، mmap |
|
|
| Query | 7 | ~2,800 | المحلل اللغوي، المحلل، AST، IR، المحسن، توليد الكود |
|
|
| Vector | 3 | ~1,200 | HNSW، IVF-PQ، التكميم، SIMD |
|
|
| Graph | 3 | ~1,000 | قائمة الجوار، الخوارزميات، كشف المجتمع |
|
|
| FTS | 2 | ~900 | الفهرس المقلوب، BM25، غامض، متعدد اللغات |
|
|
| Protocol | 7 | ~2,400 | Wire، HTTP، WebSocket، pool، auth، حد السعر، SSL |
|
|
| Schema | 1 | ~600 | الأنواع، الروابط، الوراثة |
|
|
| Client | 2 | ~800 | عميل Nim الثنائي |
|
|
| CLI | 1 | ~400 | صدفة BaraQL التفاعلية |
|
|
| **المجموع** | **49** | **~14,100** | | |