8afa998516
- Add rate limiter to TCP and HTTP servers - Share single LSMTree between TCP and HTTP servers - Replace unsafe cast[string]/cast[seq[byte]] with safe helpers - Stabilize gossip UDP socket with exponential backoff - Fix TCP_NODELAY via low-level setSockOptInt(IPPROTO_TCP) (asyncnet.setSockOpt(OptNoDelay) uses SOL_SOCKET and fails) - Apply TCP_NODELAY to server and websocket sockets
12 KiB
12 KiB
Changelog
All notable changes to BaraDB are documented in this file.
[Unreleased] — Server Architecture Improvements
Fixed
- Shared Storage Instance — TCP and HTTP servers now share a single LSMTree instance instead of creating separate ones, eliminating data inconsistency between protocols
- Unsafe Cast Operations — Replaced all
cast[string]andcast[seq[byte]]with safebytesToString/stringToByteshelper functions that properly copy data for ARC/ORC memory management compatibility
Changed
- TCP_NODELAY Enabled — Both listening and client sockets now have TCP_NODELAY set, reducing latency for small messages (queries, acks) by disabling Nagle's algorithm
- Rate Limiter Integrated — Token-bucket rate limiter is now active in both TCP and HTTP server handlers:
- TCP: Per-client rate limiting on query messages (error code 429)
- HTTP: Rate limiting on
/queryand/batchendpoints withX-Forwarded-Forsupport
- Gossip Error Handling — Improved UDP socket error recovery with exponential backoff (100ms-5s) and socket recreation only after 10 consecutive failures
[Unreleased] — AI-Native Platform
Added
- MCP Server (Model Context Protocol) — STDIO JSON-RPC 2.0 server with 3 AI tools:
query— SQL execution with parameterized queries + multi-tenant session varsvector_search— Semantic HNSW vector search with tenant isolationschema_inspect— Table/column/index/RLS policy exploration- Standalone binary:
build/baramcp
- Graph Engine Deep Integration —
CREATE GRAPH/DROP GRAPHDDL with native adjacency list storageGRAPH_TABLE()SQL function with 7 algorithms: BFS, DFS, PageRank, ShortestPath, Dijkstra, Louvain, Community- INSERT into
_nodes/_edgestables auto-syncs with native Graph objects - Optional
MATCH,ALGORITHM,START,END,MAXDEPTHin GRAPH_TABLE syntax
- Chunking + Embedding Pipeline — Server-side AI data processing:
chunk()SQL function — text splitting with configurable size/overlapembed_text()SQL function — calls external embedding API (OpenAI/Ollama compatible)- Auto-embedding on INSERT — when VECTOR column is null, generates from TEXT column
- Configurable via env vars:
BARADB_EMBED_ENDPOINT,BARADB_EMBED_MODEL,BARADB_EMBED_API_KEY
- LangChain ChatMessageHistory — Python
BaraDBChatHistoryclass:- Stores conversation threads in relational table with RLS
- Multi-tenant isolation via
tenant_id+user_id
- RAG Pipeline Example — End-to-end Python script (
examples/rag_pipeline.py):- PDF/text ingestion → chunking → embedding → BaraDB storage → hybrid search → LLM generation
- Supports OpenAI and Ollama APIs
- AI Agents & NL→SQL — Server-side LLM integration:
nl_to_sql()SQL function — natural language → SQL generationschema_prompt()— generates DDL + sample data for LLM context- Query validation layer — sandbox execution with LIMIT 0 + EXPLAIN
- Self-correction loop — error feedback to LLM for fix
- Configurable via env vars:
BARADB_LLM_ENDPOINT,BARADB_LLM_MODEL,BARADB_LLM_API_KEY
- Graph Similarity & Embeddings:
similarity_nodes()— Jaccard/Adamic-Adar similarity between node pairsnode2vec_embed()— Random-walk based graph embeddings
- Cypher Compatibility Layer:
cypher()SQL function — translatesMATCH (a)-[r]->(b) RETURN ...to GRAPH_TABLE- Automatic Cypher → BaraQL conversion
- German Documentation — Full documentation set in German (
docs/de/)
Changed
- Graph executor upgraded from stub to real BFS/DFS/PageRank/Dijkstra/Louvain execution
- ExecutionContext extended with
graphs,embedder,llmClientfields - Graph engine extended with
addNodeWithId,addEdgeWithId, Jaccard, Adamic-Adar, node2vec
[1.1.0] — 2026-05-13
Added
- Client SDKs v1.1.4 — Full-featured clients for all languages:
- JavaScript: TypeScript definitions, package.json, examples, unit & integration tests
- Python: Restructured as proper package (
baradb/with__init__.pyandcore.py), pyproject.toml, examples, tests (query builder, wire protocol, integration) - Nim: Examples, integration tests, README
- Rust: Examples, integration tests, improved Cargo.toml
- SCRAM-SHA-256 Authentication — RFC 7677 compliant authentication with PBKDF2 + HMAC + SHA-256 + nonce/salt generation
- HTTP SCRAM Endpoints —
/auth/scram/start+/auth/scram/finishin HTTP server - Docker Compose Test Configuration —
docker-compose.test.ymlfor test environments - CI/CD Clients Pipeline —
.github/workflows/clients-ci.ymlfor automated client testing
Fixed
- Query Executor — Unary minus (
irNeg) evaluation now works correctly in SELECT and WHERE clauses - Distributed Transactions — Rollback after commit attempt no longer violates atomicity
- Sharding — Data migration protocol with TCP +
scanAllon LSM - Raft — Majority calculation for even number of nodes fixed
- MVCC — Aborted transactions no longer become visible
- LSM-Tree — Data loss on immutable memtable overwrite fixed; SSTable lookup sorting fixed
- Auth — JWT signature changed to HMAC-SHA256 (no longer trivially forgeable); token expiration (
exp/nbf/iat) now validated; signature comparison is now constant-time - Recovery —
summary()no longer mutates the database - Wire Protocol — 64MB limit + bounds checking + max depth to prevent OOM/DoS
- SQL Injection —
exprToSqlnow escapes single quotes - ReDoS —
irLike/irILikenow escape regex metacharacters - Graph —
addEdgenow checks node existence - Vector — Dimension mismatch validation + HNSW locking
- FTS — UTF-8 tokenization now uses runes instead of bytes
- Build —
nim.cfgadds-d:sslsonimble buildworks without flags;--threads:onadded to all CI commands
Changed
- Version bumped to 1.1.0 across all components (server, Docker images, clients, CLI)
- README — Version badge updated; all feature tables now reference v1.1.4
- TLA+ Formal Verification — Added
crossmodal.tla,backup.tla,recovery.tla; symmetry reduction in all 9 specs - Clean build — 0 compiler warnings on Nim 2.2.10
[0.1.0] — 2025-01-15
Added
-
Core Storage Engines
- LSM-Tree with MemTable, WAL, SSTables, and size-tiered compaction
- B-Tree ordered index with range scans and MVCC copy-on-write
- Bloom filters for efficient SSTable skip
- Memory-mapped I/O for SSTable reads
- LRU page cache with hit rate tracking
-
Query Engine (BaraQL)
- SQL-compatible lexer with 80+ token types
- Recursive descent parser producing AST with 25+ node kinds
- Intermediate representation (IR) for execution plans
- Code generator translating IR to storage operations
- Adaptive query optimizer with cross-modal planning
- Query executor with parallelization
-
BaraQL Language Features
- SELECT, INSERT, UPDATE, DELETE
- WHERE, ORDER BY, LIMIT, OFFSET
- GROUP BY, HAVING, aggregate functions (count, sum, avg, min, max)
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
- CTEs (Common Table Expressions) with WITH
- Subqueries (EXISTS, IN, correlated)
- CASE expressions
- UNION, INTERSECT, EXCEPT
- Schema definition: CREATE TYPE, DROP TYPE
-
Vector Engine
- HNSW index for approximate nearest neighbor search
- IVF-PQ index for large-scale vector search
- SIMD-optimized distance functions (cosine, L2, dot product, Manhattan)
- Quantization: scalar 8-bit/4-bit, product quantization, binary
- Metadata filtering during vector search
-
Graph Engine
- Adjacency list storage for directed, edge-weighted graphs
- BFS and DFS traversal
- Dijkstra shortest path
- PageRank node importance
- Louvain community detection
- Subgraph pattern matching
- Cypher-like graph query parser
-
Full-Text Search
- Inverted index with term-document mapping
- BM25 ranking algorithm
- TF-IDF scoring
- Fuzzy search with Levenshtein distance
- Wildcard/regex search
- Multi-language tokenizers (English, Bulgarian, German, French, Russian)
-
Columnar Storage
- Per-column storage for analytical queries
- RLE (Run-Length Encoding) compression
- Dictionary encoding for low-cardinality columns
- SIMD-accelerated aggregates
-
Transactions
- MVCC (Multi-Version Concurrency Control) with snapshot isolation
- Deadlock detection via wait-for graph
- Write-ahead log for durability
- Savepoints and partial rollback
-
Protocol Layer
- Binary wire protocol with 16 message types
- HTTP/REST JSON API
- WebSocket streaming
- Connection pooling
- JWT-based authentication
- Token-bucket rate limiting
- TLS/SSL with auto-generated certificates
-
Schema System
- Strong type system with 17 native types
- Type inheritance with multi-base support
- Property links between types
- Schema diffing and migrations
- Computed properties
-
Distributed Systems
- Raft consensus (leader election, log replication)
- Hash, range, and consistent-hash sharding
- Sync/async/semi-sync replication
- Gossip protocol for membership management
- Two-phase commit for distributed transactions
-
Cross-Modal Queries
- Unified query language across all storage engines
- Cross-engine predicate pushdown
- Optimized execution plans for multi-modal queries
-
Backup & Recovery
- Online snapshots without downtime
- Point-in-time recovery via WAL replay
- Incremental backups
-
Client SDKs
- JavaScript/TypeScript client with binary protocol
- Python client with sync and async APIs
- Nim embedded mode and client library
- Rust client (async)
-
Operations
- Interactive CLI shell (BaraQL REPL)
- Structured logging (JSON and text formats)
- Prometheus-compatible metrics endpoint
- Health and readiness probes
- CPU/memory profiling endpoints
-
Docker Support
- Multi-stage Dockerfile (Alpine Linux)
- Docker Compose configuration
- Health checks
Performance
- LSM-Tree: 580K writes/s, 720K reads/s
- B-Tree: 1.2M inserts/s, 1.5M lookups/s
- Vector SIMD: 850K cosine distances/s (dim=768)
- FTS: 320K docs/s indexing, 28K queries/s BM25
- Graph: 2.5M nodes/s insertion, 12K BFS traversals/s
- Binary protocol: 380K queries/s (100 concurrent connections)
Tests
- 262 tests across 56 test suites
- 100% pass rate
[Unreleased]
Added
- Vector SQL Integration — Full SQL-level vector search support:
VECTOR(n)column type inCREATE TABLEwith dimension validationCREATE INDEX ... USING hnsw/USING ivfpqfor approximate nearest neighbor indexes- SQL distance functions:
cosine_distance(),euclidean_distance(),inner_product(),l1_distance(),l2_distance() <->nearest-neighbor operator (Euclidean distance)ORDER BYsupport for vector distance expressions, including columns not inSELECT- Automatic HNSW index maintenance on
INSERTandUPDATE
- Advanced SQL Engine — Window functions, MERGE/UPSERT, LATERAL JOIN, PIVOT/UNPIVOT, SQL/PGQ Property Graph, Advanced Aggregates (ARRAY_AGG, STRING_AGG, FILTER, GROUPING SETS/ROLLUP/CUBE)
- JavaScript Client — TCP Request Queue — Internal
_requestQueue+_requestLockfor safe concurrent queries. Multiple parallelquery()/execute()/ping()calls no longer interleave binary frames on the wire.
Fixed
- Query Executor — Row Value Escaping —
execInsertnow properly escapes commas and equals signs in column values, fixing storage corruption for vector literals like[1.0, 2.0, 3.0] - Query Planner — ORDER BY Projection —
irpkSortis now placed beforeirpkProjectin the IR plan, allowingORDER BYto reference columns that are not selected - Wire Protocol — Big-Endian Float Serialization —
FLOAT32/FLOAT64and vector float values are now serialized in big-endian byte order, matching the client'sreadFloatBE()/readDoubleBE()and ensuring cross-platform numeric accuracy. - Gossip Protocol — Async UDP Socket — Replaced synchronous
newSocket+ blockingrecvFromwithnewAsyncSocket+await recvFrom, preventing the async event loop from freezing until a UDP packet arrives.
Planned
- Query plan caching
- Materialized views
- Geospatial index
- Time-series optimizations
- CDC (Change Data Capture) streaming
- Federated queries across BaraDB instances