Milvus 和 LanceDB 对比:开源向量数据库怎么选

Milvus 和 LanceDB 对比,首先要分清两者是不同形态的软件:都是 Apache-2.0 开源,但 Milvus 是存算分离的分布式向量数据库服务,LanceDB OSS 是跑在你应用进程里的嵌入式库,底层是 Lance 格式。Milvus 用一个集群服务多个客户端、副本和写入方;LanceDB 是单进程的 Serverless 向量数据库,零服务做本地检索。多个服务、写入方或租户共用数据、规模会长到十亿级,选 Milvus;单进程、本地优先、Lance 原生的流水线,选 LanceDB。

  • Apache-2.0,GitHub 40K+ star
  • 可扩展到数百亿向量
  • 存储与计算分离
  • 外部集合可直接检索 Lance 数据集
Milvus 是服务:各类无状态节点在共享对象存储上独立扩缩。LanceDB OSS 是库:CPU、内存、存储都归宿主进程。
Milvus 是服务:各类无状态节点在共享对象存储上独立扩缩。LanceDB OSS 是库:CPU、内存、存储都归宿主进程。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

Milvus 和 LanceDB 扩展性对比:服务还是库,十亿级向量检索怎么撑?

Milvus 是存算分离架构。segment 和 WAL 都在对象存储;streaming 节点接写入,query 节点负责检索,并用内存副本提升吞吐、故障时切换,data 节点建索引。每类节点各自扩缩,Milvus Distributed 文档标称支持数百亿向量。

LanceDB OSS 是读取 Lance 表的嵌入式库,查询资源由承载它的应用进程提供;数据可在本地盘或对象存储中。容量和并发应按索引、存储与宿主资源实测。LanceDB Cloud 和 Enterprise 提供不同的服务化部署,不能与 OSS 库混为一谈。

数百亿Milvus Distributed 支持的向量规模查看来源
百万级partition key 支持的单 collection 租户数查看来源
40K+milvus-io/milvus GitHub star查看来源
扩展性、并发写入、副本与多租户(依据双方官方文档)
能力MilvusLanceDB(OSS)
架构分布式服务:proxy、streaming、query、data 节点嵌在应用进程里的库,没有服务端
数据存放对象存储(S3、MinIO、Azure Blob、GCS),WAL 也在其中Lance 表放在本地 NVMe、EBS、EFS 或 S3 / GCS / Azure Blob
LanceDB 最大数据量 / 文档标称规模1 亿到数百亿向量(Distributed)依索引、存储与宿主资源评估;Cloud/Enterprise 单独评估
并发写入多个客户端经 proxy 与 WAL 并发写入,受集群资源及限额约束支持;每次 add() 提交一个版本,提交重试次数有限
副本与故障切换内存副本:QPS 更高,query 节点故障时请求转到其他节点等于宿主进程;Enterprise 的 plan executor 跑 2 个以上副本
扩容加 query 节点,直接从对象存储加载 segment扩容应用的查询资源,或选用独立服务部署
一致性每次请求可选 Strong、Bounded(默认)、Session、Eventuallyread_consistency_interval;默认不做跨进程刷新检查
多租户向量数据库database、collection、partition 或 partition key,百万级租户用 namespace 组织多张 Lance 表

Milvus 和 LanceDB 性能对比:VectorDBBench 怎么看?

图中仅展示当前已核对的 Milvus 与 Zilliz Cloud VectorDBBench 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。

向量检索吞吐(QPS,越高越好)Cohere 1M 数据集,768 维
  • Zilliz CloudZillizCloud-8cu-perf13,316.23 QPSP99 2 ms · 召回率 0.9383
  • MilvusMilvus-16c64g-sq4u-fp16-force_merge9,575.69 QPSP99 2.3 ms · 召回率 0.9189

来源:VectorDBBench,仅列 Milvus 与 Zilliz Cloud 的已核对配置;不构成对竞品的性能结论。

过滤检索吞吐(QPS,过滤后保留 1% 数据)Cohere 1M 数据集,768 维,filter ratio 0.99
  • Zilliz CloudZillizCloud-8cu-perf-partition_key10,020.53 QPSP99 2.6 ms · 召回率 0.9788
  • MilvusMilvus-16c64g-sq8-partition_key11,280.08 QPSP99 1.6 ms · 召回率 0.9507

来源:VectorDBBench,仅列 Milvus 与 Zilliz Cloud 的已核对配置;不构成对竞品的性能结论。

Zilliz Cloud 就是全托管的 Milvus:同样的引擎、同一梯队的性能,不用自己规划集群、升级和扩容。

免费试用 Zilliz Cloud

LanceDB 和 Milvus 功能对比:向量数据库对比表

两者都有向量检索、BM25 全文检索、混合检索和过滤。Milvus 索引类型更多、混合排序在服务端完成、新数据自动建索引;LanceDB 把所有东西放在一张带版本的 Lance 表里,定位是多模态数据湖。两者也能接上:向量已经在 Lance 数据集里时,Milvus 外部集合(Milvus 3.0+)可以原地建索引、直接提供检索,一行数据都不用拷(见数据湖向量检索)。

功能对比:索引类型、量化、全文与混合检索、Lance 格式与版本、多模态数据、数据湖互操作、部署方式与 SDK
功能MilvusLanceDB
稠密向量索引类型HNSW、IVF(FLAT、SQ8、PQ、RaBitQ)、SCANN、DiskANN、GPU(CAGRA、IVF)IVF_PQ、IVF_RQ、IVF_HNSW_SQ、IVF_HNSW_PQ、IVF_HNSW_FLAT;约 10 万向量以下默认暴力扫描
量化SQ8、PQ、PRQ、RaBitQ;HNSW_SQ、HNSW_PQ、HNSW_PRQPQ、SQ、RaBitQ(每维 1 到 8 bit)
GPUGPU 建索引与检索(CAGRA、GPU IVF)GPU 建索引:OSS 用 PyTorch 手动建 IVF_PQ;Enterprise 自动
BM25 与全文检索内置 BM25 函数,服务端把原始文本转成稀疏向量Lance 原生 BM25 FTS 索引;分词器含 jieba、lindera、ICU
混合检索单次查询多个向量字段,服务端 RRF 或加权 ranker 融合向量 + FTS 查询再过 reranker:默认 RRF,可选 Cohere、cross-encoder、ColBERT
多向量默认每个 collection 最多 10 个向量字段;StructArray 的 EmbeddingList 字段用 MAX_SIM 检索,适配 ColBERT、ColPalimultivector 列,MaxSim 打分,适配 ColBERT 类模型
过滤与标量索引过滤表达式,JSON 字段 + JSON path 索引;INVERTED、BITMAP、STL_SORT经 DataFusion 的 SQL WHERE,默认前置过滤;BTREE、BITMAP、LABEL_LIST
索引新鲜度data 节点自动给 sealed segment 建索引;新写入的数据立即可查OSS 需手动 optimize() 做 compaction 和增量建索引,之前新行走暴力扫描;Enterprise 后台自动
Lance 格式与版本外部集合原地检索 Lance 数据集,零拷贝原生存储格式;每次写入生成新版本,支持时间旅行、tag 和分支
多模态数据向量加标量、JSON、数组、文本和 StructArray 字段;原始媒体留在你的对象存储图片、音频、视频、文本和向量放在同一张 Lance 表
DataFrame 与数据湖互操作从 Parquet、JSON、CSV 批量导入;外部集合直接读 Lance、Iceberg、Parquet、Vortexpandas、PyArrow、Polars、DuckDB、Pydantic、dlt;PyTorch 直接读同一张表
部署方式Milvus Lite、Standalone、Distributed、Zilliz Cloud嵌入你的二进制、容器或 serverless 函数;LanceDB Cloud 与 Enterprise(托管或 BYOC)
RAG 框架集成LangChain、LlamaIndex、Haystack、Dify、DSPy、n8n 等LangChain、LlamaIndex、Hugging Face
许可证与语言Apache-2.0;Go 和 C++Apache-2.0;Rust
SDK 语言Python、Java、Go、Node.js、C#、C++、Rust、RESTfulPython、TypeScript/JavaScript、Rust、Java;Cloud 与 Enterprise 提供 REST API
社区与治理LF AI & Data 基金会毕业项目;GitHub 40K+ starLanceDB 公司维护;GitHub 10K+ star

Milvus 和 LanceDB 成本与运维对比:各自要跑些什么?

向量数据库选型先看你要运维什么。LanceDB OSS 是零运维向量数据库:pip install,然后一个目录或一个存储桶。Milvus Lite 同样是 pip install,Milvus Standalone 是一个 Docker 镜像,只有 Milvus Distributed 才需要 Kubernetes。之后的成本都是内存:谁在服务索引,内存就在谁那里。

Milvus 和 LanceDB 成本与运维对比:Kubernetes、依赖服务、成本来源、版本与备份
项目MilvusLanceDB(OSS)
生产环境不用 KubernetesMilvus Standalone:单个 Docker 镜像,内嵌 Woodpecker WAL,可到 1 亿向量库直接嵌在你的服务里;要集群用 LanceDB Enterprise
要运维的服务Distributed:etcd 和对象存储(MinIO 或 S3),用 Helm 或 Milvus Operator 部署;Woodpecker 取代 Kafka / Pulsar没有:一个 Lance 目录,放本地 NVMe、EBS、EFS 或 S3、GCS、Azure 存储桶
成本从哪来query 节点内存;量化、DiskANN、tiered storage 用磁盘和对象存储换内存宿主进程的内存和 CPU;IVF_PQ 索引放磁盘,官方文档建议低延迟场景用本地 NVMe 而非对象存储
版本与备份milvus-backup 在集群在线时备份到 S3、GCS、Azure 或本地盘;RBAC 和 TLS每次写入生成新的 Lance 版本:时间旅行、tag、分支;optimize() 清理旧版本

LanceDB 是什么、什么时候该用 LanceDB?

LanceDB 介绍一句话:做得不错的嵌入式向量数据库库,单进程场景下直接省掉一整层基础设施。想换掉它的团队,通常是需要多个服务、写入方或租户共用同一份数据;一个应用独占这张表时,LanceDB 是合理的选择。

  • 单进程应用、notebook、CLI 或边缘函数,想要检索但不想运维任何服务。
  • 本地优先的开发:LanceDB 本地部署就是 pip install,数据集放得进一台机器,跟代码一起分发。
  • Lance 原生流水线:PyTorch、Ray 或 Spark 作业在同一张版本化表上训练和查询。
  • 没有 Kubernetes 的小团队,宁要一个库加一个存储桶,不要一个集群。
  • 图片、音频和向量放在同一张表里的多模态数据集。

哪些 AI 公司和大型企业在生产环境用 Milvus?

从 AI 原生公司到大型企业,都在生产环境运行 Milvus 或 Zilliz Cloud(托管 Milvus)。milvus.io 用户墙上有 Salesforce、Walmart、NVIDIA、eBay、IBM、Cisco、Roblox、Reddit,也有 Exa.ai、OpenEvidence、Read.ai、Notta.ai、Plaud、Filevine。公开案例中的结果:

  • OpenEvidence:基于 Zilliz Cloud,检索延迟低于 10 ms,峰值 4,000 QPS。
  • Plaud:每个区域 100 亿+ 向量块,平均召回延迟低于 200 ms。
  • Exa:借助混合检索,神经搜索延迟从秒级降到 200 ms 以内。
  • Airtable:在 Kubernetes 上用 Milvus Operator 自建 Milvus,支撑语义检索。

常见问题

LanceDB 是什么、什么时候该用?

LanceDB OSS 自称面向多模态 AI 的开源嵌入式检索库:跑在你的 Python、TypeScript 或 Rust 进程里,读磁盘或对象存储上的 Lance 表。一个应用独占数据时用它;多个客户端、写入方或租户共用数据时用 Milvus。

Lance 和 LanceDB 有什么区别?

Lance 是 Apache-2.0 的列式存储格式:带版本的表、支持随机访问,为向量和媒体数据设计。LanceDB 是在 Lance 表上建索引、做查询的库和服务。Milvus 通过外部集合也能直接读 Lance 数据集。

LanceDB 最大能处理多少数据?

LanceDB OSS 是读取 Lance 表的嵌入式库,查询资源由承载它的应用进程提供;数据可在本地盘或对象存储中。容量和并发应按索引、存储与宿主资源实测。LanceDB Cloud 和 Enterprise 提供不同的服务化部署,不能与 OSS 库混为一谈。

LanceDB 支持并发读写吗?

读随进程数扩展。并发写入可以但有限制:每次 add() 都提交一个新的表版本,FAQ 写明并发写入方太多时提交重试耗尽会写失败。Milvus 通过 streaming WAL 接收任意数量客户端的写入。

Milvus 和 LanceDB 谁更快?

图中仅展示当前已核对的 Milvus 与 Zilliz Cloud VectorDBBench 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。

Milvus 能直接检索 Lance 数据吗?

能。Milvus 3.0+ 的外部集合把 external_source 指向 Lance 数据集目录、format 设为 lance-table,映射字段后 refresh、建索引、检索。数据留在 Lance 里只读,不产生第二份拷贝。

Milvus 生产环境必须用 Kubernetes 吗?

不是。Milvus Standalone 把全部组件打进一个 Docker 镜像,内嵌 Woodpecker WAL,文档标称可到 1 亿向量。Kubernetes(Helm 或 Milvus Operator)是给 Milvus Distributed 用的。

Milvus 和 Zilliz Cloud 有什么区别?

Zilliz Cloud 是 Milvus 原班团队提供的全托管 Milvus,客户端 API 一致。基于 Milvus Lite 或 Standalone 写的代码,可以直接迁到 Zilliz Cloud,不用重写。

不想自己运维集群?

Zilliz Cloud 是 Milvus 原班团队提供的全托管服务,MilvusClient API 与本地一致。可以先用开源 Milvus 起步,再迁到托管服务,应用代码不用重写。

资料来源与技术文档 (65)