Vector Database Benchmarks: Qdrant vs Milvus vs Weaviate vs LanceDB
Vector Database Benchmarks: Qdrant vs Milvus vs Weaviate vs LanceDB
Picking a vector database used to be easy because there were three options. Now there are dozens, and the open-source short list alone is large enough that most teams pick on vibes and regret it later. This post is the article I wish I had a year ago: a side-by-side comparison of Qdrant, Milvus, Weaviate, and LanceDB, grounded in what their own documentation says they do.
A note up front: I am deliberately staying away from absolute QPS numbers. Every project publishes its own benchmarks, every benchmark is fragile, and quoting numbers out of context tends to mislead. Where qualitative claims come straight from the project README, that is what I am drawing on.
Storage model
The four projects sit at different points on the embedded-to-distributed spectrum.
- LanceDB is built on the Lance columnar format. It is happy as an embedded library inside your Python or TypeScript process, and it can also run as a managed cloud service. The same files work for analytics and for vector search, which is a notable property if you already have a data lake.
- Qdrant is a server. It supports on-disk storage with write-ahead logging, in-memory mode, and vector quantization to compress vectors. It is written in Rust and uses io_uring for async I/O.
- Milvus is the most ambitious of the four on the distributed front. It uses a Kubernetes-native architecture that separates compute from storage, so you can scale query nodes and data nodes independently. That power comes with operational complexity: a single-node mode exists, but the project really shines when you run it at scale.
- Weaviate runs as a server with both single-node and clustered modes, and supports horizontal scaling, multi-tenancy, and replication.
If your dataset fits on one machine and you want minimum operational overhead, LanceDB is unusually attractive because it can live as a library. If you need a real cluster with billions of vectors, Milvus is built for that. Qdrant and Weaviate sit in the middle, scaling out when you need it but happy on a single node.
Filtering and hybrid search
Hybrid search, the mix of keyword-style and vector-style retrieval, is now table stakes. All four support it, but the shape differs.
- Qdrant supports sparse vectors alongside dense vectors and treats sparse retrieval as a generalization of BM25 or TF-IDF. It also supports keyword matching, full-text filtering, numerical ranges, geo filters, and complex boolean combinations.
- Milvus supports dense vector search, full-text search via BM25, and sparse embeddings such as SPLADE and BGE-M3 in the same collection. It also offers a wide menu of index types: HNSW, IVF, FLAT, SCANN, and DiskANN with quantization variants.
- Weaviate supports semantic vector search, BM25 keyword filtering, hybrid search, and image search. It also bundles generative search and reranking modules.
- LanceDB supports vector similarity search, full-text search, and SQL-style querying side by side, with the columnar storage format making mixed workloads a natural fit.
If you have heavily technical content full of acronyms and exact strings, you will want hybrid search from day one. All four can do it, but Milvus and Qdrant currently expose the most tuning knobs for sparse and dense interaction.
Scaling story
This is the dimension where the differences are clearest.
- Milvus is the most scale-out friendly of the four. Independent scaling of query and data nodes, GPU acceleration through NVIDIA CAGRA, and multi-tenancy from database to partition-key level make it a natural choice for very large clusters and many tenants. The trade-off is operational weight.
- Qdrant supports horizontal scaling through sharding and replication, plus zero-downtime rolling updates. It tends to feel lighter to run than Milvus while still scaling further than a single box.
- Weaviate supports horizontal scaling, multi-tenancy, and replication, and its enterprise features include RBAC and TTLs.
- LanceDB scales differently. The library mode keeps things simple, and the managed offering handles scale for you. The open-source claim is searching billions of vectors quickly on the columnar format.
Language SDKs
If your stack is Python only, all four work. If it is not, the picture matters.
- Qdrant: Python, JavaScript and TypeScript, Go, Rust, dotnet, Java, plus community clients for Elixir, PHP, and Ruby.
- Milvus: PyMilvus is the most polished, with other ecosystem clients available.
- Weaviate: Python, JavaScript and TypeScript, Java, Go, dotnet, plus REST, gRPC, and GraphQL APIs.
- LanceDB: Python, TypeScript, Rust, plus REST.
If you need a strongly typed Rust client, Qdrant and LanceDB both have first-class support. If GraphQL is your team's preferred query interface, Weaviate is the obvious pick.
License and operational story
Licenses to know:
- Qdrant: Apache 2.0
- Milvus: Apache 2.0
- Weaviate: BSD 3-Clause
- LanceDB: Apache 2.0
All four are open-source friendly. None of them have the kind of license that should worry a commercial product team. Each project also offers a managed cloud option if you do not want to operate the database yourself, and our best AI database tools post covers the wider managed and open-source landscape.
How to choose
A short cheat sheet:
- You want one binary, simple ops, hybrid search, Rust performance: Qdrant.
- You want a Kubernetes-native distributed system that scales to billions of vectors: Milvus.
- You want batteries-included modules for vectorization, rerank, generative search, plus GraphQL: Weaviate.
- You want an embedded library that lives inside your Python or TS process and shares storage with your data lake: LanceDB.
The fastest way to learn which one fits your workload is to spend a day prototyping against each. Their READMEs are linked from each project: Qdrant, Milvus, Weaviate, and LanceDB.
Tools mentioned in this post
- Qdrant: Rust-based open-source vector database with hybrid search and quantization.
- Milvus: cloud-native distributed vector database with broad index support.
- Weaviate: open-source vector database with generative search and rerank modules.
- LanceDB: embedded multimodal vector database built on the Lance columnar format.
Related Tools
More Articles
RAG Is Dead, Long Live RAG: Where Retrieval Is Going
The 'RAG is dead' meme misses what is actually happening. Hybrid retrieval, late-interaction models, agentic retrieval, and contextual chunking are quietly reshaping the field.
Building a Private RAG Stack with Ollama, Qdrant, and AnythingLLM
An end-to-end blueprint for a fully self-hosted RAG system using Ollama for inference, Qdrant for the vector store, and AnythingLLM for ingestion and chat.