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
Milvus scales each node type on shared object storage; Vespa content nodes own their buckets on local disk and redistribute them when the cluster changes.
Milvus scales each node type on shared object storage; Vespa content nodes own their buckets on local disk and redistribute them when the cluster changes.
Milvus and Zilliz Cloud adopters
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • 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.

Tens of billionsvectors supported by Milvus DistributedView source
Millionstenants per collection with partition keyView source
40K+GitHub stars, milvus-io/milvusView source
Vespa scalability vs Milvus for billion-scale vector search, per each project's documentation
CapabilityMilvusVespa (self-managed)
ArchitectureStorage-compute separation: proxies, streaming, query and data nodesStateless container nodes, stateful content nodes, config servers with ZooKeeper
Where data livesObject storage (S3, MinIO, Azure Blob, GCS), including the WALLocal disk and memory on each content node (document store, attributes, index)
Adding capacityAdd a query node; it loads segments from object storageAdd a content node to services.xml and redeploy; buckets redistribute automatically
Independent scalingQuery, streaming and data nodes scale separatelyContainer and content clusters scale separately; content nodes carry data and ranking
Data larger than memoryTiered storage pulls field data on demandTensor fields and HNSW graphs are in-memory data structures
Multi-tenancy at scalePartition key for millions of tenants; database, collection or partition per tenantStreaming search mode for many small personal indexes, grouped by document ID
Real-time indexing and updatesWrites 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 keyVisible 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.

Vector search throughput (QPS, higher is better)Cohere 1M, 768 dimensions
  • 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

Source: VectorDBBench, configuration labels as published. Results depend on configuration; benchmark on your own data.

Filtered search throughput (QPS, filter keeps 1% of data)Cohere 1M, 768 dimensions, filter ratio 0.99
  • 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

VectorDBBench leaderboard (zilliz.com/vdbbench-leaderboard), labels as published. No Vespa result is published; the VectorDBBench repo includes a Vespa client (pyvespa, HNSW) so you can run it yourself. Results depend on configuration.

Zilliz Cloud is fully managed Milvus: the same engine and top-tier throughput, with no clusters to size, upgrade or scale.

Try Zilliz Cloud free

Vespa 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 comparison: index types, GPU, multi-vector tensors, hybrid search BM25, ranking, filtering, multi-tenancy, deployment, RAG frameworks, license and community
FeatureMilvusVespa
Dense vector index typesHNSW, IVF (FLAT, SQ8, PQ, RaBitQ), SCANN, DiskANN, GPU (CAGRA, IVF, brute force)HNSW (modified) or exact nearestNeighbor
QuantizationSQ8, PQ, PRQ, RaBitQ; HNSW_SQ, HNSW_PQ, HNSW_PRQ; FP16, BF16 and INT8 vectorsbfloat16 and int8 tensor cells; binarized vectors with hamming distance
GPUGPU index build and search (CAGRA, GPU IVF, brute force)GPU for ONNX model inference in global-phase ranking
Sparse vectors and BM25SPARSE_INVERTED_INDEX; built-in BM25 function turns raw text into sparse vectors on the serverText index with bm25 and nativeRank rank features
Hybrid searchMultiple vector fields per query, fused with RRF or weighted rankernearestNeighbor and text operators in one query; reciprocal_rank_fusion in global-phase
Multi-vector per documentUp to 10 vector fields; StructArray EmbeddingList fields scored with MAX_SIM for ColBERT and ColPaliMixed tensors hold any number of vectors per field under one HNSW index, matched by the closest vector; colbert-embedder, splade-embedder
RerankingDecay, 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
FilteringScalar and JSON path indexes (INVERTED, BITMAP, STL_SORT); filtered search in one callAttribute fast-search filters with pre- or post-filtering around HNSW
Multi-tenancyDatabase, collection, partition or partition keyDocument groups with streaming search; indexed and streaming modes should not share a cluster
Deployment optionsMilvus Lite, Standalone, Distributed, Zilliz CloudSelf-managed multinode (Docker, Kubernetes), Vespa Cloud on AWS, Azure and GCP
RAG framework integrationsLangChain, LlamaIndex, Haystack, Dify, DSPy, n8n and moreLangChain VespaRetriever, LlamaIndex VespaVectorStore, pyvespa
License and languageApache-2.0; Go and C++Apache-2.0; C++ and Java
SDK languagesPython, Java, Go, Node.js, C#, C++, Rust, RESTfulpyvespa, Vespa CLI, Java feed client, HTTP document and query APIs
Community and heritageLF AI & Data graduated project; 40K+ GitHub starsOpen-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.

Milvus vs Vespa cost and operations: Kubernetes, dependencies and cost drivers
TopicMilvusVespa
Production without KubernetesMilvus Standalone: a single Docker image with the Woodpecker WAL embedded, up to 100 million vectorsSelf-managed multinode on VMs or Docker: config servers, container and content clusters
Dependenciesetcd and object storage (MinIO or S3); Woodpecker replaces Kafka or Pulsar; Helm or Milvus Operator on KubernetesZooKeeper 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.

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)