The exact concerns we hear in every initial conversation — answered up front so you don't have to chase them.
PUT/SET, GET, DEL, HSET/HGET, INCR, CAS, MPUT/MGET, plus ordered scans with RANGE and SCANCUR and vector / text search (VSEARCH, TSEARCH, HSEARCH) — so for point-lookup workloads the change is a client swap, not a redesign. RESP compatibility is on the roadmap with no date. If you need joins, SQL, or a full search engine (facets, phrase queries, stemming), VeltrixDB is the wrong tool — we'll tell you that in the demo.pread from the value log, CRC32C-checked; and with no LSM compaction, value-log GC runs off the read path and backs off when read latency rises. Full conditions are on the performance page.DEL removes the record but not its vector — use VDEL (and TDEL for text); Fixed in v1.14: DEL also deletes the record’s vectors and text; the search API is in the bundled Go client, other languages use the text protocol. There is no same-hardware comparison with Milvus, Qdrant or any other vector database. Details: vector search docs.TSET indexes a document for Okapi BM25 (Unicode tokenizer, no stemming, stop words or phrase queries, at most 1 MiB per document), and HSEARCH fuses a vector and a text ranking with weighted reciprocal-rank fusion. In a cluster, BM25 is scored with cluster-wide statistics. There are no facets, aggregations or per-field weights, so if search is the product, Elasticsearch or OpenSearch is the better tool.fdatasync'd: the value to the value log and its record to a group-commit WAL, which shares one write(2) and one fdatasync across all writers in a batch. Since v1.12 group commit is adaptive: a lone writer is synced at once and the 15 ms window is only an upper bound (--group-commit=fixed restores the full wait). WAL records are binary with a CRC32C over the whole record (binary is the default since v1.6; v1.5 and earlier wrote text records). A crash replays the WAL; a clean shutdown writes a compacted checkpoint. Across nodes: --mode=raft for quorum-committed (linearizable) writes — reads are local by default, and --linearizable-reads sends GET and MGET through the ReadIndex fence; on v1.13 and earlier namespace, hash and range reads stay local (Fixed in v1.14: every read goes through it) — or --mode=replicated with eventual, quorum, or strong consistency, which is not linearizable under concurrent writers; --rack-id keeps replicas in different zones. Cross-region, repl-ship forwards the change stream. There is no SLA — it's software you run.--cluster-secret-file), RBAC, and an append-only audit log. /admin/* answers loopback only unless you set --admin-token. Known gaps: encryption key rotation is not implemented (one key per data directory, from an env var or key file), keys themselves are not encrypted, and point-in-time-recovery archives hold decrypted values, so protect the archive location. Because you run it in your own environment, compliance is scoped to your deployment — VeltrixDB itself holds no SOC 2 or ISO 27001 certification.helm install, bulk-load with veltrix-migrate (JSONL import/export) or batched MPUT, shadow-read traffic for a few days to validate, then flip the connection. The migration guide walks through dual writes, cutover, and rollback.--peers (New on main after v1.16 — ships in the next release: nodes are added and removed online with veltrix cluster add-node / remove-node or --join); on v1.14 and earlier keys then migrate to their new owners in the background (--auto-rebalance, on by default), and a node failure also triggers that migration, which can delete keys, so run clusters with --auto-rebalance=false. Fixed in v1.15: raft mode never migrates keys (every node applies the whole log), and replicated mode copies a key to its new replicas and deletes it from a node only after every replica acknowledged it. The Kubernetes operator — a separate repository — automates resharding when the replica count changes. Distributed searches ask every node, so their cost grows with the cluster. There are no plans or capacity tiers to upgrade — the open-source engine has no limits beyond your hardware.Every claim should have a benchmark, a paper, or a config file behind it. Go deep before you commit.
Hardware specs, workload generator config, percentile distributions, and what is — and isn't — reproducible.
Architecture deep-diveHow the value log, group-commit WAL, and LIRS cache keep background work off the read path.
Migration guideShadow reads, dual-write strategy, cutover checklist, and rollback plan.
Comparison guideStorage cost, durability, latency, and where Redis is still the better choice. With migration code.
One email. The full methodology, raw latency distributions, and the exact configuration, so you can rerun it on your own hardware.
VeltrixDB started the night a flash sale buried our Redis cluster under 8 GB of session state. The on-call channel filled with screenshots of P99 climbing past 400 ms. The bill that quarter was already 3× what we'd budgeted.
We tried every workaround you've tried — read replicas, write batching, a DynamoDB migration that ended with a quarter of unpredictable per-op billing. None of it solved the actual problem.
The real problem was structural: keep every value in RAM and the bill scales with your data; use an LSM tree and compaction rewrites your values over and over, taxing NVMe and tail latency exactly when you can least afford it.
So we built VeltrixDB the way we wished a database had been built when we were on call: key–value separation so values are written once, the index in DRAM and the values on NVMe, and open source on your own hardware so the bill never surprises you.
Now we ship it to teams who recognise their own war stories in ours.