Milvus 和 Weaviate 对比:开源向量数据库怎么选
Milvus 和 Weaviate 的主要区别在架构与运维模型:Milvus 将持久数据放在对象存储,分别扩缩查询、写入与索引资源;Weaviate 按节点管理 collection 的分片和副本,并提供 vectorizer 模块、GraphQL 和原生多租户。两者都支持调用模型生成 embedding,也都有多种索引与压缩选择。应结合工作负载、已有接口和团队经验选型。
- Apache-2.0,GitHub 40K+ star
- 可扩展到数百亿向量
- 存储与计算分离
- 多租户向量数据库:partition key 支持百万级租户
- Salesforce
- Walmart
- NVIDIA
- eBay
- IBM
- Cisco
- Roblox
- 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 | Weaviate(自建) |
|---|---|---|
| 架构 | 存算分离: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 配置。这里没有同条件、同版本的对手结果,不能据此推断谁更快。使用相同数据集、过滤比例、召回目标和硬件重测后再比较。
- 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 的已核对配置;不构成对竞品的性能结论。
- 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 CloudWeaviate 和 Milvus 功能对比:向量数据库对比表
两者都覆盖稠密、稀疏和混合检索,也都支持元数据过滤。Weaviate 的特色是模型集成和原生多租户;Milvus 的索引家族更全,横跨内存、磁盘和 GPU,并内置服务端 BM25。做开源向量数据库选型(尤其是 RAG 向量数据库选型)时,同时在看 Weaviate、Milvus、Qdrant 的读者,可以把这张表和 Qdrant 对比页一起看。
LangChain、LlamaIndex 对 Milvus 和 Weaviate 的支持有差别吗?两者都有官方维护的 LangChain、LlamaIndex、Haystack 集成,RAG 框架很少成为决定因素;Dify 默认用 Weaviate,也内置 Milvus 支持。
| 功能 | Milvus | Weaviate |
|---|---|---|
| 稠密向量索引类型 | 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_PRQ | PQ、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 key | collection 级原生多租户;租户可 active、inactive 或 offload 到 S3 |
| Embedding 生成 | 客户端生成,或用 Milvus Function 调外部模型服务 | 内置 vectorizer、generative、reranker 模块:OpenAI、Cohere、Google、AWS、Ollama 等 |
| 接口与查询语言 | gRPC 和 RESTful | REST、gRPC 和 GraphQL 查询语言 |
| 部署方式 | Milvus Lite、Standalone、Distributed、Zilliz Cloud | Docker、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、RESTful | Python、TypeScript/JavaScript、Go、Java、C# |
| 社区与治理 | LF AI & Data 基金会毕业项目;GitHub 40K+ star | Weaviate B.V. 公司维护;GitHub 15K+ star |
Milvus 和 Weaviate 成本与运维对比:各自要跑些什么?
成本需一起评估计算、内存、存储、网络与运维。Weaviate 的 HNSW、量化、HFresh 和租户 offload 提供不同资源取舍;Milvus 的量化 HNSW、DiskANN 和 tiered storage 也分别改变内存、磁盘和对象存储需求。应在相同召回率和延迟目标下比较,不能仅按原始向量大小估算。两者起步都不需要 Kubernetes。
| 项目 | Milvus | Weaviate |
|---|---|---|
| 生产环境不用 Kubernetes | Milvus 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,支撑语义检索。
延伸阅读
- What determines vector-database scalability?
- How do sharding and replication differ in a vector database?
- How do you choose a vector index for your workload?
- What is vector quantization, and what does it trade off?
- What is hybrid search, and when should you use it?
- How should you design multi-tenancy for vector search?
- How should you benchmark vector search performance?
常见问题
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)
- https://milvus.io
- https://github.com/milvus-io/milvus
- https://milvus.io/docs/architecture_overview.md
- https://milvus.io/docs/install-overview.md
- https://milvus.io/docs/tiered-storage-overview.md
- https://milvus.io/docs/index-explained.md
- https://milvus.io/docs/full-text-search.md
- https://milvus.io/docs/multi-vector-search.md
- https://milvus.io/docs/multi_tenancy.md
- https://milvus.io/docs/dify_with_milvus.md
- https://github.com/weaviate/weaviate
- https://github.com/weaviate/weaviate/blob/main/LICENSE
- https://docs.weaviate.io/weaviate/concepts/cluster
- https://docs.weaviate.io/weaviate/concepts/replication-architecture/cluster-architecture
- https://docs.weaviate.io/weaviate/concepts/replication-architecture
- https://docs.weaviate.io/weaviate/concepts/storage
- https://docs.weaviate.io/weaviate/config-refs/collections
- https://docs.weaviate.io/weaviate/concepts/vector-index
- https://docs.weaviate.io/weaviate/concepts/vector-quantization
- https://docs.weaviate.io/weaviate/search/hybrid
- https://docs.weaviate.io/weaviate/search/bm25
- https://docs.weaviate.io/weaviate/concepts/data
- https://docs.weaviate.io/weaviate/manage-collections/multi-tenancy
- https://docs.weaviate.io/weaviate/starter-guides/managing-resources/tenant-states
- https://docs.weaviate.io/weaviate/model-providers
- https://docs.weaviate.io/weaviate/concepts/filtering
- https://docs.weaviate.io/deploy
- https://weaviate.io/deployment
- https://docs.weaviate.io/weaviate/client-libraries
- https://docs.weaviate.io/weaviate/api
- https://docs.weaviate.io/weaviate/concepts/resources
- https://zilliz.com/vdbbench-leaderboard
- https://github.com/zilliztech/VectorDBBench
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/leaderboard_v2.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/leaderboard.json
- https://github.com/zilliztech/VectorDBBench/blob/main/vectordb_bench/results/WeaviateCloud/result_20230727_standard_weaviatecloud.json
- https://zilliz.com/customers/filevine
- https://zilliz.com/customers/openevidence
- https://zilliz.com/customers/exa
- https://zilliz.com/customers/airtable
- https://zilliz.com/customers/plaud
- https://zilliz.com/customers/read-ai
- https://zilliz.com/customers/meituan
- https://milvus.io/docs/zh/quickstart.md
- https://cloud.zilliz.com.cn/signup
- https://milvus.io/docs/rbac.md
- https://milvus.io/docs/integrations_overview.md
- https://milvus.io/docs/woodpecker_architecture.md
- https://milvus.io/docs/install_cluster-helm.md
- https://milvus.io/docs/install_cluster-milvusoperator.md
- https://milvus.io/docs/upsert-entities.md
- https://github.com/zilliztech/milvus-backup
- https://lfaidata.foundation/projects/
- https://docs.weaviate.io/weaviate/configuration/rbac
- https://docs.weaviate.io/deploy/configuration/backups
- https://weaviate.io/product/integrations
- https://github.com/langgenius/dify/blob/main/docker/.env.example
- https://docs.weaviate.io/deploy/configuration/replica-movement
- https://milvus.io/docs/search-with-embedding-lists.md
- https://milvus.io/docs/index-structarray-fields.md