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

Milvus 和 Weaviate 的主要区别在架构与运维模型:Milvus 将持久数据放在对象存储,分别扩缩查询、写入与索引资源;Weaviate 按节点管理 collection 的分片和副本,并提供 vectorizer 模块、GraphQL 和原生多租户。两者都支持调用模型生成 embedding,也都有多种索引与压缩选择。应结合工作负载、已有接口和团队经验选型。

  • Apache-2.0,GitHub 40K+ star
  • 可扩展到数百亿向量
  • 存储与计算分离
  • 多租户向量数据库:partition key 支持百万级租户
Milvus 各类节点在共享对象存储上独立扩缩;Weaviate 每个节点持有分片,元数据走 Raft,数据走无主复制。
Milvus 各类节点在共享对象存储上独立扩缩;Weaviate 每个节点持有分片,元数据走 Raft,数据走无主复制。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

Milvus 和 Weaviate 扩展性对比:十亿级向量检索怎么撑?

Milvus 是存算分离架构。segment 和 WAL 都在对象存储里,新加的 query 节点直接加载分配给它的 segment,不用从别的节点拷盘;写入、检索、建索引分别由不同类型的节点承担,各自扩缩。tiered storage 还能让单个节点服务超过自身内存和磁盘的数据量。

Weaviate 将 collection 切分为分片,每个分片在节点本地盘维护对象和索引。collection 的分片配置需预先规划;新增节点后的已有副本可通过 MOVE/COPY API 迁移或复制。容量规划需要区分索引:HNSW 的内存需求与向量缓存和量化配置有关,HFresh 则提供基于磁盘的索引路径,不能用统一的内存倍数概括。

数百亿Milvus Distributed 支持的向量规模查看来源
百万级partition key 支持的单 collection 租户数查看来源
40K+milvus-io/milvus GitHub star查看来源
扩展性与大规模多租户(依据双方官方文档)
能力MilvusWeaviate(自建)
架构存算分离:proxy、streaming、query、data 节点本地对象和索引;HNSW 或基于磁盘的 HFresh 等选择
数据存放对象存储(S3、MinIO、Azure Blob、GCS),WAL 也在其中LSM 对象存储和倒排索引在本地盘;HNSW 索引在内存
节点独立扩缩query、streaming、data 节点分别扩缩每个节点同时负责存储、建索引和查询
新增节点从对象存储加载 segment已有分片不动,需通过 API 迁移副本
分片与 resharding分片数建表时设定;segment 可分布到任意数量的 query 节点collection 的分片与默认副本配置需预先规划;v1.32 起可用 MOVE/COPY 管理单分片副本
数据超过单节点容量tiered storage 按需拉取字段数据HFresh 磁盘索引;inactive 租户落盘,offloaded 租户放 S3
大规模多租户partition key 支持百万级租户;也可按 database、collection、partition 隔离原生多租户:一个租户一个分片;文档称约 20 节点可承载 100 万活跃租户

Milvus 和 Weaviate 性能对比:谁更快?

图中仅展示当前已核对的 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

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

两者都覆盖稠密、稀疏和混合检索,也都支持元数据过滤。Weaviate 的特色是模型集成和原生多租户;Milvus 的索引家族更全,横跨内存、磁盘和 GPU,并内置服务端 BM25。做开源向量数据库选型(尤其是 RAG 向量数据库选型)时,同时在看 Weaviate、Milvus、Qdrant 的读者,可以把这张表和 Qdrant 对比页一起看。

LangChain、LlamaIndex 对 Milvus 和 Weaviate 的支持有差别吗?两者都有官方维护的 LangChain、LlamaIndex、Haystack 集成,RAG 框架很少成为决定因素;Dify 默认用 Weaviate,也内置 Milvus 支持。

向量数据库技术选型对照:索引类型、量化、混合检索、多租户、RAG 框架集成、部署方式、许可证、SDK 与社区
功能MilvusWeaviate
稠密向量索引类型HNSW、IVF(FLAT、SQ8、PQ、RaBitQ)、SCANN、DiskANN、GPU(CAGRA、IVF)HNSW、flat、dynamic(flat 自动转 HNSW)、HFresh 磁盘索引
量化SQ8、PQ、PRQ、RaBitQ;HNSW_SQ、HNSW_PQ、HNSW_PRQPQ、BQ、SQ、RQ(1 bit、4 bit、8 bit 旋转量化)
BM25 与全文检索内置 BM25 函数,服务端把原始文本转成稀疏向量基于倒排索引的 BM25F 关键词检索,支持多种分词器和字段加权
混合检索单次查询多个向量字段,RRF 或加权 ranker 融合向量 + BM25,alpha 调权重;relativeScoreFusion(默认)或 rankedFusion
多向量每 collection 默认最多 10 个向量字段;StructArray EmbeddingList 用 MAX_SIM* 做文档级晚交互检索named vectors;ColBERT 式多向量 embedding,可选 MUVERA
过滤标量索引(INVERTED、BITMAP、STL_SORT)和 JSON path 索引,与 ANN 检索一体执行倒排索引生成 allow-list 做预过滤;HNSW 走 ACORN 策略
多租户database、collection、partition 或 partition keycollection 级原生多租户;租户可 active、inactive 或 offload 到 S3
Embedding 生成客户端生成,或用 Milvus Function 调外部模型服务内置 vectorizer、generative、reranker 模块:OpenAI、Cohere、Google、AWS、Ollama 等
接口与查询语言gRPC 和 RESTfulREST、gRPC 和 GraphQL 查询语言
部署方式Milvus Lite、Standalone、Distributed、Zilliz CloudDocker、Kubernetes(Helm)、Embedded Weaviate、Weaviate Cloud(serverless 或独占)
RAG 框架集成LangChain、LlamaIndex、Haystack、Dify、DSPy、n8n 等LangChain、LlamaIndex、Haystack、DSPy、Semantic Kernel、CrewAI 等;Dify 的默认向量库
许可证与语言Apache-2.0;Go 和 C++核心 BSD-3-Clause,wl/ 目录为商业许可证;Go
SDK 语言Python、Java、Go、Node.js、C#、C++、Rust、RESTfulPython、TypeScript/JavaScript、Go、Java、C#
社区与治理LF AI & Data 基金会毕业项目;GitHub 40K+ starWeaviate B.V. 公司维护;GitHub 15K+ star

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

成本需一起评估计算、内存、存储、网络与运维。Weaviate 的 HNSW、量化、HFresh 和租户 offload 提供不同资源取舍;Milvus 的量化 HNSW、DiskANN 和 tiered storage 也分别改变内存、磁盘和对象存储需求。应在相同召回率和延迟目标下比较,不能仅按原始向量大小估算。两者起步都不需要 Kubernetes。

Milvus 和 Weaviate 成本与运维对比:Kubernetes、依赖、安全与备份
项目MilvusWeaviate
生产环境不用 KubernetesMilvus Standalone:单个 Docker 镜像,内嵌 Woodpecker WAL,可到 1 亿向量Docker Compose 单节点;多节点集群用 Helm
依赖组件etcd 和对象存储(MinIO 或 S3);Woodpecker 取代 Kafka / Pulsar单二进制、内嵌 Raft;备份和 offload 模块对接 S3、GCS 或 Azure
成本从哪来query 节点内存;量化、DiskANN、tiered storage 用磁盘和对象存储换内存每个节点的 HNSW 内存;PQ、BQ、SQ、RQ 量化、HFresh 和租户 offload 可以降低
安全与备份RBAC(支持权限组)和 TLS;milvus-backup 在集群在线时备份到 S3、GCS、Azure 或本地盘RBAC,API key 或 OIDC 认证;backup-s3、backup-gcs、backup-azure、backup-filesystem 模块

Weaviate 和 Milvus 哪个好?什么情况下 Weaviate 更合适

选择取决于工作负载与团队习惯。Weaviate 提供模型集成、原生多租户和 GraphQL;Milvus 将检索、写入与索引资源分开扩缩。应以实际数据上的召回率、延迟、吞吐与运维成本判断,而不是把某个向量数当作两者的硬边界。

  • 想用内置的 vectorizer、generative、reranker 模块,不想自己维护 embedding 流水线。
  • 应用已经在用 GraphQL,或者更习惯 Weaviate 以对象为中心的数据模型。
  • 数据放得进小集群,分片数和副本数一开始就能定好。
  • 成千上万的小租户,每个租户一个分片,冷租户 offload 到 S3。
  • 已经在用 Weaviate Cloud,想要 serverless 计费和一致的客户端 API。

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

常见问题

Weaviate 和 Milvus 哪个好?

Milvus 和 Weaviate 的主要区别在架构与运维模型:Milvus 将持久数据放在对象存储,分别扩缩查询、写入与索引资源;Weaviate 按节点管理 collection 的分片和副本,并提供 vectorizer 模块、GraphQL 和原生多租户。两者都支持调用模型生成 embedding,也都有多种索引与压缩选择。应结合工作负载、已有接口和团队经验选型。

Milvus 和 Weaviate 谁更快?

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

Weaviate 和 Milvus 谁的扩展性更好?

Weaviate 将 collection 切分为分片,每个分片在节点本地盘维护对象和索引。collection 的分片配置需预先规划;新增节点后的已有副本可通过 MOVE/COPY API 迁移或复制。容量规划需要区分索引:HNSW 的内存需求与向量缓存和量化配置有关,HFresh 则提供基于磁盘的索引路径,不能用统一的内存倍数概括。

Weaviate 是开源的吗?

是的。Weaviate 核心仓库采用 BSD-3-Clause 许可证,wl/ 目录单独使用商业许可证;Milvus 是 Apache-2.0,也是 LF AI & Data 基金会的毕业项目。两者都能自建,托管服务分别是 Weaviate Cloud 和 Zilliz Cloud。

Weaviate 支持混合检索吗?

支持。Weaviate 混合检索把 BM25F 关键词查询和向量查询用 alpha 加权,再用 relativeScoreFusion 或 rankedFusion 融合。Milvus 的混合检索跨多个向量字段,包括服务端 BM25 生成的稀疏向量,用 RRF 或加权 ranker 融合。

Milvus 生产环境可以不用 Kubernetes 吗?

可以。Milvus Standalone 把全部组件打进一个 Docker 镜像,内嵌 Woodpecker WAL,文档标称可到 1 亿向量;Milvus Lite 是 Python 库,适合几百万向量。Kubernetes(Helm 或 Milvus Operator)是给 Milvus Distributed 用的。

从 Weaviate 迁移到 Milvus 能直接切换吗?

不能。Weaviate 的 collection 对应 Milvus 的 collection 加标量字段,named vectors 对应多个向量字段。把对象连同向量导出、批量写入 Milvus、建索引,再把混合查询从 alpha 融合改成 RRF 或加权 ranker。

Dify 知识库选 Weaviate 还是 Milvus?

Dify 默认 VECTOR_STORE 是 weaviate,也内置 milvus 支持。小规模两者都行;语料和租户持续增长时切到 milvus,用 partition key 承载多租户。

Milvus 和 Zilliz Cloud 有什么区别?

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

不想自己运维集群?

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

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