3. 向量数据库选型:Milvus、Pinecone、Qdrant、Weaviate 对比

选型这件事,说白了就是找最趁手的工具。我在做流批一体架构时,向量数据库的选型卡了整整两周。不是技术难,而是每个库都有自己的脾气。今天我把四个主流选手——Milvus、Pinecone、Qdrant、Weaviate——掰开揉碎讲清楚。

3.1 四款数据库核心差异

先看一张对比表,心里有个底。

维度 Milvus Pinecone Qdrant Weaviate
开源/商业 开源(Apache 2.0) 商业(SaaS) 开源(Apache 2.0) 开源(BSD-3)
核心语言 Go + C++ Rust + C++ Rust Go
索引算法 IVF、HNSW、DiskANN 专有(HNSW 变体) HNSW、Payload 索引 HNSW、自定义
标量过滤 支持(需配合索引) 支持(元数据过滤) 原生强支持 支持(GraphQL 查询)
流式写入 支持(批量 + 流式) 支持(实时) 支持(实时) 支持(批量为主)
部署复杂度 高(依赖 etcd、MinIO) 零(全托管) 低(单二进制) 中(依赖 Docker)

我的建议: 如果你团队有运维能力,Milvus 是功能最全的;如果只想快速验证,Pinecone 最省心;如果对标量过滤要求高,Qdrant 是黑马;如果要做知识图谱 + 向量,Weaviate 更合适。

3.2 选型考量因素

选型不能只看功能列表。我习惯从三个维度切入:性能、成本、生态。每个维度都有坑。

3.2.1 性能

性能不是单纯的 QPS。我在项目中遇到过一个问题:Milvus 在 95% 分位延迟上表现很好,但写入高峰时抖动明显。后来发现是索引构建线程和写入线程抢 CPU。

  • 查询延迟: HNSW 算法普遍在 10ms 以内,但数据量超过 1 亿后,Milvus 的 DiskANN 更有优势。
  • 写入吞吐: Qdrant 的 Rust 实现让单机写入能达到 10w+ QPS,Pinecone 的 SaaS 架构写入延迟稳定但上限受配额限制。
  • 标量过滤: 这是最容易忽略的点。Qdrant 的 Payload 索引让过滤 + 向量检索一步到位,Milvus 需要额外建标量索引。

避坑指南: 我曾经在流批一体场景里用 Milvus 做实时写入,结果索引构建跟不上写入速度,导致查询返回空结果。后来改用 Qdrant 的流式写入 + 异步索引,问题才解决。

3.2.2 成本

成本分两块:基础设施和运维人力。

数据库 基础设施成本 运维成本 适合场景
Milvus 高(需要 etcd、MinIO、Pulsar) 高(组件多,调优复杂) 大规模、自建集群
Pinecone 中(按 Pod 付费) 低(全托管) 快速原型、中小规模
Qdrant 低(单机可跑) 低(部署简单) 中小规模、边缘部署
Weaviate 中(依赖 Docker) 中(模块多) 知识图谱 + 向量

嗯,这里要注意:Pinecone 看起来便宜,但数据量大了之后 Pod 费用会线性增长。我有个朋友做推荐系统,数据量到 5000 万时,月费直接翻了三倍。

3.2.3 生态

生态决定了你能多快把数据库用起来。

  • Milvus: 社区最活跃,有 Attu 可视化工具,支持 Spark、Flink 集成。流批一体场景首选。
  • Pinecone: 文档最友好,SDK 覆盖 Python、Node、Go。但开源生态弱,没法二次开发。
  • Qdrant: Rust 生态,性能极致。有 Web UI,但功能简单。
  • Weaviate: 内置向量化模块,支持 、Cohere 等模型。适合做 RAG 应用。

3.3 部署模式:云端 vs 本地

部署模式决定了你的运维策略。我习惯按数据敏感度和团队能力来选。

3.3.1 云端部署

适合快速验证、数据量不大、不想管运维的团队。

  • Pinecone: 纯 SaaS,开箱即用。我用来做 PoC 项目,一周上线。
  • Milvus Cloud: Zilliz 提供的托管服务,功能与开源版一致。
  • Qdrant Cloud: 支持按需付费,但节点较少。
  • Weaviate Cloud: 集成度高,适合 AI 应用。

注意: 云端部署的数据传输延迟和网络带宽是瓶颈。我遇到过 Pinecone 在跨区域查询时延迟飙到 200ms,后来改用同区域部署才降到 20ms。

3.3.2 本地部署

适合数据敏感、需要定制化、大规模集群的场景。

  • Milvus: 支持 Kubernetes 部署,组件多但灵活。我习惯用 Helm Chart 一键部署。
  • Qdrant: 单二进制文件,部署最简单。适合边缘设备或小团队。
  • Weaviate: Docker Compose 即可启动,适合开发环境。

你想想看,如果数据量在 1000 万以下,Qdrant 单机完全够用。超过 1 亿,Milvus 的分布式能力就体现出来了。

3.4 选型决策流程图

下面这张图是我做选型时的决策路径,分享给你。

向量数据库选型决策流程图 向量数据库选型决策流程 开始选型 数据量 > 1亿? Milvus(分布式集群) 标量过滤多? Qdrant 需要知识图谱? Weaviate Pinecone 说明: 1. 数据量超过 1 亿且需要自建集群 → Milvus 2. 标量过滤频繁 → Qdrant | 3. 知识图谱场景 → Weaviate | 4. 快速验证 → Pinecone

3.5 我的选型建议

最后给个总结性的建议,不绕弯子。

  • 流批一体 + 大规模: Milvus。虽然部署复杂,但 Flink 集成和 DiskANN 索引是杀手锏。
  • 快速原型 + 小规模: Pinecone。别纠结,先跑起来再说。
  • 标量过滤 + 实时写入: Qdrant。Rust 的性能不是吹的。
  • 知识图谱 + RAG: Weaviate。内置向量化模块省很多事。

我的经验: 选型没有银弹。我习惯先做 PoC,用真实数据跑一周,看延迟、吞吐、稳定性。纸上谈兵不如跑一次。