Milvus 和 LanceDB 对比:格式、嵌入式库,还是分布式数据库?

Milvus 和 LanceDB 对比,本质上是在比三个层次:Lance 是开放的列式存储格式,LanceDB 是建在 Lance 之上的嵌入式向量数据库,Milvus 则是分布式向量数据库,既能原地检索 Lance 数据集,也能自己管存储。LanceDB OSS 跑在一个应用进程里;Milvus 是存算分离的服务,有副本、多写入方和跨节点查询。两条路都可以让 Lance 继续做数据的唯一真源:一个进程独占数据选 LanceDB,多个服务、写入方或租户共用数据选 Milvus。

  • Apache-2.0,GitHub 40K+ star
  • 外部集合可原地检索 Lance 数据集
  • Milvus Lite:pip install,一个本地文件
  • Distributed:数百亿向量
Milvus 是服务:各类无状态节点在共享对象存储上独立扩缩,还能原地索引 Lance 数据集。LanceDB OSS 是建在 Lance 文件上的库:CPU、内存、存储都归宿主进程。
Milvus 是服务:各类无状态节点在共享对象存储上独立扩缩,还能原地索引 Lance 数据集。LanceDB OSS 是建在 Lance 文件上的库:CPU、内存、存储都归宿主进程。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

Lance 和 LanceDB 有什么区别?

Lance 格式是面向多模态 AI 的开放 lakehouse 格式,Arrow 原生,Apache-2.0,仓库在 lance-format/lance。它其实是三份规范:文件格式把列数据按大页排布、专为随机访问优化;表格式管理 fragment、manifest、删除、schema 演进和 ACID 提交,每次提交生成一个不可变版本;索引格式把向量、全文和标量索引做成表的一等对象,随表一起版本化。

LanceDB 是建在 Lance 之上的数据库。LanceDB OSS 是嵌入式检索库,提供 Python、TypeScript、Rust SDK,把 Lance 数据集组织成命名表,在你的进程里执行检索;LanceDB Cloud 和 Enterprise 是该公司的托管和 BYOC 服务,在同一批表上加常驻的 query 节点、plan executor 和 indexer。Lance 格式对 Parquet 是存储问题;LanceDB 和 Milvus 对比是服务层问题。

数百亿Milvus Distributed 支持的向量规模查看来源
百万级partition key 支持的单 collection 租户数查看来源
40K+milvus-io/milvus GitHub star查看来源
Lance 格式 vs LanceDB:层次、内容、原生索引、读取方与治理
Lance(格式)LanceDB(数据库)
是什么开放的列式文件、表和索引格式,放本地盘或对象存储嵌入式库(OSS),加上建在 Lance 表上的 Cloud 和 Enterprise 服务
装什么列数据 fragment、每个版本一份不可变 manifest、删除文件、存媒体的 blobLance 数据集之上的命名表、namespace 目录、检索和查询 API
原生索引向量(IVF 与 HNSW 布局)、全文、BTree、Bitmap、Label List、Bloom、N-gram、JSON构建并查询这些索引;混合检索和 reranker 在宿主进程里跑
谁来读pylance、DuckDB、Spark、Ray、Trino、Polars、PyTorch loader、Milvus 外部集合你的应用通过 LanceDB SDK,或 Enterprise 的 query 节点
项目Apache-2.0,github.com/lance-format/lanceOSS Apache-2.0,github.com/lancedb/lancedb;服务由 LanceDB 公司提供

Milvus Lance 怎么接:Milvus 也能把 Lance 当存储格式吗?

能。Milvus 外部集合(Milvus 3.0+)把 external_source 指向 Lance 数据集目录、format 设为 lance-table,用 external_field 把每个字段映射到源列,然后原地建索引、原地提供检索。不导入、不复制:数据留在 Lance 里只读,Milvus 只保存 schema 映射、manifest、索引和缓存。

你的 Lance 数据集仍是唯一真源,Milvus 只是加了一层服务。Spark、Ray 或 pylance 照常写 fragment,同一批文件 LanceDB、DuckDB 和训练作业照常读。

  • 开启 Storage V3(common.storage.useLoonFFI: true),用 external_source 和 external_spec 建 schema,然后 refresh、建索引、load、检索。
  • Milvus 在自己的存储里建 HNSW、IVF 或 DiskANN 索引,从不写入数据集,Lance 自带的索引和版本原封不动。
  • refresh 是显式、异步、增量的:新 fragment 被接入,未变化的数据保留原有 segment 和索引,完成前查询继续服务旧状态。
  • 外部字段可以喂给 Function:BM25 稀疏向量或文本 embedding 在 Milvus 里生成,不往表里写回新列。
  • 同一机制还能读 Apache Iceberg 表(format iceberg-table 加 snapshot_id)、Parquet 和 Vortex,详见数据湖向量检索。

Milvus 和 LanceDB:从嵌入式检索到分布式服务

嵌入式这一档,Milvus 有 Milvus Lite:pip install pymilvus 即可,进程内运行,数据存在本地一个文件里,MilvusClient("./milvus_demo.db")。它面向 notebook、笔记本、边缘设备和原型,同一套 MilvusClient API 原样迁到 Standalone、Distributed 和 Zilliz Cloud。这正是 LanceDB OSS 的形态:零服务、单进程、本地存储。

核心差异在一个进程之外。Milvus 是存算分离的分布式系统:无状态 proxy,streaming 节点负责写入和 WAL,query 节点负责检索,data 节点负责 compaction 和建索引,全部跑在共享对象存储之上。多个客户端同时写入,副本提升吞吐并承接故障,一次查询扇出到多个 query 节点,tiered storage 把热数据留在内存和本地盘、其余留在对象存储。LanceDB OSS 被绑在宿主进程上:官方文档把 OSS 定位在单机百万级向量,上亿及以上推荐 LanceDB Enterprise,由它自己的 query 节点、plan executor、indexer 和控制面组成集群。

LanceDB 扩展性 vs Milvus:嵌入式进程、LanceDB Enterprise 服务与 Milvus Distributed(依据双方官方文档)
Milvus(Lite 到 Distributed)LanceDB OSSLanceDB Enterprise
运行形态Lite:进程内;Distributed:无状态 proxy、streaming、query、data 节点嵌在你进程里的库query 节点、plan executor、indexer、控制面
数据存放Lite:本地文件;Distributed:对象存储,WAL 也在其中(Woodpecker)Lance 表放本地 NVMe、EBS、EFS 或 S3 / GCS / AzureLance 表和索引产物放对象存储
并发写入多个客户端经 proxy 写入 streaming WAL每次 add() 提交一个版本,提交重试次数有限由 query 节点校验并提交
副本与查询扇出内存副本提升 QPS、承接故障;一次查询跨多个 query 节点等于宿主进程检索流量分摊到多个节点
冷热数据tiered storage:懒加载、按需部分加载、LRU 淘汰,跨内存、磁盘、对象存储宿主机内存和磁盘分布式 NVMe 缓存
文档标称规模Lite:数百万;Standalone:1 亿;Distributed:数百亿单机百万级向量上亿到数十亿行
部署pip、Docker、Helm 或 Milvus Operator;Zilliz Cloud 托管pip / npm / cargo托管或 BYOC

文档中的数量是部署指导,并非产品硬上限;需按索引、硬件和负载实测。

LanceDB 和 Milvus 功能对比:各自有而对方没有的能力

LanceDB 的长处在数据层:表就是 Lance,同一批文件可以直接走 Arrow、pandas、Polars、DuckDB 和 PyTorch,每次写入都是可回溯的版本,图片、音频以 blob 形式和 embedding 放在一起,这也是它定位多模态数据湖的底气。Milvus 的长处在服务层:服务端混合检索自带 BM25,用 RRF、加权、衰减或模型 ranker 融合,并可用 Function Chain 编排;partition key 多租户支持百万级租户;RBAC;覆盖 GPU、DiskANN、RaBitQ 的索引目录;按所选一致性级别可见的流式摄入;以及同时覆盖 Lance 和 Iceberg 的外部集合。

向量数据库对比:LanceDB 与 Milvus 的差异化能力(依据双方官方文档)
能力LanceDBMilvus
Arrow、pandas、Polars、DuckDB 互操作表是 Arrow 原生的 Lance;pandas、PyArrow、Polars、DuckDB、dlt 直接读写从 Parquet、JSON、CSV 批量导入;数据湖表通过外部集合提供检索
零服务本地模式Python、TypeScript 或 Rust 的 OSS 库,什么都不用跑Milvus Lite:pip install、本地文件、FLAT 索引,API 与集群一致
数据集版本与时间旅行每次写入都是一个 Lance 版本:时间旅行、tag、分支Snapshot 与 milvus-backup;数据湖的版本留在数据湖
表内多模态 blob图片、视频、音频和 embedding 放在同一张 Lance 表,带 blob API向量加标量、JSON、数组、文本和 StructArray 字段;媒体留在你的对象存储或数据湖
混合检索与重排向量 + FTS,reranker 在宿主进程里跑(RRF、Cohere、cross-encoder、ColBERT)服务端内置 BM25 和多向量融合:RRF、加权、衰减、模型 ranker,可用 Function Chain 编排(Milvus 3.0+)
多租户与权限用 namespace 组织多张表database、collection、partition 或 partition key,百万级租户;RBAC 用户、角色、权限;共享 collection 时每次请求必须带租户过滤
索引广度IVF_PQ、IVF_RQ、IVF_HNSW_SQ、IVF_HNSW_PQ、IVF_HNSW_FLAT;FTS;BTREE、BITMAP、LABEL_LISTHNSW、HNSW_SQ/PQ/PRQ、IVF_FLAT/SQ8/PQ/RABITQ、DISKANN、SCANN、GPU_CAGRA、GPU_IVF;稀疏、二进制、MinHash;INVERTED、BITMAP、JSON path
流式摄入与一致性写入提交版本;读取按 read_consistency_interval 刷新;OSS 要调 optimize() 给新行建索引写入进 streaming WAL,按所选一致性级别可查;每次请求可选 Strong、Bounded(默认)、Session、Eventually
可服务的数据湖格式Lance 表外部集合覆盖 Lance、Apache Iceberg、Parquet、Vortex,另有原生 collection

LanceDB 是什么、什么时候选 LanceDB 更合适?

LanceDB 擅长的是省掉一层。一个进程独占数据时,LanceDB OSS 用一个库加一个目录就给你向量检索、全文检索和带版本的存储。日后这个进程要和其他服务共享数据,那些 Lance 文件本来就是 Milvus 能直接服务的东西。

  • 单进程应用、notebook、CLI 或边缘函数,想要检索但不想运维任何服务。
  • 本地优先的开发:数据集放得进一台机器,跟代码一起分发。
  • Lance 原生流水线:PyTorch、Ray 或 Spark 作业在同一张版本化表上训练和查询。
  • 图片、音频和 embedding 放在同一张表里、还要时间旅行的多模态数据集。
  • 希望 Arrow、DuckDB、Polars 和向量检索共用同一批文件的团队。

哪些 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,支撑语义检索。

常见问题

Lance 和 LanceDB 有什么区别?

Lance 是开放的列式格式:文件、由 fragment 组成的版本化表,以及原生的向量、全文和标量索引,全部 Arrow 原生。LanceDB 是建在它之上的数据库:进程内查询 Lance 表的嵌入式 OSS 库,加上 LanceDB Cloud 和 Enterprise 服务。Milvus 也能读 Lance。

Milvus 能直接读 Lance 文件吗?

能。Milvus 3.0+ 的外部集合把 external_source 指向 Lance 数据集目录、format 设为 lance-table,用 external_field 映射列,然后 refresh、建索引、提供检索。数据留在 Lance 里只读,没有第二份拷贝;需要开启 Storage V3(common.storage.useLoonFFI)。

Milvus Lite 和 LanceDB 是一回事吗?

形态上一样:Milvus Lite 用 pip 安装、在你的 Python 进程里运行、数据存本地文件,和 LanceDB OSS 一样。它面向原型和边缘场景,用 FLAT 索引;同一份 MilvusClient 代码可以直接跑在 Milvus Standalone、Distributed 或 Zilliz Cloud 上。

LanceDB 能上生产环境吗,扩展性如何?

LanceDB 文档说 OSS 单机可轻松处理百万级向量,并发写入方过多时提交重试有上限,上亿及以上推荐 LanceDB Enterprise。Milvus Distributed 文档标称数百亿向量,有副本和多写入方摄入。

LanceDB 和 Milvus 能共用同一份 Lance 数据吗?

能。Milvus 从不写入数据集,索引放在自己的存储里,所以 LanceDB、DuckDB、Spark 和训练作业继续读写同一批 Lance 文件,Milvus 同时在上面提供在线检索。

Milvus 和 Zilliz Cloud 有什么区别?

Zilliz Cloud 是 Milvus 原班团队提供的全托管 Milvus,客户端 API 一致,基于 Milvus Lite 或 Standalone 写的代码可以直接迁过去。它同样提供覆盖 Lance、Iceberg、Parquet、Vortex 的外部集合。 外部集合当前为 Public Preview,仅支持按需计算数据库。

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

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

免费试用 Zilliz Cloud