Milvus vs Vespa: an open-source vector database comparison
Milvus vs Vespa is a comparison of two different kinds of system: Milvus is a vector database built on storage-compute separation, while Vespa, open-sourced by Yahoo, is a full search and serving engine whose content nodes keep data, indexes and ranking on local disk and memory. Milvus adds a stateless node and loads segments from object storage; Vespa adds a content node and redistributes buckets, which its docs say can take hours. Choose Milvus for elastic billion-scale vector search with simple operations; choose Vespa when multi-phase ranking with ML models in the serving path is the core of the product.
- Apache-2.0, 40K+ GitHub stars
- Scales to tens of billions of vectors
- Storage and compute separated
- Multi-tenant vector database: partition key for millions of tenants
- Salesforce
- Walmart
- NVIDIA
- eBay
- IBM
- Cisco
- Roblox
- Exa.ai
- OpenEvidence
- Read.ai
- Plaud
- Filevine
Milvus vs Vespa scalability: how does each grow to billions of vectors?
Milvus is built on storage-compute separation. Segments and the write-ahead log live in object storage, so a new query node loads its assigned segments instead of copying another node's disk, and ingestion, search and indexing scale on separate node types. Tiered storage lets a query node serve datasets larger than its memory and disk by pulling field data on demand.
Vespa scalability follows the classic search-engine model: stateless container clusters handle queries, stateful content clusters store data and indexes, and a config-server cluster backed by ZooKeeper, typically three nodes, holds the deployment. Each content node runs proton, which keeps the document store on local disk and attributes and HNSW graphs in memory. Adding a content node triggers automatic bucket redistribution; Vespa's docs note this can take hours and raises load on the node meanwhile.
| Capability | Milvus | Vespa (self-managed) |
|---|---|---|
| Architecture | Storage-compute separation: proxies, streaming, query and data nodes | Stateless container nodes, stateful content nodes, config servers with ZooKeeper |
| Where data lives | Object storage (S3, MinIO, Azure Blob, GCS), including the WAL | Local disk and memory on each content node (document store, attributes, index) |
| Adding capacity | Add a query node; it loads segments from object storage | Add a content node to services.xml and redeploy; buckets redistribute automatically |
| Independent scaling | Query, streaming and data nodes scale separately | Container and content clusters scale separately; content nodes carry data and ranking |
| Data larger than memory | Tiered storage pulls field data on demand | Tensor fields and HNSW graphs are in-memory data structures |
| Multi-tenancy at scale | Partition key for millions of tenants; database, collection or partition per tenant | Streaming search mode for many small personal indexes, grouped by document ID |
| Real-time indexing and updates | Writes land in the streaming WAL and are searchable at once, with Strong, Bounded, Session or Eventually consistency per request; upsert and partial field updates by primary key | Visible in search indexes right after a successful response; partial updates by document ID |
Milvus vs Vespa performance: which is faster?
VectorDBBench, the open-source benchmark behind the public leaderboard, has a Vespa client, but no Vespa result is published on the leaderboard, so this page shows only the Milvus and Zilliz Cloud rows. Vespa's blog cites a Marqo internal benchmark at 50 million vectors without hardware, index, version or method, so it is not charted. For a Milvus vs Vespa performance number on your own data, run VectorDBBench against both on the same dataset and hardware.
- Zilliz CloudZillizCloud-8cu-perf13,316.23 QPSP99 2 ms · recall 0.9383
- MilvusMilvus-16c64g-sq4u-fp16-force_merge9,575.69 QPSP99 2.3 ms · recall 0.9189
- Zilliz CloudZillizCloud-8cu-perf-partition_key10,020.53 QPSP99 2.6 ms · recall 0.9788
- MilvusMilvus-16c64g-sq8-partition_key11,280.08 QPSP99 1.6 ms · recall 0.9507
Zilliz Cloud is fully managed Milvus: the same engine and top-tier throughput, with no clusters to size, upgrade or scale.
Try Zilliz Cloud freeVespa vs Milvus features: a vector database comparison table
Vespa is a search engine first: one HNSW implementation plus exact search, a deep ranking stack and a tensor framework that holds many vectors per document. Milvus is a vector database first: many index families, server-side BM25 for hybrid search, StructArray fields for ColBERT late interaction, and rerank functions that run inside the database.
| Feature | Milvus | Vespa |
|---|---|---|
| Dense vector index types | HNSW, IVF (FLAT, SQ8, PQ, RaBitQ), SCANN, DiskANN, GPU (CAGRA, IVF, brute force) | HNSW (modified) or exact nearestNeighbor |
| Quantization | SQ8, PQ, PRQ, RaBitQ; HNSW_SQ, HNSW_PQ, HNSW_PRQ; FP16, BF16 and INT8 vectors | bfloat16 and int8 tensor cells; binarized vectors with hamming distance |
| GPU | GPU index build and search (CAGRA, GPU IVF, brute force) | GPU for ONNX model inference in global-phase ranking |
| Sparse vectors and BM25 | SPARSE_INVERTED_INDEX; built-in BM25 function turns raw text into sparse vectors on the server | Text index with bm25 and nativeRank rank features |
| Hybrid search | Multiple vector fields per query, fused with RRF or weighted ranker | nearestNeighbor and text operators in one query; reciprocal_rank_fusion in global-phase |
| Multi-vector per document | Up to 10 vector fields; StructArray EmbeddingList fields scored with MAX_SIM for ColBERT and ColPali | Mixed tensors hold any number of vectors per field under one HNSW index, matched by the closest vector; colbert-embedder, splade-embedder |
| Reranking | Decay, boost and model rerank functions (vLLM, TEI, Cohere, Voyage AI and more) | Rank profiles with first-phase, second-phase and global-phase expressions; ONNX models up to 2 GB |
| Filtering | Scalar and JSON path indexes (INVERTED, BITMAP, STL_SORT); filtered search in one call | Attribute fast-search filters with pre- or post-filtering around HNSW |
| Multi-tenancy | Database, collection, partition or partition key | Document groups with streaming search; indexed and streaming modes should not share a cluster |
| Deployment options | Milvus Lite, Standalone, Distributed, Zilliz Cloud | Self-managed multinode (Docker, Kubernetes), Vespa Cloud on AWS, Azure and GCP |
| RAG framework integrations | LangChain, LlamaIndex, Haystack, Dify, DSPy, n8n and more | LangChain VespaRetriever, LlamaIndex VespaVectorStore, pyvespa |
| License and language | Apache-2.0; Go and C++ | Apache-2.0; C++ and Java |
| SDK languages | Python, Java, Go, Node.js, C#, C++, Rust, RESTful | pyvespa, Vespa CLI, Java feed client, HTTP document and query APIs |
| Community and heritage | LF AI & Data graduated project; 40K+ GitHub stars | Open-sourced by Yahoo in 2017, independent Vespa.ai since 2023; 5K+ GitHub stars |
Milvus vs Vespa cost and operations: what does each take to run?
Cost in both systems is memory on the nodes that serve the index, plus, in Vespa, the CPU that evaluates rank profiles and ONNX models at query time. Milvus trims memory with quantized HNSW, DiskANN and tiered storage; Vespa sizes content nodes for attributes and HNSW graphs in RAM. Neither needs Kubernetes to start.
| Topic | Milvus | Vespa |
|---|---|---|
| Production without Kubernetes | Milvus Standalone: a single Docker image with the Woodpecker WAL embedded, up to 100 million vectors | Self-managed multinode on VMs or Docker: config servers, container and content clusters |
| Dependencies | etcd and object storage (MinIO or S3); Woodpecker replaces Kafka or Pulsar; Helm or Milvus Operator on Kubernetes | ZooKeeper inside the three-node config server cluster; Kubernetes guide for self-managed clusters |
When is Vespa the better choice?
Vespa is a mature engine with a ranking stack few systems match. Teams looking for Vespa alternatives usually want elastic scaling and simpler operations; if ranking logic is the product, Vespa's design is an advantage.
- Relevance needs multi-phase ranking with learned models (ONNX, XGBoost) evaluated on the serving path.
- The application is text-heavy search with structured fields, grouping and rank expressions in one schema.
- Your team already runs Vespa and knows application packages, services.xml and content clusters.
- You want personal-index search over many small user corpora via streaming mode.
- You prefer Vespa Cloud and its managed deployment pipeline for the whole search application.
Which AI companies and enterprises run Milvus in production?
Milvus and Zilliz Cloud (managed Milvus) run in AI-native companies and large enterprises alike. The milvus.io adopter wall includes Salesforce, Walmart, NVIDIA, eBay, IBM, Cisco, Roblox and Reddit, alongside Exa.ai, OpenEvidence, Read.ai, Notta.ai, Plaud and Filevine. Published results:
- OpenEvidence: under 10 ms search latency and 4,000 QPS at peak on Zilliz Cloud.
- Plaud: 10B+ vector chunks per region with under 200 ms average recall latency.
- Exa: neural search latency cut from seconds to under 200 ms with hybrid search.
- Airtable: self-hosts Milvus on Kubernetes with the Milvus Operator for semantic search.
Customer stories
Filevine
30 billion vectors managed across millions of legal documents on Zilliz Cloud.
Read the storyMeituan
10B+ vectors in production on self-run Milvus, with 2B+ in a single collection.
Read the storyRead AI
20–50 ms retrieval latency on Milvus for millions of monthly users and million-scale active tenants.
Read the storyExplore the concepts
- What determines vector-database scalability?
- How do sharding and replication differ in a vector database?
- How do you choose a vector index for your workload?
- When should you use DISKANN in Milvus?
- What is hybrid search, and when should you use it?
- How should you design multi-tenancy for vector search?
- How should you benchmark vector search performance?
Frequently asked questions
Which is faster, Milvus or Vespa?
No published VectorDBBench result exists for Vespa. On Cohere 1M, Milvus-16c64g-sq4u-fp16-force_merge lists 9,575.69 QPS at P99 2.3 ms and ZillizCloud-8cu-perf 13,316.23 QPS at P99 2 ms. VectorDBBench ships a Vespa client for the same test.
Is Vespa a vector database?
Vespa describes itself as a serving engine that stores, computes and ranks big data at serving time, with vector search via HNSW and exact nearestNeighbor. Milvus is a purpose-built vector database with storage-compute separation.
Is Vespa better than Elasticsearch?
Both are search engines with text, structured and vector retrieval on local-disk shards; Vespa adds phased ranking with ONNX models. Milvus is the vector-first alternative to either: object-storage segments, more index types and server-side BM25. See Milvus vs Elasticsearch.
Can Vespa be used for RAG?
Yes. Vespa offers LangChain and LlamaIndex integrations and in-engine embedders, including ColBERT and SPLADE. Milvus integrates with LangChain, LlamaIndex, Haystack and Dify, and fuses server-side BM25 sparse vectors with dense results for RAG retrieval.
Can Vespa scale to billions of vectors?
Vespa scales by adding content nodes, with buckets redistributed automatically, which its docs say can take hours; tensor fields and HNSW graphs are in-memory per content node. Milvus Distributed is documented for tens of billions of vectors on object storage.
Does Milvus support multiple vectors per document like Vespa?
Yes. A collection holds up to 10 vector fields by default, and StructArray fields store a list of vectors per entity that EmbeddingList search scores with MAX_SIM for ColBERT and ColPali. Vespa stores the same thing as a mixed tensor matched by its closest vector.
Is Milvus easier to operate than Vespa?
Milvus Lite runs inside pymilvus, Standalone is one Docker image for up to about 100 million vectors, and Distributed runs on Kubernetes. Self-managed Vespa needs a config-server quorum, container and content clusters, and an application package for every schema change.
Is Vespa open source?
Yes. Vespa and Milvus are both Apache-2.0 and self-hostable; Vespa was open-sourced by Yahoo in 2017, Milvus is an LF AI & Data graduated project. Each has a managed service: Vespa Cloud, and Zilliz Cloud, the fully managed Milvus with the same client API.
Prefer not to run a cluster?
Zilliz Cloud is fully managed Milvus from the team that created it, with the same MilvusClient API you use locally. Start on open-source Milvus and move to the managed service without rewriting your application.
Sources and technical documentation (61)
- https://milvus.io
- https://github.com/milvus-io/milvus
- https://milvus.io/docs/architecture_overview.md
- https://milvus.io/docs/install-overview.md
- https://milvus.io/docs/scaleout.md
- https://milvus.io/docs/tiered-storage-overview.md
- https://milvus.io/docs/index-explained.md
- https://milvus.io/docs/full-text-search.md
- https://milvus.io/docs/multi-vector-search.md
- https://milvus.io/docs/decay-ranker-overview.md
- https://milvus.io/docs/model-ranker-overview.md
- https://milvus.io/docs/multi_tenancy.md
- https://github.com/vespa-engine/vespa
- https://docs.vespa.ai/en/overview.html
- https://docs.vespa.ai/en/elasticity.html
- https://docs.vespa.ai/en/proton.html
- https://docs.vespa.ai/en/schemas.html
- https://docs.vespa.ai/en/querying/nearest-neighbor-search.html
- https://docs.vespa.ai/en/querying/approximate-nn-hnsw.html
- https://docs.vespa.ai/en/reference/ranking/tensor.html
- https://docs.vespa.ai/en/rag/binarizing-vectors.html
- https://docs.vespa.ai/en/reference/bm25.html
- https://docs.vespa.ai/en/phased-ranking.html
- https://docs.vespa.ai/en/ranking/onnx.html
- https://docs.vespa.ai/en/streaming-search.html
- https://docs.vespa.ai/en/operations/self-managed/multinode-systems.html
- https://docs.vespa.ai/en/operations/kubernetes/vespa-on-kubernetes.html
- https://docs.vespa.ai/en/vespa-cli.html
- https://vespa-engine.github.io/pyvespa/
- https://cloud.vespa.ai/
- https://zilliz.com/vdbbench-leaderboard
- https://github.com/zilliztech/VectorDBBench
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/leaderboard_v2.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/backend/clients/vespa/vespa.py
- https://zilliz.com/customers/filevine
- https://zilliz.com/customers/openevidence
- https://zilliz.com/customers/exa
- https://zilliz.com/customers/airtable
- https://zilliz.com/customers/plaud
- https://zilliz.com/customers/read-ai
- https://zilliz.com/customers/meituan
- https://milvus.io/docs/quickstart.md
- https://milvus.io/docs/rbac.md
- https://milvus.io/docs/integrations_overview.md
- https://milvus.io/docs/woodpecker_architecture.md
- https://milvus.io/docs/install_cluster-helm.md
- https://milvus.io/docs/install_cluster-milvusoperator.md
- https://milvus.io/docs/consistency.md
- https://milvus.io/docs/upsert-entities.md
- https://milvus.io/docs/array-of-structs.md
- https://milvus.io/docs/search-with-embedding-lists.md
- https://github.com/zilliztech/milvus-backup
- https://lfaidata.foundation/projects/
- https://docs.vespa.ai/en/reads-and-writes.html
- https://docs.vespa.ai/en/content/consistency.html
- https://docs.vespa.ai/en/embedding.html
- https://docs.vespa.ai/en/vespa-quick-start.html
- https://python.langchain.com/docs/integrations/retrievers/vespa/
- https://docs.llamaindex.ai/en/stable/api_reference/storage/vector_store/vespa/
- https://www.yahooinc.com/press/yahoo-spins-out-vespa-its-enterprise-ai-scaling-engine-as-an-independent-company
- https://blog.vespa.ai/marqo-chooses-vespa/