6.2 KiB
6.2 KiB
بنية 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)
- المحلل اللغوي (
query/lexer.nim): أكثر من 80 نوع رمز - المحلل (
query/parser.nim): محلل تنازلي تكراري - AST (
query/ast.nim): أكثر من 25 نوع عقدة - IR (
query/ir.nim): تمثيل وسيط - المحسن (
query/adaptive.nim): تحسين عبر الأنماط - توليد الكود (
query/codegen.nim): ترجمة إلى عمليات التخزين - المنفذ (
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
قرارات التصميم الرئيسية
- Nim نقي: بدون تبعيات Cython أو Python أو Rust
- تخزين موحد: محرك واحد لـ KV والرسم البياني والمتجة وFTS والعمودي
- الوضع المدمج: يمكن تشغيله كمكتبة أو خادم
- البروتوكول الثنائي: بروتوكول سلكي فعال مخصص
- MVCC: تحكم في التزامن متعدد الإصدارات
- المخطط أولاً: نظام مخطط مكتوب بشدة مع الوراثة
- عبر الأنماط: لغة استعلام واحدة عبر جميع نماذج البيانات
- التحقق الرسمي: الخوارزميات الموزعة الأساسية محددة في 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 |