
“puppy”
→ [0.12, −0.48, 0.91, …]
search by meaning,
not by keywords
70%
of organizations run stateful
workloads on Kubernetes
PostgreSQL
MySQL
MariaDB
MongoDB
TiDB
Valkey
Redis
Cassandra
SQLite
ClickHouse
Oracle
SQL Server
General-purpose
vectors are a feature
pgvector
MariaDB
MongoDB
TiDB
Valkey
Dedicated
vectors are the product
Qdrant
Milvus
Weaviate
Chroma
~1,000 of 10M vectors compared
before the HNSW graph
General-purpose
halfvec, bit
Dedicated
scalar, product, binary
To be fair: Tiger Data benchmarked 1-bit on both.
General-purpose
1 × 512 GB
Dedicated
4 × 128 GB
Yes, but: Citus and TiDB shard too — as a whole SQL cluster.
General-purpose
10 → 0
filter after the search
Dedicated
10 → 10
filter during the search
General-purpose
Dedicated
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
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
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
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
Milvus
Qdrant
Weaviate
Chroma
Kill a pod
●
●
●
○
Scale out
●
◐
◐
○
Upgrade under load
●
●
●
○
Backup and restore
◐
◐
●
○
● automatic ◐ manual steps ○ downtime or not possible
Milvus
rebalanced itself in 40 s
Qdrant
move shards by hand
Weaviate
flag, restart, then by hand
51 s
of failed queries on every
restart or upgrade
single node only
no auth since 1.0
no built-in backup
Built on the Milvus operator
every component in one view
pods and logs, no kubectl
scheduled backups to S3
