Milvus vs Qdrant: an open-source vector database comparison

Milvus vs Qdrant comes down to architecture: both are Apache-2.0 open-source vector databases, but Milvus separates storage from compute. Data lives in object storage, and query, ingest and index nodes scale independently to tens of billions of vectors. Qdrant runs peer nodes that keep shards on local disk, which is simpler to operate. Choose Milvus when independent scaling and index choice matter; evaluate Qdrant when you prefer peer-based deployment and its payload-filtering model.

  • 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; Qdrant peers keep shards on local disk and move them when nodes change.
Milvus scales each node type on shared object storage; Qdrant peers keep shards on local disk and move them when nodes change.
Milvus and Zilliz Cloud adopters
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

Milvus vs Qdrant 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.

Qdrant scalability follows a shared-nothing model: each peer stores, indexes, and serves its own shards. Qdrant's docs say self-hosted shard count cannot change without recreating the collection, new nodes start empty, and automatic rebalancing and resharding are Qdrant Cloud features; they suggest 12 shards as a common starting point.

Tens of billionsvectors supported by Milvus DistributedView source
Millionstenants per collection with partition keyView source
40K+GitHub stars, milvus-io/milvusView source
Scalability for billion-scale vector search and multi-tenancy, per each project's documentation
CapabilityMilvusQdrant (self-hosted)
ArchitectureStorage-compute separation: proxies, streaming, query, and data nodesPeer nodes; Raft keeps cluster topology and collection metadata
Where data livesObject storage (S3, MinIO, Azure Blob, GCS), including the WALLocal mmap files on each node
Independent node scalingScale query, streaming, and data nodes separatelyEvery node stores, indexes, and serves its shards
Adding a nodeSegments load from object storageStarts empty until shards are moved
Sharding and reshardingShard count set at creation; segments spread across any number of query nodesShard count fixed without recreating; resharding in Qdrant Cloud only
Data larger than a nodeTiered storage pulls field data on demandCached or cold tiers on local disk
Multi-tenancy at scalePartition key for millions of tenants; database, collection, or partition per tenantis_tenant payload index; tiered multitenancy promotes large tenants to dedicated shards

Milvus vs Qdrant performance: which is faster?

The Milvus vs Qdrant benchmark numbers below come from the VectorDBBench leaderboard: Zilliz Cloud and self-hosted Milvus deliver several times the QPS of Qdrant Cloud at lower P99 latency, in both plain vector search and filtered search.

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
  • Qdrant CloudQdrantCloud-16c64g1,242.43 QPSP99 6.4 ms · recall 0.9474

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
  • Qdrant CloudQdrantCloud-16c64g-payload-index1,494.53 QPSP99 7.0 ms · recall 1.0

VectorDBBench leaderboard (zilliz.com/vdbbench-leaderboard), labels as published. Results depend on configuration; run VectorDBBench on your own data.

Qdrant vs Milvus features: a vector database comparison table

Both engines cover the core of modern retrieval. The difference is breadth: Milvus offers more index families for cost and hardware targets, and a server-side BM25 function for full-text search.

Feature comparison: index types, quantization, hybrid search, filter execution, integrations, deployment and SDKs
FeatureMilvusQdrant
Dense vector index typesHNSW, IVF (FLAT, SQ8, PQ, RaBitQ), SCANN, DiskANN, GPU (CAGRA, IVF)HNSW
QuantizationSQ8, PQ, PRQ, RaBitQ; HNSW_SQ, HNSW_PQ, HNSW_PRQScalar, binary (1, 1.5, 2-bit), product, asymmetric
Sparse vectorsSPARSE_INVERTED_INDEXSparse vectors with an inverted index
BM25 and full-text searchBuilt-in BM25 function turns raw text into sparse vectors on the serverFull-text payload index; BM25 via the qdrant/bm25 model or FastEmbed, with IDF modifier
Hybrid searchMultiple vector fields per query, fused with RRF or weighted rankerQuery API prefetch with RRF or DBSF fusion
Multi-vectorUp to 10 vector fields per collection by defaultNamed vectors; multivectors with MAX_SIM
JSON / payload filtering and indexesJSON field with JSON path index; INVERTED, BITMAP, STL_SORT scalar indexesKeyword, integer, float, bool, geo, datetime, uuid, text indexes; filterable HNSW
Filter executionScalar filter first, then ANN search inside the matches; iterative_filter hint for complex expressionsFilterable HNSW with payload indexes
Multi-tenancyDatabase, collection, partition, or partition keyPayload is_tenant index, custom shard keys, tiered multitenancy
Deployment optionsMilvus Lite, Standalone, Distributed, Zilliz CloudLocal mode, single node (Docker), cluster, Qdrant Cloud, Hybrid Cloud, Private Cloud
License and communityApache-2.0; Go and C++ (Knowhere engine); LF AI & Data graduate; 40K+ GitHub starsApache-2.0; 30K+ GitHub stars
SDK languagesPython, Java, Go, Node.js, C#, C++, Rust, RESTfulPython, JavaScript/TypeScript, Rust, Go, .NET, Java
Framework integrationslangchain-milvus, LlamaIndex, Haystack, Dify, n8nlangchain-qdrant, llama-index-vector-stores-qdrant

Is Milvus or Qdrant easier to self-host?

Qdrant starts with one docker run and stays one binary per node. Milvus has three deployment modes sized by data: Milvus Lite inside pymilvus, Standalone as a single container, Distributed on Kubernetes. Running cost follows where data sits: Milvus keeps segments in object storage and sizes query nodes for hot data, while every Qdrant peer holds its shards in local RAM and disk.

Setup and operations by stage, per each project's install docs
StageMilvusQdrant
Prototypepip install pymilvus runs Milvus Lite in-process, up to a few million vectorsdocker run qdrant/qdrant, or local mode in the Python client
Single machineStandalone: one container with embedded etcd, up to about 100 million vectorsOne node, shards on local disk
ClusterDistributed on Kubernetes (Milvus Operator or Helm) over object storage; 100 million to tens of billionsRaft peers; shard count chosen up front, 12 suggested as a start

When is Qdrant the better choice?

Qdrant's peer-based deployment can reduce the number of service types a team operates. Choose based on shard planning, filtering, operational requirements and measured query performance, rather than treating collection size as a hard product limit.

  • Data fits one node or a small cluster whose shard count you can size up front.
  • You want a single Rust binary in Docker, with no object store or Kubernetes.
  • Memory is tight and you want fine control over scalar, binary, product, or asymmetric quantization.
  • You already run Qdrant Cloud, where rebalancing and resharding are managed for you.
  • A few large SaaS tenants fit tiered multitenancy and its dedicated shards.

Milvus or Qdrant: a decision checklist

Qdrant or Milvus is rarely a feature question; both cover dense, sparse, hybrid and filtered search. It is a scale and operations question.

Which open source vector database fits each scenario
Your situationPick
Data fits one machine and will stay thereQdrant single node or Milvus Standalone
Data, tenants or traffic will outgrow one machineMilvus Distributed: new query nodes load segments from object storage
Millions of tenants in one collectionMilvus partition key
A handful of large tenantsQdrant tiered multitenancy, or one Milvus collection per tenant
Keyword and vector relevance in one queryMilvus server-side BM25 with hybrid_search; Qdrant with the qdrant/bm25 model
No cluster to run at allZilliz Cloud or Qdrant Cloud

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 Qdrant?

On VectorDBBench Cohere 1M, Milvus-16c64g-sq8-force_merge lists 5,973 QPS at 0.9192 recall and QdrantCloud-16c64g 1,242.43 QPS at 0.9474. While ingesting 500 rows/s on 10M, QdrantCloud-16c64g lists 393.8 QPS and that Milvus configuration 306.

Can Qdrant scale to billions of vectors like Milvus?

Qdrant scales out by adding peers and shards. In self-hosted clusters the shard count is fixed at creation and new nodes start empty; resharding and automatic rebalancing are Qdrant Cloud features. Milvus Distributed is documented for tens of billions of vectors.

Is Milvus or Qdrant easier to self-host?

A single Qdrant node is one binary, so it starts fastest. Milvus Lite (pip install) and Standalone (one container with embedded etcd) are as simple; Distributed adds Kubernetes and object storage in exchange for scaling each node type on its own.

Is Milvus overkill under 100 million vectors?

No. Milvus Standalone is documented for up to about 100 million vectors in one container, and Milvus Lite for a few million inside Python. Kubernetes only enters with Distributed.

Can I migrate from Qdrant to Milvus?

Yes. VTS (Vector Transport Service) lists Qdrant as a source connector, so collections, vectors and payloads copy over without re-embedding. Map payload fields to scalar or JSON fields, build indexes, then dual-write until results match.

Is Milvus or Qdrant better for production RAG?

Both handle RAG retrieval with filtering and hybrid search, so the best open source vector database for RAG depends on scale. Milvus adds server-side BM25, more index types, and partition-key multi-tenancy, which matter as corpora and tenant counts grow. Qdrant suits smaller, stable collections.

Sources and technical documentation (44)

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