8993cdc6f3
- Update README.md status from 'educational proof-of-concept' to 'production-ready' - Fix binary size: 286KB -> 3.3MB - Update test count: 162/35 -> 262/56 - Add sections: benchmarks, Docker, clients, security, config, monitoring, backup, cross-modal queries, troubleshooting - Expand project structure with all 49 modules and ~14,100 LOC - Add 10 new docs: performance, deployment, configuration, clients, security, monitoring, backup, crossmodal, troubleshooting, changelog - Expand docs/en: architecture, baraql, installation, protocol - Update docs/bg: architecture, installation - Update docs/index.md with new links - Update .gitignore for __pycache__, rust/target, nim binaries
8.2 KiB
8.2 KiB
BaraDB Архитектура
Преглед
BaraDB е мултимодална база данни написана на Nim, която комбинира документно (KV), графично, векторно, колонно и пълнотекстово търсене в един двигател с обединен език за заявки наречен BaraQL.
Слоеста Архитектура
┌─────────────────────────────────────────────────────────┐
│ 1. СЛОЙ ЗА КЛИЕНТИ │
│ Binary Protocol │ HTTP/REST │ WebSocket │ Embedded │
├─────────────────────────────────────────────────────────┤
│ 2. ЗАЯВКИ СЛОЙ (BaraQL) │
│ Lexer → Parser → AST → IR → Optimizer → Codegen │
├─────────────────────────────────────────────────────────┤
│ 3. ИЗПЪЛНИТЕЛЕН ДВИГАТЕЛ │
│ Document │ Graph │ Vector │ Columnar │ FTS │
├─────────────────────────────────────────────────────────┤
│ 4. СЪХРАНЕНИЕ │
│ LSM-Tree │ B-Tree │ WAL │ Bloom │ Compaction │ Cache │
├─────────────────────────────────────────────────────────┤
│ 5. РАЗПРЕДЕЛЕНО │
│ Raft Consensus │ Sharding │ Replication │ Gossip │
└─────────────────────────────────────────────────────────┘
Слой 1: Клиентски Слой
Множество протоколи за комуникация:
- Binary Protocol (
protocol/wire.nim): Ефективен big-endian бинарен протокол с 16 типа съобщения - HTTP/REST (
core/httpserver.nim): JSON REST API с мулти-трединг - WebSocket (
core/websocket.nim): Пълен дуплекс стрийминг - Embedded (
storage/lsm.nim): Директен in-process достъп
Управление на Връзките
- Connection Pool (
protocol/pool.nim): Мин/макс лимити на връзки - Rate Limiting (
protocol/ratelimit.nim): Token-bucket лимитиране - Authentication (
protocol/auth.nim): JWT с HMAC-SHA256 - TLS/SSL (
protocol/ssl.nim): TLS 1.3 с авто-генерирани сертификати
Слой 2: Заявки (BaraQL)
Pipeline-а на BaraQL:
- Lexer (
query/lexer.nim): Токенизира входа в 80+ типа токени - Parser (
query/parser.nim): Рекурсивен descent парсър произвеждащ AST - AST (
query/ast.nim): 300+ реда покриващи 25+ вида възли - IR (
query/ir.nim): Междинно представяне за планове за изпълнение - Optimizer (
query/adaptive.nim): Адаптивен крос-модален оптимизатор - Codegen (
query/codegen.nim): Транслира IR към операции върху съхранение - Executor (
query/executor.nim): Изпълнява планове с паралелизация
Крос-Модално Планиране
Оптимизаторът определя реда на изпълнение между двигателите:
1. Оценка на селективност за всеки предикат
2. Най-селективният предикат се изпълнява първи
3. Bloom филтри за KV търсения
4. Паралелизация на независими клонове
Слой 3: Изпълнителен Двигател
Document/KV Двигател
- LSM-Tree (
storage/lsm.nim): Оптимизиран за запис с MemTable, WAL, SSTables - B-Tree Index (
storage/btree.nim): Подреден индекс за диапазони с COW
Vector Engine
- HNSW (
vector/engine.nim): Иерархичен навигируем малък свят - IVF-PQ (
vector/engine.nim): Инвертиран файл с продуктово квантуване - SIMD (
vector/simd.nim): AVX2-оптимизирани изчисления на разстояния - Quantization (
vector/quant.nim): Скаларно, продуктово и бинарно квантуване
Graph Engine
- Списък със съседи (
graph/engine.nim): Насочен граф с тегла - Алгоритми (
graph/engine.nim): BFS, DFS, Dijkstra, PageRank - Community Detection (
graph/community.nim): Louvain алгоритъм - Pattern Matching (
graph/community.nim): Subgraph isomorphism - Cypher Parser (
graph/cypher.nim): Cypher-подобни заявки
FTS
- Инвертиран индекс (
fts/engine.nim): Термин-документ индекс - Ранжиране (
fts/engine.nim): BM25 и TF-IDF - Fuzzy Search (
fts/engine.nim): Levenshtein разстояние - Многоезичен (
fts/multilang.nim): Токенизация за EN, BG, DE, FR, RU
Columnar Engine
- Колонно съхранение (
core/columnar.nim): Аналитични заявки - Компресия: RLE и dictionary encoding
- SIMD агрегати: Ускорени агрегатни функции
Слой 4: Съхранение
- LSM-Tree (
storage/lsm.nim): MemTable, WAL, SSTable, Bloom Filter, Compaction - Page Cache (
storage/compaction.nim): LRU кеш - Memory-mapped I/O (
storage/mmap.nim): mmap-базиран достъп - Recovery (
storage/recovery.nim): WAL replay и възстановяване
Път на Запис
Client → Protocol → Auth → Parser → AST → IR → Codegen
→ StorageOp → MVCC Txn → WAL Write → MemTable → Commit
Път на Четене
Client → Protocol → Auth → Parser → AST → IR → Codegen
→ StorageOp → MVCC Snapshot → MemTable → SSTable → Result
Слой 5: Разпределено
- Raft Consensus (
core/raft.nim): Лидерско избиране, репликация на логове - Sharding (
core/sharding.nim): Hash, range и консистентно хеширане - Replication (
core/replication.nim): Sync, async, semi-sync режими - Gossip Protocol (
core/gossip.nim): SWIM-подобно управление на членство - Distributed Transactions (
core/disttxn.nim): Two-phase commit
Статистика на Модулите
| Категория | Модули | Редове Код | Предназначение |
|---|---|---|---|
| Core | 16 | ~4,200 | Сървър, протоколи, транзакции, разпределено |
| Storage | 7 | ~3,100 | LSM, B-Tree, WAL, bloom, compaction, mmap |
| Query | 7 | ~2,800 | Lexer, parser, AST, IR, оптимизатор, codegen, executor |
| Vector | 3 | ~1,200 | HNSW, IVF-PQ, квантуване, SIMD |
| Graph | 3 | ~1,000 | Списък със съседи, алгоритми, community detection |
| FTS | 2 | ~900 | Инвертиран индекс, BM25, fuzzy, многоезичен |
| Protocol | 7 | ~2,400 | Wire, HTTP, WebSocket, pool, auth, rate limit, SSL |
| Schema | 1 | ~600 | Типове, връзки, наследяване, миграции |
| Client | 2 | ~800 | Nim binary client, file helpers |
| CLI | 1 | ~400 | Интерактивна BaraQL конзола |
| Общо | 49 | ~14,100 |