Distributed SystemsGolangDatabasesPerformance

NuclaDB

Vector Search Engine, Built From Scratch

A vector database written from scratch in Go: HNSW indexing, a crash-safe write-ahead log, mmap-backed snapshots, and tenant-isolated multi-tenancy with scoped API keys. Product quantization and a Raft-sharded cluster exist as tested packages. Benchmarked head-to-head against a real Qdrant instance, not wrapped around one.

GogRPCOpenTelemetryPrometheusDockerPython

// why this exists

Most vector database side projects wrap an existing engine, like Qdrant, Pinecone, or pgvector, behind an app and call it a day. NuclaDB goes the other direction: the graph index, the durability layer, and the compression are the actual project, implemented and benchmarked against a real Qdrant instance rather than imported from one.

13.9K QPS vs Qdrant's 7.6K, 46 MB vs 116 MB

// numbers, not adjectives

Recall & throughput vs. Qdrant, 10K-vector SIFT, same machine, median of 5

efNuclaDB recall@10Qdrant recall@10NuclaDB QPSQdrant QPS
100.9320.959139147624
500.9960.998106537051
2001.0001.00058225512

Build time & memory, 10K vectors

BackendBuild timeRSS after build
NuclaDB416ms45.7 MB
Qdrant557ms115.4 MB

Concurrent load over gRPC, ef=100, recall@10 0.99

ConnectionsSearches/sp50p99
143050.24ms0.35ms
32223901.2ms5.4ms
128257523.5ms28.5ms

// how it's built

Durability Layer

  • fsync'd write-ahead log before every acknowledged write
  • Group commit and a parallel build: 10K vectors in 416ms, down from 43.9s
  • Snapshots every 5 min: restart in 5ms vs 300ms of WAL replay

Indexing & Compression

  • HNSW with the paper's diversity heuristic for neighbors
  • ef_search chosen per query
  • Product quantization: 16x smaller, 99.3% recall with re-ranking

Multi-Tenancy & API

  • Per-tenant graph, WAL, snapshot, dimension and metric
  • Quotas, token-bucket rate limits, scoped API keys, TLS
  • gRPC + REST + CLI + Python client