Files
Baradb/docs/en/changelog.md
T
dimgigov 8afa998516 feat: rate limiting, shared DB instance, TCP_NODELAY fix
- 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
2026-05-18 19:33:40 +03:00

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] and cast[seq[byte]] with safe bytesToString/stringToBytes helper 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 /query and /batch endpoints with X-Forwarded-For support
  • 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 vars
    • vector_search — Semantic HNSW vector search with tenant isolation
    • schema_inspect — Table/column/index/RLS policy exploration
    • Standalone binary: build/baramcp
  • Graph Engine Deep IntegrationCREATE GRAPH / DROP GRAPH DDL with native adjacency list storage
    • GRAPH_TABLE() SQL function with 7 algorithms: BFS, DFS, PageRank, ShortestPath, Dijkstra, Louvain, Community
    • INSERT into _nodes/_edges tables auto-syncs with native Graph objects
    • Optional MATCH, ALGORITHM, START, END, MAXDEPTH in GRAPH_TABLE syntax
  • Chunking + Embedding Pipeline — Server-side AI data processing:
    • chunk() SQL function — text splitting with configurable size/overlap
    • embed_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 BaraDBChatHistory class:
    • 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 generation
    • schema_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 pairs
    • node2vec_embed() — Random-walk based graph embeddings
  • Cypher Compatibility Layer:
    • cypher() SQL function — translates MATCH (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, llmClient fields
  • 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__.py and core.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/finish in HTTP server
  • Docker Compose Test Configurationdocker-compose.test.yml for test environments
  • CI/CD Clients Pipeline.github/workflows/clients-ci.yml for 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 + scanAll on 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
  • Recoverysummary() no longer mutates the database
  • Wire Protocol — 64MB limit + bounds checking + max depth to prevent OOM/DoS
  • SQL InjectionexprToSql now escapes single quotes
  • ReDoSirLike/irILike now escape regex metacharacters
  • GraphaddEdge now checks node existence
  • Vector — Dimension mismatch validation + HNSW locking
  • FTS — UTF-8 tokenization now uses runes instead of bytes
  • Buildnim.cfg adds -d:ssl so nimble build works without flags; --threads:on added 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 in CREATE TABLE with dimension validation
    • CREATE INDEX ... USING hnsw / USING ivfpq for approximate nearest neighbor indexes
    • SQL distance functions: cosine_distance(), euclidean_distance(), inner_product(), l1_distance(), l2_distance()
    • <-> nearest-neighbor operator (Euclidean distance)
    • ORDER BY support for vector distance expressions, including columns not in SELECT
    • Automatic HNSW index maintenance on INSERT and UPDATE
  • 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 + _requestLock for safe concurrent queries. Multiple parallel query() / execute() / ping() calls no longer interleave binary frames on the wire.

Fixed

  • Query Executor — Row Value EscapingexecInsert now 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 ProjectionirpkSort is now placed before irpkProject in the IR plan, allowing ORDER BY to reference columns that are not selected
  • Wire Protocol — Big-Endian Float SerializationFLOAT32/FLOAT64 and vector float values are now serialized in big-endian byte order, matching the client's readFloatBE() / readDoubleBE() and ensuring cross-platform numeric accuracy.
  • Gossip Protocol — Async UDP Socket — Replaced synchronous newSocket + blocking recvFrom with newAsyncSocket + 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