Post

2025 年向量数据库选型实战指南,从 pgVector 到 Milvus

2025 年向量数据库选型实战指南,从 pgVector 到 Milvus

随着 LLM 和 RAG(检索增强生成)架构的爆发,向量数据库(Vector Database)一夜之间成为了基础设施中的“当红炸子鸡”。

市面上涌现了数十种选择:从轻量级的 Chroma 到巨型的 Milvus,从老牌的 Elasticsearch 到新贵 Pinecone,还有在现有数据库上“魔改”的 pgVector。

面对眼花缭乱的 Benchmark 和营销术语,你该如何抉择?

作为一名在基础设施领域摸爬滚打多年的从业者,我的建议是:忘掉那些每秒十亿次查询的极限跑分,回归你的业务本质。

本文将抛开繁杂的参数,从三大流派四个决策维度,为您梳理一条清晰的选型路径。


一、 看清战场:向量数据库的三大流派

目前的向量数据库市场并非铁板一块,而是分裂为三个鲜明的流派。理解它们的基因,选型就成功了一半。

1. “全能插件派”:以 pgVector 为代表

  • 哲学: 向量只是数据的一种类型,为什么还要单独开一个数据库?
  • 代表: PostgreSQL (pgVector), Redis, MongoDB Atlas。
  • 核心优势: 架构极简。如果你已经在使用 PG,启用向量功能只是一个 CREATE EXTENSION 的距离。你拥有现成的备份、监控、ACID 事务,以及最强大的 SQL 关联查询能力。
  • 核心劣势: 极端性能和超大规模下的扩展性不如专用数据库。

2. “混合搜索派”:以 Elasticsearch 为代表

  • 哲学: 搜索不仅仅是向量相似度,还需要关键词匹配。
  • 代表: Elasticsearch, OpenSearch。
  • 核心优势: 混合搜索 (Hybrid Search)。RAG 的真实场景中,单纯的向量搜索(语义)往往不够精确,结合关键词(BM25)通常能获得最佳召回率。ES 是这个领域的王者。
  • 核心劣势: 重。资源消耗大,运维复杂,成本较高。

3. “极致专能派”:以 Milvus/Qdrant 为代表

  • 哲学: 为了极致的向量性能,我们需要重写一切。
  • 代表: Milvus, Qdrant, Weaviate, Chroma, Pinecone。
  • 核心优势: 性能天花板极高。专为十亿级(Billion-scale)向量设计,提供极致的 QPS、特有的量化压缩技术(Quantization)和高级的索引算法(DiskANN, HNSW 优化)。
  • 核心劣势: 引入了新的技术栈,增加了运维复杂度(SaaS 除外)。

二、 决策维度的灵魂四问

在做决定之前,请诚实地回答以下四个问题。

1. 你的数据规模真的是“海量”吗?

这是最大的误区。很多团队只有 10 万篇文档,却在担心 pgVector 撑不住。

  • < 100 万向量: 任何方案都能跑得飞快,甚至是内存运行的 Chroma。
  • 100 万 - 1 亿向量: 这是 pgVector 的舒适区。配合适当的索引(IVFFlat / HNSW)和内存,它足够快,且运维成本最低。
  • > 1 亿向量: 开始考虑 QdrantWeaviate
  • > 10 亿向量: 这是 MilvusPinecone 的战场。这个时候,分布式的分片和扩容能力成为刚需。

2. 你需要多复杂的“元数据过滤”?

RAG 不仅仅是“找相似”,更是“找符合条件的相似”。

  • 场景 A: “找到和这句话最像的文档。” -> 任意向量数据库
  • 场景 B: “找到 user_id=1001status='active'created_at > '2024-01-01' 的文档中,和这句话最像的。” -> pgvector 是神
    • 专用向量库的 Filter(过滤)功能正在变强(如 Qdrant 的 Payload Index),但相比于 SQL 几十年的优化积累,仍然是小巫见大巫。如果你的业务依赖复杂的关联查询(JOIN)和过滤,不要离开关系型数据库。

3. 你需要“混合搜索”吗?

  • 场景: 代码搜索、商品搜索、专业名词搜索。
  • 分析: 向量擅长“语义”,但对“精确匹配”很弱。比如搜函数名 get_user_by_id,向量可能会给你推荐 fetch_account_data
  • 建议: 如果你不能容忍搜不到专有名词,Elasticsearch 是首选,或者使用 pgvector (结合 PG 的全文检索 tsvector)。纯向量库在这一点上往往表现不佳。

4. 谁来运维这个数据库?

  • 有 24 小时待命的 SRE 团队? 可以尝试自建 Milvus (K8s 部署) 或 Elasticsearch 集群。
  • 只有 1-2 个后端开发兼职运维? 请死守 pgvector (RDS 托管) 或选择 Pinecone (SaaS)。千万不要为了“技术洁癖”引入一个你无法驾驭的复杂分布式系统。

三、 终极选型建议表

你的场景 (User Profile)推荐方案 (Winner)理由 (Why)
Python 开发者 / 本地原型 / 个人项目Chroma DBpip install 即可用,零依赖,API 对开发者极度友好。
已有 PG 业务 / 中小规模 RAG / 复杂过滤pgvector架构最简,数据一致性最好,SQL 过滤最强。这是 80% 企业的最佳起点。
电商搜索 / 文档库 / 需要关键词匹配Elasticsearch混合搜索 (BM25 + Vector) 效果最好,生态成熟。
性能狂魔 / 成本敏感 / 中大规模自建QdrantRust 编写,性能卓越,内存效率高,过滤功能在专用库中是最强的。
超大规模 (十亿+) / 互联网巨头 / K8s 原生Milvus真正的云原生分布式架构,扩展性天花板最高。
不想运维 / 钱不是问题 / 追求 SLAPinecone全托管 SaaS,省心省力,专注于业务逻辑。

结语:从“够用”开始,向“极致”演进

在软件工程中,“Premature Optimization is the root of all evil” (过早优化是万恶之源)

对于大多数正在构建第一个 RAG 应用的团队,我的建议是:从你手头已有的工具开始。

如果你在用 Postgres,就开通 pgVector;如果你在用 ES,就升级版本。不要在一开始就为了那 5% 的性能提升,去引入 200% 的运维复杂度。

向量数据库是用来服务业务的,不是用来展示架构复杂度的。选那个让你晚上能睡个好觉的数据库。

This post is licensed under CC BY 4.0 by the author.