Reproducible, single-host benchmark behind the ComputingForGeeks article Qdrant vs Weaviate vs Milvus vs pgvector Benchmarked.
One dataset, matched HNSW parameters, the same query set against every engine. Every number in the article is produced by this code. No hand-typed figures.
- Dataset:
glove-100-angular(~1.18M vectors, 100 dims, cosine), with the 10k-query test set and 100-NN ground truth shipped by ann-benchmarks. Cosine distance is what real RAG embeddings use. - Index: HNSW everywhere,
m=16,ef_construction=200. - Query: top-10, single client, sequential, over all 10k queries after a
100-query warmup.
ef_searchswept over{32, 64, 128, 256}. - Measured: ingest time, index-build time, recall@10, latency p50/p95/mean, peak container RAM, on-disk size.
- Engines run one at a time on the same box so RAM and disk are clean.
sudo bash setup.sh # docker + python venv + clients + dataset
sudo bash run.sh # all four engines, or: sudo bash run.sh qdrant
cat results.csvTested on Ubuntu 24.04, 8 vCPU / 16 GB RAM.
setup.shâ installs Docker, a Python venv with each client, downloads the dataset.run.shâ starts each engine (bind-mounted data dir), runs the bench, samples RAM, measures disk.bench.pyâ ingest + index + query + recall for each engine.milvus-compose.ymlâ Milvus standalone (etcd + minio + milvus).results.csvâ the numbers.
Captured at run time from each server (see results.csv server_version column).