feat: initial BaraDB — multimodal database engine in Nim

- LSM-Tree storage engine with WAL, bloom filter, MemTable
- BaraQL query language: lexer (80+ tokens), recursive descent parser, AST
- Vector engine: HNSW + IVF-PQ indexes, 4 distance metrics
- Graph engine: adjacency list, BFS/DFS, Dijkstra, PageRank
- Full-Text Search: inverted index, BM25 ranking, stemming, stop words
- Type system: 17 types (int/float/string/uuid/json/vector/...)
- Async TCP server
- 21 passing tests
This commit is contained in:
2026-05-06 00:22:12 +03:00
commit 6935889877
18 changed files with 2676 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
## BaraDB Server — async TCP server
import std/asyncdispatch
import std/asyncnet
import std/strutils
import config
type
Server* = ref object
config: BaraConfig
running: bool
ClientConnection = ref object
socket: AsyncSocket
id: int
proc newServer*(config: BaraConfig): Server =
Server(config: config, running: false)
proc handleClient(server: Server, client: AsyncSocket, clientId: int) {.async.} =
echo "Client ", clientId, " connected"
try:
while true:
let line = await client.recvLine()
if line.len == 0:
break
echo "[", clientId, "] ", line
await client.send("OK\n")
except:
discard
finally:
echo "Client ", clientId, " disconnected"
client.close()
proc run*(server: Server) {.async.} =
server.running = true
var clientId = 0
let sock = newAsyncSocket()
sock.setSockOpt(OptReuseAddr, true)
sock.bindAddr(Port(server.config.port), server.config.address)
sock.listen()
echo "BaraDB listening on ", server.config.address, ":", server.config.port
while server.running:
let client = await sock.accept()
inc clientId
asyncCheck server.handleClient(client, clientId)
proc stop*(server: Server) =
server.running = false