Milvus 和 Vespa 对比:向量数据库与搜索引擎怎么选

Milvus 和 Vespa 对比,首先要分清两类系统:Milvus 是存算分离的分布式向量数据库,Vespa 是 Yahoo 开源的完整搜索与服务引擎,数据、索引和排序都在 content 节点的本地磁盘与内存里。Milvus 加一个无状态节点就从对象存储加载 segment;Vespa 加一个 content 节点要重新分布 bucket,官方文档说这可能需要数小时。需要弹性扩展的十亿级向量检索、运维简单,选 Milvus;多阶段排序、机器学习模型在服务链路里是产品核心,选 Vespa。

  • Apache-2.0,GitHub 40K+ star
  • 可扩展到数百亿向量
  • 存储与计算分离
  • 多租户向量数据库:partition key 支持百万级租户
Milvus 各类节点在共享对象存储上独立扩缩;Vespa content 节点在本地盘上持有 bucket,集群变化时要重新分布。
Milvus 各类节点在共享对象存储上独立扩缩;Vespa content 节点在本地盘上持有 bucket,集群变化时要重新分布。
Milvus 与 Zilliz Cloud 用户
  • Salesforce
  • Walmart
  • NVIDIA
  • eBay
  • IBM
  • Cisco
  • Roblox
  • Reddit
  • Exa.ai
  • OpenEvidence
  • Read.ai
  • Plaud
  • Filevine

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

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

Vespa 是经典搜索引擎的分层模型:无状态 container 集群处理查询,有状态 content 集群存数据和索引,config server 集群(通常 3 节点,基于 ZooKeeper)保存部署配置。每个 content 节点跑 proton 进程,document store 在本地磁盘,attribute 和 HNSW 图在内存。新增 content 节点会自动触发 bucket 重新分布,官方文档写明这可能需要数小时,期间节点负载会升高。

数百亿Milvus Distributed 支持的向量规模查看来源
百万级partition key 支持的单 collection 租户数查看来源
40K+milvus-io/milvus GitHub star查看来源
Vespa 向量检索与 Milvus 的扩展性对比(依据双方官方文档)
能力MilvusVespa(自建)
架构存算分离:proxy、streaming、query、data 节点无状态 container 节点、有状态 content 节点、ZooKeeper 支撑的 config server
数据存放对象存储(S3、MinIO、Azure Blob、GCS),WAL 也在其中各 content 节点本地磁盘与内存(document store、attribute、索引)
扩容方式加 query 节点,从对象存储加载 segment在 services.xml 加 content 节点并重新部署,bucket 自动重新分布
节点独立扩缩query、streaming、data 节点分别扩缩container 与 content 集群分别扩缩;content 节点同时承担数据和排序
数据超过内存tiered storage 按需拉取字段数据tensor 字段和 HNSW 图都是内存数据结构
大规模多租户partition key 支持百万级租户;也可按 database、collection、partition 隔离streaming search 模式服务大量小型个人索引,按 document ID 分组
实时写入与更新写入进 streaming WAL 后立即可查,每次请求可选 Strong、Bounded、Session、Eventually 一致性;按主键 upsert 和部分字段更新写入成功响应后立即在搜索索引里可见;按 document ID 做部分更新

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

公开排行榜背后的开源工具 VectorDBBench 有 Vespa 客户端,但排行榜上没有发布 Vespa 的结果,所以这里只展示 Milvus 和 Zilliz Cloud 的数据。Vespa 博客引用过 Marqo 在 5000 万向量上的内部测试,但没有硬件、索引、版本和方法,不放进图里。想拿到自己数据上的向量数据库性能对比,用同样的数据集和硬件对两者各跑一遍 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,配置标签按原始结果列出。结果随配置变化,请在自己的数据上复测。

过滤检索吞吐(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 排行榜(zilliz.com/vdbbench-leaderboard),系统标签原样引用。Vespa 没有已发布的结果;VectorDBBench 仓库自带 Vespa 客户端(pyvespa,HNSW),可以自己跑。结果因配置而异。

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

免费试用 Zilliz Cloud

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

Vespa 首先是搜索引擎:一套 HNSW 实现加精确检索、一整套排序体系,tensor 框架让一个文档可以带多个向量。Milvus 首先是向量数据库:索引类型多,服务端内置 BM25 做混合检索,StructArray 字段支持 ColBERT 式多向量检索,重排序函数直接在数据库里跑。做开源向量数据库选型时,先想清楚产品核心是排序逻辑还是向量规模。

功能对比:索引类型、GPU、多向量 tensor、混合检索 BM25、排序、过滤、多租户、部署方式、RAG 框架、许可证与社区
功能MilvusVespa
稠密向量索引类型HNSW、IVF(FLAT、SQ8、PQ、RaBitQ)、SCANN、DiskANN、GPU(CAGRA、IVF、暴力检索)HNSW(改良版)或精确 nearestNeighbor
量化SQ8、PQ、PRQ、RaBitQ;HNSW_SQ、HNSW_PQ、HNSW_PRQ;FP16、BF16、INT8 向量bfloat16 与 int8 tensor;二值化向量配 hamming 距离
GPUGPU 建索引与检索(CAGRA、GPU IVF、暴力检索)GPU 用于 global-phase 排序中的 ONNX 模型推理
稀疏向量与 BM25SPARSE_INVERTED_INDEX;内置 BM25 函数,服务端把原始文本转成稀疏向量文本索引配 bm25、nativeRank 排序特征
混合检索单次查询多个向量字段,RRF 或加权 ranker 融合nearestNeighbor 与文本算子写在同一查询;global-phase 用 reciprocal_rank_fusion
一个文档多个向量最多 10 个向量字段;StructArray 的 EmbeddingList 字段用 MAX_SIM 打分,适配 ColBERT、ColPalimixed tensor 一个字段放任意多个向量,共用一个 HNSW 索引、按最近的向量匹配;内置 colbert-embedder、splade-embedder
重排序decay、boost、model 重排序函数(vLLM、TEI、Cohere、Voyage AI 等)rank profile 的 first-phase、second-phase、global-phase 表达式;ONNX 模型最大 2 GB
过滤标量与 JSON path 索引(INVERTED、BITMAP、STL_SORT),一次调用完成过滤检索attribute fast-search 过滤,HNSW 前置或后置过滤
多租户database、collection、partition 或 partition keydocument group + streaming search;streaming 与 indexed 模式不建议混在一个集群
部署方式Milvus Lite、Standalone、Distributed、Zilliz Cloud自建多节点(Docker、Kubernetes)、Vespa Cloud(AWS、Azure、GCP)
RAG 框架集成LangChain、LlamaIndex、Haystack、Dify、DSPy、n8n 等LangChain VespaRetriever、LlamaIndex VespaVectorStore、pyvespa
许可证与语言Apache-2.0;Go 和 C++Apache-2.0;C++ 和 Java
SDK 语言Python、Java、Go、Node.js、C#、C++、Rust、RESTfulpyvespa、Vespa CLI、Java feed client、HTTP document / query API
社区与出身LF AI & Data 基金会毕业项目;GitHub 40K+ starYahoo 于 2017 年开源,2023 年独立为 Vespa.ai 公司;GitHub 5K+ star

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

两者的成本都是服务索引的节点内存,Vespa 还要加上查询时评估 rank profile 和 ONNX 模型的 CPU。Milvus 靠量化 HNSW、DiskANN 和 tiered storage 压内存;Vespa 要按 attribute 和 HNSW 图常驻内存给 content 节点配容量。

Milvus 和 Vespa 成本与运维对比:Kubernetes、依赖与成本来源
项目MilvusVespa
生产环境不用 KubernetesMilvus Standalone:单个 Docker 镜像,内嵌 Woodpecker WAL,可到 1 亿向量自建多节点跑在虚拟机或 Docker 上:config server、container 和 content 集群
依赖组件etcd 和对象存储(MinIO 或 S3);Woodpecker 取代 Kafka / Pulsar;Kubernetes 上用 Helm 或 Milvus Operator3 节点 config server 集群内置 ZooKeeper;自建集群有 Kubernetes 指南

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

Vespa 是成熟的搜索引擎,排序体系很少有系统能比。找 Vespa 替代方案的团队,通常是想要弹性扩展和更简单的运维;如果排序逻辑本身就是产品,Vespa 的设计反而是优势。

  • 相关性依赖多阶段排序,需要在服务链路里评估 ONNX、XGBoost 等学习模型。
  • 应用以文本检索为主,结构化字段、分组和排序表达式都写在同一个 schema 里。
  • 团队已经在跑 Vespa,熟悉 application package、services.xml 和 content 集群。
  • 要用 streaming 模式对海量小型用户语料做个人索引检索。
  • 希望整个搜索应用都交给 Vespa Cloud 及其托管的部署流水线。

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

常见问题

Milvus 和 Vespa 谁更快?

VectorDBBench 没有发布 Vespa 的结果。Cohere 1M 测试中,Milvus-16c64g-sq4u-fp16-force_merge 为 9,575.69 QPS(P99 2.3 ms),ZillizCloud-8cu-perf 为 13,316.23 QPS(P99 2 ms)。VectorDBBench 自带 Vespa 客户端,可以自己跑同样的测试。

Vespa 是什么?是向量数据库吗?

Vespa 把自己定义为在服务时存储、计算和排序大数据的 serving engine,Vespa 向量检索(HNSW 和精确 nearestNeighbor)是这个引擎里的一项能力。Milvus 是专为向量设计的存算分离向量数据库。

Vespa 比 Elasticsearch 好吗?

两者都是搜索引擎,文本、结构化和向量检索都跑在本地盘分片上;Vespa 多了带 ONNX 模型的分阶段排序。Milvus 是两者的向量优先替代:segment 在对象存储、索引类型更多、服务端 BM25。详见 Milvus 和 Elasticsearch 对比。

Vespa 能做 RAG 吗?

能。Vespa 有 LangChain 和 LlamaIndex 集成,引擎内置 ColBERT、SPLADE 等 embedder。Milvus 集成 LangChain、LlamaIndex、Haystack 和 Dify,服务端 BM25 稀疏向量与稠密结果融合后用于 RAG 召回。

Vespa 能扩展到十亿级向量吗?

Vespa 靠加 content 节点扩展,bucket 自动重新分布,官方文档说可能需要数小时;tensor 字段和 HNSW 图都在各 content 节点内存里。Milvus Distributed 文档标称在对象存储上支持数百亿向量。

Milvus 支持像 Vespa 那样一个文档多个向量吗?

支持。collection 默认最多 10 个向量字段,StructArray 字段还能在一个实体里存一组向量,EmbeddingList 检索用 MAX_SIM 打分,适配 ColBERT 和 ColPali。Vespa 用 mixed tensor 存同样的数据,按最近的向量匹配。

Milvus 比 Vespa 更容易运维吗?

Milvus Lite 直接跑在 pymilvus 里;Standalone 是一个 Docker 镜像,适合约 1 亿向量以内;Distributed 跑在 Kubernetes 上。自建 Vespa 需要 config server 仲裁集群、container 和 content 集群,每次改 schema 都要部署 application package。

Vespa 是开源的吗?

是的。Vespa 和 Milvus 都是 Apache-2.0,都能自建;Vespa 由 Yahoo 于 2017 年开源,Milvus 是 LF AI & Data 基金会毕业项目。托管服务分别是 Vespa Cloud 和 Zilliz Cloud,后者是客户端 API 一致的全托管 Milvus。

不想自己运维集群?

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

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