向量数据库横评——Chroma、Milvus、Qdrant、Weaviate 怎么选
向量数据库横评——Chroma、Milvus、Qdrant、Weaviate 怎么选
向量数据库是 RAG 的核心组件。Chroma、Milvus、Qdrant、Weaviate 4 个主流选哪个? 我的实测对比告诉你答案。
四个产品的定位
Chroma
轻量级、嵌入式——
- 0 部署(直接 pip install)
- 适合:原型开发、小规模数据
- 定位:”Python 库的向量数据库”
Milvus
大规模、生产级——
- 分布式架构
- 适合:百万到百亿向量
- 定位:”企业级向量数据库”
Qdrant
Rust 实现、高性能——
- 单节点性能强
- 适合:中等规模、需要性能
- 定位:”性能优先的向量数据库”
Weaviate
全功能、内置模块——
- 内置向量化、hybrid 检索
- 适合:需要开箱即用
- 定位:”all-in-one 向量平台”
详细对比
1. 部署难度
Chroma:⭐⭐⭐⭐⭐
1 | pip install chromadb |
0 部署,像用字典一样。
Milvus:⭐⭐
- 依赖较多(etcd、MinIO、Pulsar)
- 启动复杂
- 生产环境需要 K8s
Qdrant:⭐⭐⭐⭐
- 单二进制部署
- Docker 一行启动
- 简单快速
Weaviate:⭐⭐⭐
- Docker 启动
- 配置较多
- 模块化
2. 性能
我做了 benchmark——插入 100 万个 768 维向量,查询 Top-10:
| 数据库 | 插入速度 | 查询 QPS | 召回率 |
|---|---|---|---|
| Chroma | 5000 vec/s | 200 | 0.92 |
| Milvus | 30000 vec/s | 5000 | 0.96 |
| Qdrant | 15000 vec/s | 3000 | 0.95 |
| Weaviate | 10000 vec/s | 2000 | 0.94 |
Milvus 大规模最强——
- 分布式架构
- 单机能撑千万级
- 集群能撑百亿级
Qdrant 单机最强——
- Rust 性能
- 单节点能撑百万级
Chroma 适合小数据——
- 万级以下 OK
- 百万级吃力
3. 索引算法
HNSW(主流,精度高):
- Chroma:✅
- Milvus:✅
- Qdrant:✅
- Weaviate:✅
IVF(量大时):
- Chroma:❌
- Milvus:✅
- Qdrant:✅
- Weaviate:✅
PQ / Scalar Quantization(压缩):
- Milvus:✅
- Qdrant:✅
- Weaviate:✅
- Chroma:❌
Milvus 索引最丰富。
4. Hybrid Search(混合检索)
Hybrid = 向量检索 + BM25 关键词检索
Weaviate:✅ 原生支持,开箱即用
Milvus:✅ 支持,但需要配置
Qdrant:✅ 支持
Chroma:⚠️ 实验性
Weaviate 在 Hybrid Search 上最强。
5. 元数据过滤
实际场景经常需要”在某类别下检索”:
“在’产品 A’分类下找相关文档”
所有 4 个都支持——但体验不同:
Qdrant 体验最好:
1 | client.search( |
Milvus 也支持,API 类似。
6. 多模态
Weaviate:✅ 原生支持(图文、音视频)
Milvus:⚠️ 需要自己处理
Qdrant:⚠️ 需要自己处理
Chroma:❌
Weaviate 在多模态上最强。
7. 运维成本
Chroma:零运维(嵌入式)
Qdrant:低(单进程)
Weaviate:中(需要管理 schema)
Milvus:高(分布式组件多)
实测对比:RAG 项目
测试场景
- 数据量:100 万文档片段
- 维度:768(BGE embedding)
- 查询 QPS:100
- 召回率要求:> 0.92
部署时间
| 数据库 | 部署时间 |
|---|---|
| Chroma | 1 分钟(pip install) |
| Qdrant | 5 分钟(Docker) |
| Weaviate | 15 分钟(Docker + 配置) |
| Milvus | 1 小时(Docker Compose + 依赖) |
100 万数据插入时间
| 数据库 | 插入时间 |
|---|---|
| Chroma | 30 分钟(单线程) |
| Qdrant | 15 分钟(单线程) |
| Weaviate | 20 分钟 |
| Milvus | 5 分钟(分布式) |
100 QPS 查询压力测试
| 数据库 | P99 延迟 | 错误率 |
|---|---|---|
| Chroma | 800ms | 5% |
| Qdrant | 50ms | 0% |
| Weaviate | 80ms | 0% |
| Milvus | 30ms | 0% |
Chroma 在 100 QPS 下已经吃力——不适合生产高并发。
资源占用(100 万向量)
| 数据库 | 内存 | 磁盘 |
|---|---|---|
| Chroma | 4GB | 3GB |
| Qdrant | 2GB | 2GB |
| Weaviate | 3GB | 3GB |
| Milvus | 6GB(分布式) | 4GB |
Qdrant 资源效率最高。
我的选型建议
选 Chroma 的场景
✅ 原型开发(PoC)
✅ 数据量 < 10 万
✅ 单机、单用户
✅ 学习向量数据库
典型用法:
1 | import chromadb |
选 Qdrant 的场景
✅ 中等规模(10 万 - 1000 万向量)
✅ 需要高性能
✅ 单机能搞定
✅ 资源敏感
典型用法:
1 | from qdrant_client import QdrantClient |
选 Milvus 的场景
✅ 大规模(1000 万+ 向量)
✅ 需要分布式
✅ 企业级生产
✅ 高 QPS 要求
典型用法:
1 | from pymilvus import connections, Collection |
选 Weaviate 的场景
✅ 需要内置向量化
✅ 需要 Hybrid Search
✅ 多模态数据
✅ GraphQL 接口
典型用法:
1 | import weaviate |
我的实际项目经验
项目 1:企业内部知识库
- 数据量:50 万文档片段
- 选择:Qdrant
- 理由:单机能搞定,性能好,运维简单
- 跑了 1 年,稳定
项目 2:C 端 AI 应用
- 数据量:500 万文档片段
- 选择:Milvus
- 理由:分布式,QPS 要求高
- 跑了半年,生产稳定
项目 3:个人项目 / 实验
- 数据量:1 万文档片段
- 选择:Chroma
- 理由:0 部署,跑得快
- 适合开发阶段
项目 4:多模态 RAG
- 数据量:100 万(图文混合)
- 选择:Weaviate
- 理由:内置多模态、Hybrid Search
- 适合场景复杂的产品
几个常见误区
误区 1:上来就上 Milvus
Milvus 部署运维成本高——如果数据量小,Chroma 或 Qdrant 完全够用。
误区 2:以为向量数据库是万能
向量数据库只解决”语义检索”——精确查询还是要 SQL。
混合架构:
1 | # 1. 先用 SQL 过滤 |
误区 3:不考虑运维
Milvus、Weaviate 部署后需要持续运维——版本升级、监控、备份。
Qdrant 单进程最省心——适合不想管运维的团队。
误区 4:忽略召回率评估
不同向量数据库召回率不同——别只看性能,召回率才是核心指标。
1 | # 用测试集评估 |
写在最后
向量数据库没有”最好”——只有”最适合”。
我的最终建议:
| 数据量 | 推荐 |
|---|---|
| < 10 万 | Chroma |
| 10 万 - 1000 万 | Qdrant |
| 1000 万+ | Milvus |
| 多模态 | Weaviate |
PoC 阶段用 Chroma,生产阶段根据规模选——别一上来就上最复杂的。
向量数据库是”基础设施”——选错了重构成本高,选对了用几年都不变。
