Milvus vs Weaviate: an open-source vector database comparison
Milvus and Weaviate differ in architecture and operating model. Milvus persists data in object storage and scales query, ingest and indexing resources separately. Weaviate manages collection shards and replicas on its nodes, with vectorizer modules, GraphQL and native multi-tenancy. Both integrate with embedding providers and offer multiple index and compression choices. Choose by workload, existing APIs and operating experience.
- 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 Weaviate 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 each scale on separate node types. Tiered storage lets a node serve more data than fits in its memory and disk.
Weaviate splits collections into shards, with objects and indexes on node-local storage. Plan collection sharding ahead; MOVE/COPY APIs relocate or copy existing replicas after adding nodes. Capacity depends on the chosen index: HNSW memory depends on its vector cache and quantization, while HFresh provides a disk-backed path. One RAM multiplier does not describe all configurations.
| Capability | Milvus | Weaviate (self-hosted) |
|---|---|---|
| Architecture | Storage-compute separation: proxies, streaming, query and data nodes | Local objects and indexes; options include HNSW and disk-backed HFresh |
| Where data lives | Object storage (S3, MinIO, Azure Blob, GCS), including the WAL | LSM object store and inverted index on local disk; HNSW index in memory |
| Independent node scaling | Scale query, streaming and data nodes separately | Every node stores, indexes and serves its shards |
| Adding a node | Segments load from object storage | Existing shards stay where they are; move replicas via the API |
| Sharding and resharding | Shard count set at creation; segments spread across any number of query nodes | Plan collection sharding and default replication; v1.32+ MOVE/COPY manages individual shard replicas |
| Data larger than a node | Tiered storage pulls field data on demand | HFresh disk-backed index; inactive tenants on disk, offloaded tenants on S3 |
| Multi-tenancy at scale | Partition key for millions of tenants; database, collection or partition per tenant | Native multi-tenancy: tenant = shard; docs cite 1M active tenants on about 20 nodes |
Milvus vs Weaviate performance: which is faster?
These charts show the verified Milvus and Zilliz Cloud VectorDBBench configurations. They do not include a same-condition result for the other product, so they cannot establish a speed advantage. Benchmark with matching data, filters, recall targets and hardware before comparing.
- 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 freeWeaviate vs Milvus features: a vector database comparison table
Both engines cover dense, sparse and hybrid retrieval with metadata filtering. Weaviate's distinctive strengths are model integrations and native multi-tenancy; Milvus offers more index families across memory, disk and GPU, plus server-side BM25. Readers weighing Milvus vs Weaviate vs Qdrant for the best open source vector database can pair this table with our Qdrant comparison.
Does Milvus or Weaviate integrate better with LangChain or LlamaIndex? Both ship first-party LangChain, LlamaIndex and Haystack integrations, so the RAG framework rarely decides it; Dify defaults to Weaviate and also supports Milvus.
| Feature | Milvus | Weaviate |
|---|---|---|
| Dense vector index types | HNSW, IVF (FLAT, SQ8, PQ, RaBitQ), SCANN, DiskANN, GPU (CAGRA, IVF) | HNSW, flat, dynamic (flat to HNSW), HFresh disk-backed index |
| Quantization | SQ8, PQ, PRQ, RaBitQ; HNSW_SQ, HNSW_PQ, HNSW_PRQ | PQ, BQ, SQ, RQ (1-bit, 4-bit, 8-bit rotational quantization) |
| BM25 and full-text search | Built-in BM25 function turns raw text into sparse vectors on the server | BM25F keyword search over the inverted index, with tokenizer options and property boosts |
| Hybrid search | Multiple vector fields per query, fused with RRF or weighted ranker | Vector plus BM25 with an alpha weight; relativeScoreFusion (default) or rankedFusion |
| Multi-vector | Up to 10 vector fields by default; StructArray EmbeddingList search uses MAX_SIM* for entity-level late interaction | Named vectors; ColBERT-style multi-vector embeddings with optional MUVERA |
| Filtering | Scalar indexes (INVERTED, BITMAP, STL_SORT) and JSON path index, applied during ANN search | Pre-filter allow-list from the inverted index; ACORN strategy for HNSW |
| Multi-tenancy | Database, collection, partition or partition key | Native per-collection multi-tenancy; tenants active, inactive or offloaded to S3 |
| Embedding generation | Client side, or Milvus Function with external model providers | Vectorizer, generative and reranker modules for OpenAI, Cohere, Google, AWS, Ollama and more |
| APIs and query language | gRPC and RESTful | REST, gRPC and the GraphQL query language |
| Deployment options | Milvus Lite, Standalone, Distributed, Zilliz Cloud | Docker, Kubernetes (Helm), Embedded Weaviate, Weaviate Cloud (serverless or dedicated) |
| RAG framework integrations | LangChain, LlamaIndex, Haystack, Dify, DSPy, n8n and more | LangChain, LlamaIndex, Haystack, DSPy, Semantic Kernel, CrewAI and more; Dify's default store |
| License and language | Apache-2.0; Go and C++ | BSD-3-Clause core, with a commercially licensed wl/ directory; Go |
| SDK languages | Python, Java, Go, Node.js, C#, C++, Rust, RESTful | Python, TypeScript/JavaScript, Go, Java, C# |
| Community and governance | LF AI & Data graduated project; 40K+ GitHub stars | Weaviate B.V.; 15K+ GitHub stars |
Milvus vs Weaviate cost and operations: what does each take to run?
Evaluate compute, RAM, storage, networking and operations together. Weaviate offers different tradeoffs through HNSW, quantization, HFresh and tenant offloading; Milvus offers quantized HNSW, DiskANN and tiered storage. Compare at matching recall and latency targets rather than estimating from raw vector size alone. Neither requires Kubernetes to start.
| Topic | Milvus | Weaviate |
|---|---|---|
| Production without Kubernetes | Milvus Standalone: a single Docker image with the Woodpecker WAL embedded, up to 100 million vectors | Single node with Docker Compose; multi-node clusters via Helm |
| Dependencies | etcd and object storage (MinIO or S3); Woodpecker replaces Kafka or Pulsar | Single binary with embedded Raft; backup and offload modules target S3, GCS or Azure |
| What drives cost | RAM on query nodes; quantization, DiskANN and tiered storage trade it for disk and object storage | RAM for HNSW on every node; PQ, BQ, SQ or RQ quantization, HFresh and offloaded tenants reduce it |
| Security and backup | RBAC with privilege groups and TLS; milvus-backup to S3, GCS, Azure or local disk while the cluster stays online | RBAC with API-key or OIDC auth; backup-s3, backup-gcs, backup-azure and backup-filesystem modules |
When is Weaviate the better choice?
Choose by workload and operating model. Weaviate offers model integrations, native multi-tenancy and GraphQL; Milvus separates query, ingest and indexing resources. Compare recall, latency, throughput and operations on your own data rather than treating a corpus size as a hard product boundary.
- You want built-in vectorizer, generative and reranker modules instead of an embedding pipeline.
- Your application already speaks GraphQL, or you prefer Weaviate's object-centric data model.
- Data fits a small cluster whose shard count and replication factor you can size up front.
- Thousands of small tenants, each as its own shard, with cold tenants offloaded to S3.
- You run Weaviate Cloud and want serverless pricing with the same client API.
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?
- What is vector quantization, and what does it trade off?
- 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
Weaviate vs Milvus: which should I use?
Milvus and Weaviate differ in architecture and operating model. Milvus persists data in object storage and scales query, ingest and indexing resources separately. Weaviate manages collection shards and replicas on its nodes, with vectorizer modules, GraphQL and native multi-tenancy. Both integrate with embedding providers and offer multiple index and compression choices. Choose by workload, existing APIs and operating experience.
Which is faster, Milvus or Weaviate?
These charts show the verified Milvus and Zilliz Cloud VectorDBBench configurations. They do not include a same-condition result for the other product, so they cannot establish a speed advantage. Benchmark with matching data, filters, recall targets and hardware before comparing.
Which scales better, Weaviate or Milvus?
Weaviate splits collections into shards, with objects and indexes on node-local storage. Plan collection sharding ahead; MOVE/COPY APIs relocate or copy existing replicas after adding nodes. Capacity depends on the chosen index: HNSW memory depends on its vector cache and quantization, while HFresh provides a disk-backed path. One RAM multiplier does not describe all configurations.
Is Weaviate open source?
Yes. The Weaviate open source license is BSD-3-Clause for the core repository, with a separate commercially licensed wl/ directory. Milvus is Apache-2.0 and an LF AI & Data graduated project. Both can be self-hosted, and each has a managed service: Weaviate Cloud and Zilliz Cloud.
Does Weaviate support hybrid search?
Yes. Weaviate hybrid search combines a BM25F keyword query with a vector query, weighted by alpha and fused with relativeScoreFusion or rankedFusion. Milvus runs hybrid search across several vector fields, including BM25 sparse vectors generated on the server, fused with RRF or a weighted ranker.
Can I run Milvus without Kubernetes in production?
Yes. Milvus Standalone packs every component into a single Docker image with the Woodpecker WAL embedded and is documented up to 100 million vectors; Milvus Lite is a Python library for a few million. Kubernetes, via Helm or the Milvus Operator, is for Milvus Distributed.
Is switching from Weaviate to Milvus a drop-in migration?
No. A Weaviate collection maps to a Milvus collection with scalar fields, and named vectors to multiple vector fields. Export objects with their vectors, bulk-insert into Milvus, build indexes, and rewrite hybrid queries from alpha fusion to RRF or a weighted ranker.
What is the difference between Milvus and Zilliz Cloud?
Zilliz Cloud is fully managed Milvus from the team that created it. It uses the same client APIs, so code written against Milvus Lite or Standalone moves to Zilliz Cloud without a rewrite.
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 (58)
- 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/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/multi_tenancy.md
- https://github.com/weaviate/weaviate
- https://github.com/weaviate/weaviate/blob/main/LICENSE
- https://docs.weaviate.io/weaviate/concepts/cluster
- https://docs.weaviate.io/weaviate/concepts/replication-architecture/cluster-architecture
- https://docs.weaviate.io/weaviate/concepts/replication-architecture
- https://docs.weaviate.io/weaviate/concepts/storage
- https://docs.weaviate.io/weaviate/config-refs/collections
- https://docs.weaviate.io/weaviate/concepts/vector-index
- https://docs.weaviate.io/weaviate/concepts/vector-quantization
- https://docs.weaviate.io/weaviate/search/hybrid
- https://docs.weaviate.io/weaviate/search/bm25
- https://docs.weaviate.io/weaviate/concepts/data
- https://docs.weaviate.io/weaviate/manage-collections/multi-tenancy
- https://docs.weaviate.io/weaviate/starter-guides/managing-resources/tenant-states
- https://docs.weaviate.io/weaviate/model-providers
- https://docs.weaviate.io/weaviate/concepts/filtering
- https://docs.weaviate.io/deploy
- https://weaviate.io/deployment
- https://docs.weaviate.io/weaviate/client-libraries
- https://docs.weaviate.io/weaviate/api
- https://docs.weaviate.io/weaviate/concepts/resources
- 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/results/leaderboard.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/WeaviateCloud/result_20230727_standard_weaviatecloud.json
- 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/upsert-entities.md
- https://github.com/zilliztech/milvus-backup
- https://lfaidata.foundation/projects/
- https://docs.weaviate.io/weaviate/configuration/rbac
- https://docs.weaviate.io/deploy/configuration/backups
- https://weaviate.io/product/integrations
- https://github.com/langgenius/dify/blob/main/docker/.env.example
- https://docs.weaviate.io/deploy/configuration/replica-movement
- https://milvus.io/docs/search-with-embedding-lists.md
- https://milvus.io/docs/index-structarray-fields.md