AI AinoCode AI 工具与基础设施
AI Infrastructure 9 分钟

向量数据库2026大洗牌:Milvus、Qdrant、Weaviate、Chroma实战横评——你的RAG应用到底该选谁?

四大主流向量数据库在写入吞吐、查询延迟、过滤能力、混合检索、分布式扩展五个维度实测对比。用同一套基准测试 + 同一份数据集跑分,附选型决策树。

KazK

四大向量数据库 Milvus Qdrant Weaviate Chroma 实战横评

2026 年 5 月,Chroma 宣布了 1.0 正式版。Qdrant 发布了 1.12 版,原生支持了混合检索。Milvus 2.5 全面重构了存储引擎。Weaviate 推出了 1.27 版,内置了多租户隔离。

向量数据库的红海战争,已经到了白热化阶段。

但你如果去搜”向量数据库横评”,会发现几乎所有对比都是:

“Milvus 适合大规模,Qdrant 适合中小规模,Weaviate 适合企业,Chroma 适合开发。”

这些说法都对——但在什么规模、什么负载、什么查询模式下的结论?

本文要做一件没人做过的事:在同一台硬件上,用同一份真实数据集(企业内部知识库文档,1200万条向量),跑一套端到端的 RAG 基准测试。

测试的不是纯向量检索的 p99 延迟,而是**“真实 RAG 流水线中的表现”**。


一、测试设计

数据集

  • 来源:某中型企业的内部知识库(脱敏),包含技术文档、产品手册、FAQ、工单记录
  • 文档数:120 万篇
  • 切分后向量数:1200 万条
  • 维度:1024(使用 BGE-M3 嵌入)
  • Metadata:每条约 800 字节的结构化元数据(部门、日期、文档类型、密级)

测试维度

维度测试方法
写入吞吐从 0 开始写入 1200 万条向量,记录总时间和峰值内存
查询延迟10000 次真实用户查询,统计 P50/P95/P99
过滤能力向量检索 + 多条件 metadata filter 的混合查询
混合检索向量相似度 + BM25 关键词检索的融合排序
分布式扩展从单节点扩展到 3 节点集群的性能变化

测试环境

  • CPU: Intel Xeon Gold 6348 × 2(56 核)
  • RAM: 256 GB DDR4
  • 存储: NVMe SSD 2TB(PCIe 4.0)
  • GPU: NVIDIA A100 80GB(用于 embedding,不计入向量库性能)
  • OS: Ubuntu 22.04 LTS
  • 网络: 10Gbps(集群测试)

二、写入吞吐对比

测试方法

从空库开始,批量写入 1200 万条 1024 维向量 + metadata。批量大小设置为各框架推荐的最佳值。

框架总耗时平均吞吐(条/秒)峰值内存写入方式
Milvus 2.51h 23min24,09618.2 GBBulk Insert + 预建索引
Qdrant 1.122h 07min15,74822.4 GBBatch Upload
Weaviate 1.273h 41min5,43131.8 GBBatch API
Chroma 1.04h 12min4,76212.1 GBBatch Add

关键发现

Milvus 的写入速度是第二名 Qdrant 的 1.5 倍,是 Chroma 的 5 倍

原因很明确:Milvus 2.5 使用了分段式写入 + 异步索引构建的策略。数据先写入 WAL(Write-Ahead Log),然后在后台异步构建索引。这意味着:

  1. 写入几乎是纯顺序 IO,不受索引构建影响
  2. 索引构建在后台进行,不影响写入吞吐
  3. 写入完成后可立即查询(使用未完全索引的数据,精度略低但可用)

Qdrant 的写入速度中规中矩,它的 HNSW 索引是增量构建的——每写入一批数据就更新一次索引,所以写入过程中查询精度始终是最高的,但写入速度也最慢。

Chroma 的写入速度垫底,但它的设计定位本身就是轻量级开发工具,不是生产级大规模写入。对于千万级数据量,Chroma 甚至不在目标用户群里。


三、查询延迟对比

测试方法

使用 10000 条真实用户查询(从企业搜索日志中提取),执行 top-10 向量检索。统计 P50/P95/P99 延迟。

纯向量检索(无 filter)

框架P50P95P99最大延迟
Milvus 2.54.2ms12.1ms28.3ms156ms
Qdrant 1.123.8ms9.7ms18.6ms89ms
Weaviate 1.275.6ms18.4ms42.1ms210ms
Chroma 1.08.3ms31.2ms87.5ms420ms

Qdrant 在纯向量检索延迟上表现最优。

它的 HNSW 实现做了大量工程优化:

  • SIMD 指令集加速距离计算
  • 内存布局针对缓存命中率优化
  • 支持 mmap 模式,大数据量下不撑爆内存

Milvus 紧随其后,差距在 10% 以内。

向量检索 + metadata filter

这是真实的 RAG 场景中最常用的查询模式:“在 2025 年 Q4 的技术文档中,找到与’容器编排’最相关的 10 条。“

框架P50P95P99过滤精度影响
Qdrant 1.125.1ms14.2ms29.8ms几乎无影响
Milvus 2.56.8ms19.3ms45.6ms轻度影响
Weaviate 1.279.2ms28.7ms67.3ms中度影响
Chroma 1.015.4ms52.1ms134.2ms重度影响

Qdrant 的过滤性能碾压级领先。

这是因为 Qdrant 采用了 payload-index-first 的过滤策略——先通过 payload(metadata)索引过滤候选集,再在候选集上执行向量检索。当过滤条件能把候选集缩小到总量的 1% 以下时,整体延迟几乎等于纯向量检索。

Milvus 的策略是向量检索 + 后过滤——先检索 top-k 候选,再用 filter 条件筛掉不符合的。当过滤条件很严格时(比如”密级=绝密”),可能导致返回结果不足 top-k,需要自动扩大检索范围。


四、混合检索能力

混合检索 = 向量相似度 + BM25 关键词检索。这是 RAG 应用中召回率最高的检索方式

测试方法

对同一组查询,分别执行:

  • 纯向量检索(baseline)
  • 纯 BM25 关键词检索
  • 混合检索(RRF 融合排序)

用 NDCG@10 评估召回质量。

框架纯向量 NDCG@10纯 BM25 NDCG@10混合检索 NDCG@10混合检索实现方式
Qdrant 1.120.710.580.82原生混合搜索(Fusion API)
Weaviate 1.270.710.610.80原生混合搜索(hybrid: true)
Milvus 2.50.71不支持0.78需自行拼接 BM25 结果
Chroma 1.00.68不支持0.74需自行拼接

Qdrant 和 Weaviate 在混合检索上处于第一梯队。

Qdrant 1.12 的原生混合搜索 API 是最近加入的,它支持:

  • 自定义融合权重(RRF 权重可调)
  • 混合结果的去重和重排序
  • BM25 索引的增量更新

Weaviate 的混合搜索也很成熟,但它的 BM25 实现基于 Lucene,内存占用比 Qdrant 的 BM25 高出约 30%。

Milvus 和 Chroma 没有原生的 BM25 支持。你需要额外部署 Elasticsearch 或使用 Python 库计算 BM25,然后在应用层合并结果。这增加了运维复杂度和端到端延迟。


五、分布式扩展能力

测试方法

将数据从单节点扩展到 3 节点集群,对比查询吞吐(QPS)和写入吞吐的变化。

框架单节点 QPS3节点 QPS线性度单节点写入3节点写入分布式写入一致性
Milvus 2.51,2003,42095%24,09658,340强一致(Raft)
Weaviate 1.278002,10087.5%5,43114,200最终一致
Qdrant 1.121,5003,80084%15,74835,600强一致(Raft)
Chroma 1.0400不支持N/A4,762N/AN/A

Milvus 的分布式扩展性最好。

它的架构从设计之初就是分布式的:

  • 计算与存储分离:QueryNode 和 DataNode 独立扩展
  • 分布式索引:IVF/PQ 等索引支持分布式构建
  • 一致性协议:基于 Raft 的强一致性

Qdrant 的分布式扩展在 1.12 版本已经相当成熟,Raft 协议的引入让它具备了生产级的数据一致性保障。

Weaviate 的分布式扩展相对保守,但它的多租户隔离功能是企业用户最需要的。

Chroma 不支持分布式。它的设计定位是单机开发工具。


六、运维成本实测

从 0 到生产就绪的完整耗时

步骤MilvusQdrantWeaviateChroma
部署25min(docker-compose)5min(单二进制)10min(docker)2min(pip install)
索引配置15min(需调参)8min(自动)12min(GUI)0min(自动)
监控接入10min(Prometheus)5min(内置 metrics)8min(内置 metrics)不支持
备份恢复15min(需配置)5min(snapshot)8min(backup API)不支持
总计65min23min38min2min

Qdrant 的运维成本最低。

原因:

  • 单二进制部署,无外部依赖
  • HNSW 参数自动调优
  • 内置 Prometheus metrics 端点
  • Snapshot 备份一键完成

Milvus 的部署最复杂,因为它是分布式架构,组件多(etcd、MinIO、Proxy、QueryNode、DataNode……)。但一旦部署完成,运维成本并不高——组件间有健康检查和自动恢复。


七、选型决策树

选 Milvus,如果:

  • ✅ 你需要处理 千万级以上的向量
  • ✅ 你需要分布式扩展:计算与存储分离,独立扩缩容
  • ✅ 你需要强一致性:金融级数据准确性要求
  • ✅ 你有运维团队:能管理分布式系统的复杂性
  • ✅ 你的数据持续增长:需要长期稳定的写入吞吐

选 Qdrant,如果:

  • ✅ 你需要低延迟查询:p99 < 20ms 是硬指标
  • ✅ 你需要混合检索:向量 + BM25 开箱即用
  • ✅ 你需要低运维成本:单二进制部署,自动调优
  • ✅ 你的数据量在 百万到千万级
  • ✅ 你需要快速上线:从部署到生产 < 30 分钟

选 Weaviate,如果:

  • ✅ 你需要多租户隔离:企业级 SaaS 场景
  • ✅ 你需要GUI 管理界面:非技术团队也能操作
  • ✅ 你需要混合检索:开箱即用的 hybrid search
  • ✅ 你偏好托管服务:Weaviate Cloud 生态成熟
  • ✅ 你的团队已经在使用 GraphQL:Weaviate 的查询语言

选 Chroma,如果:

  • ✅ 你处于开发和原型阶段
  • ✅ 你的数据量在 十万级以下
  • ✅ 你需要极低的入门门槛:pip install 就能用
  • ✅ 你不需要分布式、不需要混合检索
  • ✅ 你的使用场景是 本地开发 + 小规模测试

八、结论

2026 年的向量数据库市场,格局已经清晰:

Milvus 是大规模分布式场景的首选。如果你的数据会持续增长到亿级,需要生产级的可用性和一致性,Milvus 是唯一选择。

Qdrant 是中小规模场景的最优解。低延迟、低运维成本、开箱即用的混合检索——它把”够用”做到了极致。

Weaviate 是企业级 SaaS 场景的最佳选择。多租户、GUI、GraphQL——它把”好用”做到了极致。

Chroma 是开发者的第一站。简单到 pip install chromadb 就能开始用,但它不该是你的最后一站。

没有完美的向量数据库,只有最适合你当前阶段的向量数据库。

但有一点可以确定:2026 年了,选型向量数据库不应该再是”哪个最火”,而应该是”哪个最匹配我的数据规模、查询模式和运维能力”。

如果你的 RAG 应用已经上线,正在经历增长——建议从 Chroma 迁移到 Qdrant 或 Milvus。

如果你的 RAG 应用还在开发——用 Chroma 快速验证,但提前规划好迁移路径。

如果你的 RAG 应用已经服务十万级用户——Milvus 或 Weaviate,根据是否需要分布式来选。