向量数据库:RAG时代的基石
所有RAG系统都需要向量数据库。2026年市场已经从"有没有"过渡到"哪个好"——选型不当会带来性能瓶颈、扩展困难、功能不足等问题。
三大主流方案
Milvus:大规模分布式
架构特点
Milvus采用存算分离架构:
- Coordinator:元数据管理和调度
- Worker Node:查询节点和数据节点分离
- 对象存储:数据持久化(S3/MinIO)
- 消息队列:变更数据捕获(Kafka/Pulsar)
核心优势
- 水平扩展:支持十亿级向量
- 混合检索:向量+标量过滤
- 多索引:HNSW、IVF、DiskANN、GPU索引
- 云原生:K8s原生部署
适用场景
- 大规模生产环境(亿级向量)
- 需要高可用和水平扩展
- 团队有K8s运维能力
注意事项
- 部署复杂度高(微服务架构)
- 小规模场景(<100万向量)过重
- 内存占用较大
Qdrant:高性能轻量级
架构特点
Qdrant用Rust编写,单二进制部署:
- Collection:数据集合
- Payload:向量关联的元数据
- 量化支持:标量量化(SQ8)、乘积量化(PQ)、二进制量化
- 磁盘索引:支持大于内存的数据集
核心优势
- 简单部署:单二进制+Docker
- 高性能:Rust实现,无GC暂停
- 丰富过滤:Payload过滤能力强大
- 量化压缩:内存占用极低
适用场景
- 中小规模(<1亿向量)
- 快速原型开发
- 对延迟敏感的场景
- 运维资源有限的团队
注意事项
- 分布式能力不如Milvus
- 不支持多租户隔离
- 生态插件较少
Weaviate:AI原生设计
架构特点
Weaviate定位为"AI原生数据库":
- GraphQL API:内置API层
- 模块化向量化:内置多种embedding模型
- 对象存储+向量索引:一体化设计
- 多模态支持:图像/文本/视频嵌入
核心优势
- 开箱即用:内置embedding模型
- GraphQL接口:前端友好
- 多模态:原生支持多种数据类型
- 混合检索:BM25+向量融合
适用场景
- 快速构建AI应用
- 需要多模态检索
- 前端团队主导的项目
- 不想单独管理embedding流程
注意事项
- 性能不如Qdrant极致
- 大规模部署经验较少
- Go实现,性能依赖GC调优
性能对比
写入性能
| 数据库 | 单线程写入 | 批量写入(10K) | 索引构建速度 |
|---|---|---|---|
| Milvus | 5K/s | 50K/s | 中等 |
| Qdrant | 8K/s | 80K/s | 快 |
| Weaviate | 3K/s | 30K/s | 中等 |
查询性能
| 数据库 | p50延迟 | p99延迟 | 并发QPS |
|---|---|---|---|
| Milvus | 5ms | 20ms | 10K+ |
| Qdrant | 2ms | 8ms | 5K+ |
| Weaviate | 8ms | 30ms | 3K+ |
注:测试条件为1M向量,768维,HNSW索引,单节点。实际性能受数据规模、硬件、配置影响。
功能对比
| 功能 | Milvus | Qdrant | Weaviate |
|---|---|---|---|
| 混合检索 | ✅ | ✅ | ✅ |
| 标量过滤 | ✅ | ✅ | ✅ |
| 多向量 | ✅ | ✅ | ✅ |
| 向量量化 | ✅ | ✅ | ✅ |
| 动态Schema | ✅ | ✅ | ✅ |
| 多模态 | ✅(需外部) | ✅(需外部) | ✅(内置) |
| 分片 | ✅ | ✅ | ✅ |
| 副本 | ✅ | ✅ | ✅ |
| RBAC | ✅ | ✅ | ✅ |
| 备份恢复 | ✅ | ✅ | ✅ |
选型决策树
数据规模?
├─ < 10万 → 用SQLite + numpy就够了
├─ 10万-100万 → Qdrant(单节点)
├─ 100万-1亿 → Qdrant(集群) 或 Milvus
└─ > 1亿 → Milvus
部署复杂度容忍度?
├─ 要简单 → Qdrant
├─ 可接受中等 → Weaviate
└─ 有运维团队 → Milvus
需要多模态?
├─ 是 → Weaviate(内置) 或 Milvus
└─ 否 → 任意
延迟要求?
├─ < 5ms → Qdrant
├─ < 10ms → 任意
└─ < 50ms → 任意(包括远程部署)
工程实践建议
索引选择
- HNSW:默认选择,查询快但内存大
- IVF:大数据量+内存有限时
- DiskANN:数据远超内存时
- 二进制量化:内存极致优化(精度有损)
量化策略
实践中的量化选择:
- 对精度要求高:SQ8标量量化
- 对内存敏感:PQ乘积量化
- 极致压缩:二进制量化(1/32内存)
数据更新
向量数据库的数据更新策略:
- 全量重建:适合数据变化不频繁的场景
- 增量更新:适合频繁更新的场景
- 双写过渡:重建索引时不停服
总结
向量数据库选型没有"银弹"——Milvus胜在大规模和分布式,Qdrant胜在性能和简洁,Weaviate胜在AI原生体验。2026年的趋势是三者都在互相学习——Milvus简化部署,Qdrant增强分布式,Weaviate优化性能。对于新项目,建议从Qdrant开始原型验证,根据规模需求再决定是否迁移到Milvus。