096c8347cf
- Thread-safety: locks in LSMTree and Graph engines - Raft network transport: async TCP, serialization, heartbeat, 3-node election test - CI/CD: GitHub Actions workflow - Cleanup: remove dead code, unused imports, build artifacts - New PLAN.md targeting production Web/ERP readiness - 216 tests passing
8.7 KiB
8.7 KiB
BaraDB — План към Production (Web & ERP)
Визия
BaraDB да стане production-ready база данни, с която да се изграждат:
- Web приложения (блогове, е-магазини, SaaS продукти)
- Малки ERP системи (CRM, склад, счетоводство, invoicing)
Целеви потребител: solo-dev / малък екип, който иска лесна за deploy и бърза локална база, без зависимост от PostgreSQL/MySQL.
Текущо състояние (база)
| Компонент | Статус |
|---|---|
| LSM-Tree KV store | ✅ Стабилен, thread-safe, persistent |
| HNSW векторен search | ✅ Работи с recall > 0.9 |
| TCP wire protocol | ✅ Бинарен, SELECT/INSERT/DELETE |
| Raft consensus | ✅ TCP transport, leader election |
| Graph engine | ✅ In-memory + persistence |
| Thread-safety | ✅ Coarse-grained locks |
| CI/CD | ✅ GitHub Actions |
Липсва за Web/ERP: SQL съвместимост, ACID транзакции, HTTP API, auth, ORM, миграции, backup.
Фаза 1: Релационен engine + SQL (4–6 седмици)
1.1 SQL парсър и AST
- Имплементирай ANSI SQL подмножество (CREATE TABLE, ALTER TABLE, DROP TABLE)
- INSERT с column list:
INSERT INTO users (name, email) VALUES ('...', '...') - UPDATE:
UPDATE users SET name = '...' WHERE id = 1 - SELECT с JOIN, GROUP BY, HAVING, ORDER BY, LIMIT/OFFSET
- DELETE с WHERE
- Поддръжка на
RETURNINGклауза
1.2 Типова система и constraints
INTEGER,BIGINT,SERIAL(auto-increment)VARCHAR(n),TEXTBOOLEANTIMESTAMP,DATE(ISO 8601)JSON,JSONB(in-memory + компресия)UUID(v4)- Constraints:
PRIMARY KEY,FOREIGN KEY,UNIQUE,NOT NULL,CHECK,DEFAULT - Foreign key каскади:
ON DELETE CASCADE/SET NULL
1.3 B-Tree индекси + интеграция с query planner
CREATE INDEX idx_name ON table(column)CREATE UNIQUE INDEX- Покриващ индекс (covering index) за чести колони
- Query planner да избира индекс вместо full scan
EXPLAINза анализ на заявки
1.4 Транзакции (ACID)
BEGIN,COMMIT,ROLLBACK- Isolation level:
READ COMMITTED(първа фаза),REPEATABLE READ(втора) - Deadlock detection и timeout
- MVCC интеграция с LSM-Tree (versioned reads)
- WAL за crash recovery при транзакции
Фаза 2: Web API & Authentication (3–4 седмици)
2.1 HTTP REST API
POST /query— изпълнява SQL, връща JSONGET /health— readiness/liveness probeGET /metrics— брой заявки, latency, errors (Prometheus формат)- JSON request/response body:
{ "query": "SELECT * FROM users WHERE id = 1", "params": [] } - Batch queries:
POST /batch— множество заявки в едно тяло - Content-Type:
application/json
2.2 Authentication & Authorization
- JWT bearer token в HTTP header
Authorization CREATE USER/DROP USER/ALTER USERGRANT/REVOKEза права на таблици- Row-Level Security (RLS):
CREATE POLICY - Хеширане на пароли с bcrypt/argon2
- Rate limiting per API key / IP
2.3 WebSocket за real-time
ws://host:port/live— subscribe към таблица/редNOTIFY/LISTENаналог- Пуш нотификации при INSERT/UPDATE/DELETE
2.4 CORS и HTTP hardening
- CORS headers за browser достъп
- TLS termination (reuse
ssl.nim) - Request size limits (10MB default)
- Connection keep-alive и HTTP/2 readiness
Фаза 3: ERP фичове (4–5 седмици)
3.1 Schema migrations
CREATE MIGRATION/APPLY MIGRATION- Версиониране на схемата в
__schema_versionтаблица - Up/down скриптове
- Dry-run режим
- CLI:
baradadb migrate status,baradadb migrate up,baradadb migrate down
3.2 Views и materialized views
CREATE VIEW— read-only virtual tableCREATE MATERIALIZED VIEW— кеширана snapshot +REFRESH- Поддръжка в query planner
3.3 Triggers и stored functions
CREATE TRIGGER—BEFORE/AFTERINSERT/UPDATE/DELETE- Stored functions in Nim (compiled to UDF):
CREATE FUNCTION total_price(quantity INT, price DECIMAL) RETURNS DECIMAL AS 'quantity * price'; - Функции за ERP:
vat_calc,currency_convert,invoice_number_next
3.4 Full-text search за ERP документи
CREATE FULLTEXT INDEX ON invoices(content)WHERE content @@ 'търсене'- Bulgarian stemming (reuse
fts/multilang.nim)
3.5 Partitioning
CREATE TABLE orders (...) PARTITION BY RANGE (created_at)- Автоматичен partition pruning в query planner
- Полезно за ERP: архивиране на стари данни
Фаза 4: Production readiness & DevEx (3–4 седмици)
4.1 Backup & Restore
baradadb backup --output backup.tar.gzbaradadb restore --input backup.tar.gz- Incremental backup чрез WAL archiving
- Point-in-time recovery (PITR)
- Scheduled backups (cron integration)
4.2 Docker и deployment
Dockerfile— multi-stage build с Nimdocker-compose.yml— single node + volumedocker-compose.raft.yml— 3-node cluster- Helm chart за Kubernetes (statefulset + PVC)
- Environment-based config (
BARADB_PORT,BARADB_DATA_DIR,BARADB_RAFT_PEERS)
4.3 Monitoring и observability
- Structured logging (JSON format)
- Prometheus
/metricsendpoint:baradb_queries_total,baradb_query_duration_secondsbaradb_connections_active,baradb_storage_size_bytesbaradb_replication_lag_seconds
- OpenTelemetry tracing integration
- Slow query log (threshold configurable)
4.4 ORM / Client SDK
- Nim:
baradbnimble пакет — fluent query builder + миграцииlet users = db.table("users") .where("active", "=", true) .orderBy("created_at", "DESC") .limit(10) .all() - Python:
pip install baradb— async/sync client - JavaScript/TypeScript:
npm install baradb— promise-based client - Go:
go get github.com/baradb/go-client - Connection pooling във всички клиенти
4.5 Admin Dashboard (Web UI)
- Лек вграден админ панел на
http://host:port/admin - SQL playground с резултати в таблица
- Schema browser (таблици, колони, индекси)
- Metrics charts (latency, throughput, storage)
- User management UI
4.6 Performance tuning
- Prepared statements кеш
- Query result cache (LRU, TTL-based)
- Connection pool в сървъра (max 1000 конекции)
- Auto-compaction scheduling
- Configurable cache size за page cache
Приоритетна матрица
| Задача | Влияние | Трудност | Приоритет |
|---|---|---|---|
| SQL парсър + AST | Критично | Висока | P0 |
| ACID транзакции | Критично | Висока | P0 |
| HTTP REST API | Критично | Средна | P0 |
| B-Tree индекси | Високо | Средна | P1 |
| JWT Auth + RLS | Високо | Средна | P1 |
| Schema migrations | Високо | Средна | P1 |
| Docker + Compose | Средно | Ниска | P2 |
| Backup/Restore | Средно | Средна | P2 |
| WebSocket real-time | Средно | Средна | P2 |
| Admin Dashboard | Средно | Висока | P2 |
| Views + Triggers | Ниско | Средна | P3 |
| Client SDK (ORM) | Ниско | Висока | P3 |
| Partitioning | Ниско | Висока | P3 |
| Kubernetes Helm | Ниско | Средна | P3 |
Очакван резултат
- Фаза 1: BaraDB поддържа ANSI SQL subset с ACID транзакции. Може да замени SQLite/PostgreSQL за малки проекти.
- Фаза 2: REST API + auth правят базата достъпна от всякакъв web stack. WebSocket добавя real-time възможности.
- Фаза 3: ERP-ready фичове — migrations, views, triggers, partitioning. Може да поддържа реален бизнес софтуер.
- Фаза 4: Production tooling — Docker, backup, monitoring, ORM, admin UI. Solo-dev може да deploy-не за 5 минути.
Крайна оценка след плана: от 8.5/10 към 9.5/10 — готова за production web/ERP.