Comparing Vector Databases on Kubernetes

Sergey Pronin Founder, Solanica Inc. · Maintainer, OpenEverest

Vectors: meaning as numbers

“puppy”

→ [0.12, −0.48, 0.91, …]

search by meaning,
not by keywords

Kubernetes is the default
for compute

70%

of organizations run stateful
workloads on Kubernetes

Every database is a
vector database now

PostgreSQL

MySQL

MariaDB

MongoDB

TiDB

Valkey

Redis

Cassandra

SQLite

ClickHouse

Oracle

SQL Server

Two ways to run vectors
on Kubernetes

General-purpose

vectors are a feature

pgvector
MariaDB
MongoDB
TiDB
Valkey

Dedicated

vectors are the product

Qdrant
Milvus
Weaviate
Chroma

HNSW: a map with highways

~1,000 of 10M vectors compared

10M vectors = 61 GB

before the HNSW graph

float32
61 GB halfvec
31 GB int8
15 GB 1-bit
1.9 GB

General-purpose

halfvec, bit

Dedicated

scalar, product, binary

To be fair: Tiger Data benchmarked 1-bit on both.

Scale up or scale out

General-purpose

1 × 512 GB

Dedicated

4 × 128 GB

Yes, but: Citus and TiDB shard too — as a whole SQL cluster.

Nearest neighbors + WHERE

General-purpose

10 → 0

filter after the search

Dedicated

10 → 10

filter during the search

Vector search eats CPU

General-purpose

OLTP vectors

Dedicated

OLTP
vectors

So… which one?

General-purpose

if vectors are a feature

under ~50M vectors
JOINs and transactions matter
one less database to run

Dedicated

if vectors are the product

100M+ vectors, scale-out
heavy filters, tight p99
isolated compute

What does production take?

Survive a pod loss

Scale out

Upgrade without downtime

Back up and restore

We tested it: 3–4 replicas · 100k vectors · 10 queries/s · Linode Kubernetes

Operator or Helm chart?

Milvus

Operator

maintained by Zilliz

Qdrant

Helm chart

official operator is Cloud-only

Weaviate

Helm chart

operator is WIP, no upgrade path

Chroma

Helm chart

single node only

Not in Qdrant's Helm chart

Production ready out of the box

Cloud only

Zero-downtime upgrades

Cloud only

Automatic shard rebalancing

Cloud only

Re-sharding

Cloud only

Full cluster backup and DR

Cloud only

No data loss on downscaling

Cloud only

Source: qdrant-helm README, chart 1.19.2

We tried to break all four

Milvus

Qdrant

Weaviate

Chroma

Kill a pod

●

●

●

○

Scale out

●

◐

◐

○

Upgrade under load

●

●

●

○

Backup and restore

◐

◐

●

○

● automatic    ◐ manual steps    ○ downtime or not possible

Add a node. Who moves the data?

Milvus

1
2
3
4

rebalanced itself in 40 s

Qdrant

1
2
3
4empty

move shards by hand

Weaviate

1
2
3
4empty

flag, restart, then by hand

Chroma: one pod, one outage

51 s

of failed queries on every
restart or upgrade

single node only
no auth since 1.0
no built-in backup

Milvus on

Built on the Milvus operator

every component in one view
pods and logs, no kubectl
scheduled backups to S3

OpenEverest: Milvus cluster overview OpenEverest: Milvus pods and logs OpenEverest: Milvus backups

Thank you

Try OpenEverest on your cluster

openeverest.io

Sergey Pronin · solanica.io