Milvus vs LanceDB: an open-source vector database comparison

Milvus vs LanceDB is a comparison of two different kinds of software: both are Apache-2.0, but Milvus is a distributed vector database service with storage-compute separation, while LanceDB OSS is an embedded library that runs inside your application process over the Lance format. Milvus serves many clients, replicas and writers from one cluster; LanceDB gives one process a serverless vector database with fast local search and nothing to run. Choose Milvus when several services, writers or tenants share the data or it will grow toward billions of vectors; choose LanceDB for single-process, local-first and Lance-native work.

  • Apache-2.0, 40K+ GitHub stars
  • Scales to tens of billions of vectors
  • Storage and compute separated
  • Searches Lance datasets in place with external collections
Milvus is a service: stateless node types scale on shared object storage. LanceDB OSS is a library: the host process owns CPU, memory and storage.
Milvus is a service: stateless node types scale on shared object storage. LanceDB OSS is a library: the host process owns CPU, memory and storage.
Milvus and Zilliz Cloud adopters
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

Milvus vs LanceDB scalability: service or library, and how far does each grow?

Milvus is built on storage-compute separation. Segments and the write-ahead log live in object storage; streaming nodes take writes, query nodes serve search with in-memory replicas for throughput and failover, and data nodes build indexes. Each node type scales on its own; Milvus Distributed is documented for tens of billions of vectors.

LanceDB OSS is an embedded library over Lance tables, using the serving application process for query resources and local disk or object storage for data. Capacity and concurrency depend on the index, storage and host resources. LanceDB Cloud and Enterprise are separate service deployments; their architecture should not be conflated with the OSS library.

Tens of billionsvectors supported by Milvus DistributedView source
Millionstenants per collection with partition keyView source
40K+GitHub stars, milvus-io/milvusView source
Scalability, concurrent writes, replicas and multi-tenancy for billion-scale vector search, per each project's documentation
CapabilityMilvusLanceDB (OSS)
ArchitectureDistributed service: proxies, streaming, query and data nodesEmbedded library inside the application process; no server
Where data livesObject storage (S3, MinIO, Azure Blob, GCS), including the WALLance tables on local NVMe, EBS, EFS or S3 / GCS / Azure Blob
Documented scale100 million to tens of billions of vectors (Distributed)Evaluate the index, storage and host; assess Cloud/Enterprise separately
Concurrent writersMultiple clients write through proxies and the WAL, subject to cluster resources and limitsSupported; each add() commits a version, and writers retry commits a limited number of times
Replicas and failoverIn-memory replicas: more QPS, and requests move to another query node on failureThe host process; Enterprise plan executors run with 2+ replicas
Adding capacityAdd a query node; it loads segments from object storageScale application serving resources or choose a service deployment
ConsistencyStrong, Bounded (default), Session or Eventually, per requestread_consistency_interval; by default no cross-process refresh check
Multi-tenant vector databaseDatabase, collection, partition, or partition key for millions of tenantsNamespaces that organize many Lance tables

Milvus vs LanceDB performance: what does VectorDBBench show?

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.

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, verified Milvus and Zilliz Cloud configurations only; these rows do not establish a competitor performance comparison.

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

Source: VectorDBBench, verified Milvus and Zilliz Cloud configurations only; these rows do not establish a competitor performance comparison.

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

LanceDB vs Milvus features: a vector database comparison table

Both cover vector search, BM25 full-text search, hybrid search and filtering. Milvus has more index families, server-side hybrid ranking and automatic indexing of new data; LanceDB keeps everything in one versioned Lance table. The two also meet: if your embeddings already sit in Lance datasets, Milvus external collections (Milvus 3.0+) index them in place and serve search without copying a row (see vector search on the data lake).

Feature comparison: index types, quantization, full-text and hybrid search, Lance format and versioning, multimodal data, lakehouse interop, deployment and SDKs
FeatureMilvusLanceDB
Dense vector index typesHNSW, IVF (FLAT, SQ8, PQ, RaBitQ), SCANN, DiskANN, GPU (CAGRA, IVF)IVF_PQ, IVF_RQ, IVF_HNSW_SQ, IVF_HNSW_PQ, IVF_HNSW_FLAT; brute-force scan below about 100K vectors
QuantizationSQ8, PQ, PRQ, RaBitQ; HNSW_SQ, HNSW_PQ, HNSW_PRQPQ, SQ, RaBitQ (1 to 8 bits per dimension)
GPUGPU index build and search (CAGRA, GPU IVF)GPU index build: manual IVF_PQ via PyTorch in OSS; automatic in Enterprise
BM25 and full-text searchBuilt-in BM25 function turns raw text into sparse vectors on the serverLance-native BM25 FTS index; tokenizers include jieba, lindera and ICU
Hybrid searchMultiple vector fields per query, fused with RRF or weighted ranker on the serverVector plus FTS query with a reranker: RRF by default, Cohere, cross-encoder, ColBERT
Multi-vectorUp to 10 vector fields per collection; StructArray EmbeddingList fields searched with MAX_SIM for ColBERT and ColPaliMultivector columns scored with MaxSim for ColBERT-style models
Filtering and scalar indexesFilter expressions, JSON field with JSON path index; INVERTED, BITMAP, STL_SORTSQL WHERE via DataFusion, pre-filtering by default; BTREE, BITMAP, LABEL_LIST
Index freshnessData nodes index sealed segments automatically; new data visibility follows the selected consistency levelOSS: call optimize() to compact and index new rows, which are brute-forced until then; Enterprise indexes in the background
Lance format and versioningExternal collections search Lance datasets in place, zero-copyNative storage format; every write is a new version with time travel, tags and branches
Multimodal dataVectors with scalar, JSON, array, text and StructArray fields; raw media stays in your object storeImages, audio, video, text and embeddings in one Lance table
Data-frame and lakehouse interopBulk import from Parquet, JSON or CSV; external collections over Lance, Iceberg, Parquet and Vortexpandas, PyArrow, Polars, DuckDB, Pydantic and dlt; PyTorch loaders on the same table
Deployment optionsMilvus Lite, Standalone, Distributed, Zilliz CloudEmbedded in your binary, container or serverless function; LanceDB Cloud and Enterprise (managed or BYOC)
RAG framework integrationsLangChain, LlamaIndex, Haystack, Dify, DSPy, n8n and moreLangChain, LlamaIndex and Hugging Face
License and languageApache-2.0; Go and C++Apache-2.0; Rust
SDK languagesPython, Java, Go, Node.js, C#, C++, Rust, RESTfulPython, TypeScript/JavaScript, Rust, Java; REST API for Cloud and Enterprise
Community and governanceLF AI & Data graduated project; 40K+ GitHub starsLanceDB Inc.; 10K+ GitHub stars

Milvus vs LanceDB cost and operations: what does each take to run?

LanceDB vs Milvus cost starts with what you run. LanceDB OSS is zero-ops: pip install, then a directory or bucket. Milvus Lite is also a pip install and Milvus Standalone one Docker image, so Kubernetes only enters with Milvus Distributed. After that, cost is RAM on whichever process serves the index.

Milvus vs LanceDB cost and operations: Kubernetes, services, cost drivers, versioning and backup
TopicMilvusLanceDB (OSS)
Production without KubernetesMilvus Standalone: a single Docker image with the Woodpecker WAL embedded, up to 100 million vectorsThe library inside your service; LanceDB Enterprise for a cluster
Services you operateDistributed: etcd and object storage (MinIO or S3) via Helm or the Milvus Operator; Woodpecker replaces Kafka or PulsarNone: a Lance directory on local NVMe, EBS, EFS or an S3, GCS or Azure bucket
What drives costRAM on query nodes; quantization, DiskANN and tiered storage trade it for disk and object storageRAM and CPU of the host; IVF_PQ keeps indexes on disk, and its docs favour local NVMe over object storage for low latency
Versioning and backupmilvus-backup to S3, GCS, Azure or local disk while the cluster stays online; RBAC and TLSEvery write is a new Lance version: time travel, tags, branches; optimize() cleans old versions

When is LanceDB the better choice?

What is LanceDB and when should I use it? LanceDB is a well-made embedded retrieval library, and for a single process it removes a whole tier of infrastructure. Teams looking for LanceDB alternatives usually need several services, writers or tenants on the same data; if one application owns the table, LanceDB is a sound choice.

  • A single-process app, notebook, CLI or edge function that wants search with no server.
  • Local-first development where the dataset fits one machine and ships with the code.
  • Lance-native pipelines: PyTorch, Ray or Spark jobs that train on and query the same versioned table.
  • Small teams without Kubernetes who prefer a library and a bucket over a cluster.
  • Multimodal datasets where images, audio and embeddings belong in one table.

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

What is LanceDB and when should I use it?

LanceDB OSS calls itself an open-source embedded retrieval library for multimodal AI: it runs inside your Python, TypeScript or Rust process and reads Lance tables from disk or object storage. Use it when one application owns the data; use Milvus when many clients, writers or tenants share it.

What is the difference between Lance and LanceDB?

Lance is the Apache-2.0 columnar format; Lance format vs Parquet comes down to versioning and random row access for embeddings and media. LanceDB is the library and service that indexes and queries Lance tables. Milvus reads Lance datasets too, through external collections.

How large of a dataset can LanceDB handle?

LanceDB OSS is an embedded library over Lance tables, using the serving application process for query resources and local disk or object storage for data. Capacity and concurrency depend on the index, storage and host resources. LanceDB Cloud and Enterprise are separate service deployments; their architecture should not be conflated with the OSS library.

Does LanceDB support concurrent operations?

Reads scale with your processes. Concurrent writes work with limits: every add() commits a new table version, and the FAQ notes that too many concurrent writers can lead to failing writes because commit retries are bounded. Milvus accepts writes from any number of clients through its streaming WAL.

Which is faster, Milvus or LanceDB?

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.

Can Milvus search Lance data without importing it?

Yes. Milvus 3.0+ external collections point at a Lance dataset directory with format lance-table, map columns to fields, then refresh, index and search. Rows stay in Lance, read-only, with no second copy.

Do I need Kubernetes to run Milvus in production?

No. Milvus Standalone packs every component into a single Docker image with the Woodpecker WAL embedded and is documented up to 100 million vectors. Kubernetes, via Helm or the Milvus Operator, is for Milvus Distributed.

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 (64)