深色模式
向量数据库选型总览
摘要:本文面向需要在 RAG / 语义检索 / 推荐系统中落地向量库的 SRE 与平台工程师。我们给出一张可操作的选型决策图,对比 6 类主流向量数据库(Milvus、Qdrant、Weaviate、pgvector、Chroma、Pinecone)在部署形态、可支撑规模、混合检索、访问控制、运维与成本上的差异,并指出选型中最常被低估的「隐性运维成本」与「数据合规边界」。覆盖版本:Milvus 2.4/2.5、Qdrant 1.11+、Weaviate 1.25+、pgvector 0.7+、Chroma 0.5+、Pinecone serverless。注意各厂商版本与定价按季度变化,具体数字以官方页面为准(见文末,访问日期 2026-10-09)。
核心概念
向量数据库的本质,是在「高维稠密向量」上做**近似最近邻(ANN)**检索,并叠加标量元数据过滤、写入/删除、持久化与分布式能力。它与纯 ANN 库(如 FAISS、hnswlib)的关键差异在于:
| 能力 | 纯 ANN 库(FAISS/hnswlib) | 向量数据库 |
|---|---|---|
| 持久化 | 内存为主,重启易丢 | 落盘 + 对象存储 |
| CRUD | 基本无 | 完整 insert/delete/update |
| 元数据过滤 | 无 | JSON / 标量条件 |
| 分布式 | 无 | 分片、副本、协调 |
| 监控/权限 | 无 | Prometheus、RBAC |
选型时最容易踩的坑:把「demo 能跑」当成「生产能扛」。FAISS 在百万级 demo 很快,但缺持久化、过滤、并发控制,生产上基本必须换向量数据库(来源:besthub.dev 生产就绪 Milvus 实践,访问 2026-10-09)。
架构与原理:选型维度
六个维度贯穿所有选型:
- 部署形态:自托管 vs 全托管 SaaS。
- 规模天花板:单机可达上亿,分布式可达十亿级。
- 混合检索:dense+BM25 是否原生支持。
- 访问控制:集合/租户级 RBAC、命名空间隔离。
- 运维负担:组件数、升级、备份、扩缩容。
- 总拥有成本(TCO):不止 License,还包括算力、内存、on-call。
选型对比表
下表综合自 2026 年多篇横向评测与官方文档(来源见参考资料;量级为厂商公开口径,非本会话实测)。
| 数据库 | 语言/形态 | 可支撑规模 | 混合检索 | 访问控制 | 托管选项 | 开源 | 最适用 |
|---|---|---|---|---|---|---|---|
| Pinecone | SaaS only | 十亿级(serverless) | 是 | Namespace RBAC | 仅 SaaS | 否 | 零运维企业 RAG |
| Weaviate | Go / 云+自托管 | 数亿级 | 是(BM25+vector) | 多租户 | 是 | 是 | 混合检索、多模态 |
| Qdrant | Rust / 云+自托管 | 数亿~十亿级 | 是 | 集合级 RBAC | 是 | 是 | 性能/复杂过滤 |
| Milvus | Go/C++ / 云+自托管 | 十亿级 | 是 | RBAC+partition | 是(Zilliz) | 是 | 超大规模分布式 |
| pgvector | Postgres 扩展 | ≈50M 内 | 有限(手动组合) | Postgres 原生 | 经 RDS/Supabase | 是 | 已在 Postgres 的团队 |
| Chroma | 自托管/云 | 百万级 | 否 | 有限 | 是 | 是 | 原型/个人项目 |
Qdrant 与 Weaviate 的取舍
若你的查询是「找相似且 X 且 Y 且 Z」这类带复杂元数据过滤的检索,Qdrant 把过滤做在 HNSW 遍历过程中(query-time filtering during traversal),无需先召回再后过滤,延迟与召回都更稳。若你想要数据库内直接做 embedding / rerank / 生成(text2vec、generative 模块),Weaviate 把一整条 AI 管线织进查询路径,少搭一个微服务(来源:markaicode 2026 对比与 Weaviate 架构文,访问 2026-10-09)。
别把「开源」当「免费」
Qdrant / Weaviate / Milvus 的 Apache/自有开源协议消除了 License 成本,但不消除 TCO:自托管仍需真实算力、内存、运维人力与 on-call。Milvus 集群由 etcd + MinIO/S3 + Pulsar/Kafka + 多个 Coordinator/Node 组成,是小 Qdrant 部署的数倍 YAML 量,故障面也更多(来源:echoesofthemachine K8s 向量库对比,访问 2026-10-09)。规模低于约 10M 向量时,简单方案通常更划算。
生产实践:用「规模 + 运维意愿」收敛选项
落地建议(按优先级):
- 原型期:Chroma 或 Qdrant 本地容器,最快出 demo;LangChain/LlamaIndex 抽象层让后续切换代价低。
- 已在 Postgres 且 <10M:pgvector,不加新基础设施,事务一致性直接复用。
- 自托管生产、重性能/过滤:Qdrant(Rust 栈内存友好、冷启动快)。
- 多模态/混合检索产品:Weaviate,省掉独立 embedding 管线。
- 十亿级 + GPU 索引:Milvus 分布式,组件多但水平扩展能力最完整。
- 零运维:Pinecone serverless,按量付费。
部署/配置步骤(以最小可用验证为例)
快速验证一个候选是否契合,先起一个单节点容器:
bash
# Qdrant 单节点(验证过滤+量化)
docker run -d --name qdrant -p 6333:6333 -p 6334:6334 qdrant/qdrant:latest
# Weaviate 单节点(关匿名访问,开持久化)
docker run -d --name weaviate \
-p 8080:8080 -p 50051:50051 \
-e QUERY_DEFAULTS_LIMIT=25 \
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED='false' \
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
-e DEFAULT_VECTORIZER_MODULE=none \
-v weaviate_data:/var/lib/weaviate \
semitechnologies/weaviate:1.25.41
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
版本号是[版本相关]
上面 qdrant/qdrant:latest 与 semitechnologies/weaviate:1.25.4 仅为示例。生产请钉死具体版本标签(如 qdrant/qdrant:v1.11.3),避免 latest 在凌晨被静默升级。ARM64 主机须拉取多架构镜像标签,否则会 exec format 错误(来源:markaicode Weaviate Docker stack,访问 2026-10-09)。
验证
bash
# Qdrant 健康
curl -s http://localhost:6333/health | head
# Weaviate 就绪
curl -s http://localhost:8080/v1/.well-known/ready
# Milvus 健康(standalone)
curl -s http://localhost:9091/healthz # 期望 {"status":"ok"}1
2
3
4
5
6
2
3
4
5
6
对照评测:用你真实的 query 分布跑 recall@k,而不是照搬厂商 synthetic benchmark(详见 perf.md)。
回滚与清理
切换数据库是结构性变更
从 Chroma 迁到 Qdrant、或在 Qdrant/Milvus 间迁移,属于数据 + 查询路径双重迁移:必须双写灰度 + 回放对比,确认 recall 与延迟达标后再切读流量。不要一次性「drop 旧库」。迁移前用向量库自带备份(见 ops.md)固化可回滚点。
故障排查
- 选型后才发现并发写瓶颈:Chroma 在真实生产负载下并发写/持久化易触顶 → 早期压测(见 perf.md)暴露,别等上线。
- Milvus 规模用不上分布式却上了:组件多、故障面大 → 低于 10M 优先 standalone。
- pgvector HNSW 维度上限:官方文档将 HNSW 索引限制在 2000 维内,超过需换库或用 IVFFlat(来源:markaicode 2026 对比,访问 2026-10-09)。
- 开源库补丁滞后: Milvus 曾在 v2.5.27 修复 metrics 端口认证绕过,旧补丁版本有风险(来源:markaicode,访问 2026-10-09)→ 保持补丁节奏是运维义务。
安全与合规
- 数据驻留:金融/政务等强合规场景优先自托管(Qdrant / Milvus / Weaviate 均可),让数据留在自有基础设施;SaaS 方案须确认区域与合规资质。
- 检索即权限边界:跨租户 RAG 必须在查询层携带租户过滤表达式,仅做语义召回不做行级过滤 = 跨租户数据泄露(详见 hybrid-search.md 安全章节)。
- 访问控制:优先集合/命名空间级 RBAC;Weaviate 多租户、Qdrant 集合级、Milvus partition + RBAC、Pinecone namespace。
- 传输加密:生产开启 TLS;自托管 Qdrant/Weaviate 配 API key 或 OIDC,关闭匿名访问。
成本与性能
以下为量级参考,非实测报价;具体以各厂商 2026 年定价页为准。
- 内存:HNSW 类索引除原始向量外还要存图结构,约为原始向量的 1.5–2 倍内存(来源:pinecone HNSW 系列、aicassindra 内存测算,访问 2026-10-09)。768 维 float32、5000 万向量 ≈ 153.6GB 原始,加图 ≈ 160GB+ RAM。
- 量化省内存:Qdrant 标量/乘积/二进制量化可将内存降至 1/4~1/64(厂商口径,[未实测]);重排(rescore)用全精度回算保精度。
- 隐性运维成本:Milvus 分布式 > Qdrant 单集群 > Chroma。把 on-call、升级、备份算进 TCO。
- GPU:Milvus 支持 GPU 索引加速大批量建索引;Qdrant/Weaviate 通常 CPU 即可,仅在 embedding 推理侧需 GPU。