Chapter 04
选型与前沿:到底用哪个,2026 在变什么
前三章讲清了原理(三角权衡、索引机制)与工程(过滤、hybrid、一致性)。这一章回答最实际的问题:市面上十几个产品到底怎么选,以及截至 2026 年,这个领域的前沿和已被淘汰的旧做法分别是什么。
本章骨架
- 产品全景与各自甜区——把 8+ 个产品按「类型 / 甜区 / 主要权衡」摊成一张矩阵。
- 「你是否真的需要专用向量库」这一核心选型问题——画成一棵决策树,而不是默认装一个。
- 2026 前沿:量化分层 / 多向量 late-interaction / 存算分离 serverless——以及哪些旧法已被取代。
数据基线:pgvector 0.8.0 · pgvectorscale · Milvus 2.6 · Qdrant 1.15 | 前沿截止:2026-06 | 性能数字引自公开基准(VectorDBBench / ann-benchmarks / 厂商博客),「未本地复现」
▸产品全景:一张对比矩阵
向量检索的产品分两层:一层是能直接当数据库用的服务(有持久化、CRUD、过滤、网络服务化),另一层是只提供检索算法的库(FAISS 是典型,没有持久化也没有过滤)。02 章已经讲过这条分界线——索引(HNSW / IVF / DiskANN)只是其中一个零件,一个向量数据库还要在零件外包上写入路径、元数据过滤、分布式分片。下表只列能进生产候选清单的选项,按「类型 / 甜区 / 主要权衡」对齐:
| 产品 | 类型 | 甜区 | 主要权衡 |
|---|---|---|---|
| Pinecone | 全托管 serverless | 不想运维、要快速上线;存算分离按需付费 | 用量计费规模上去贵;闭源、平台锁定 |
| Milvus / Zilliz | 分布式 OSS(Zilliz 为托管版) | 十亿级、GPU 摄入、索引种类最多 | 分布式组件多、运维重;小规模是过度设计 |
| Qdrant | Rust 单体 OSS | 强 payload 过滤(filtered-HNSW 不掉召回);单节点性价比高 | 暂无 GPU 索引;超大规模分片成熟度不如 Milvus |
| Weaviate | OSS + 模块化 | 内置 hybrid 最强;可插拔向量化;GraphQL API | schema / GraphQL 学习曲线较陡 |
| Chroma | 嵌入式 OSS | 开发 / 原型、本地 RAG、LangChain 默认后端 | CPU-bound;非生产级大规模 |
| pgvector / pgvectorscale | Postgres 扩展 | 已用 PG 且 <10–50M 向量;要 ACID + 关系数据同库 JOIN | 建索引与查询争同一份资源;过亿需转专用库 |
| FAISS | 库(非 DB) | 进程内、GPU、自建检索层;研究 / 批处理 | 无持久化 / CRUD / 过滤 / 服务化,全要自己包 |
| Redis Vector · ES / OpenSearch · Mongo Atlas · LanceDB |
bolt-on 到现有栈 / 嵌入式列存 |
各自已有基础设施时顺手加一列向量,少引一个服务 | 向量能力是附加件,不如专用库深;规模 / 调参上界更低 |
不要从「哪个最强」读起,要从「手上已经在跑什么」读起。最后一行的 bolt-on 选项之所以单独成组,是因为它们的选型逻辑和前面几个不同:选 Redis Vector / OpenSearch / Mongo Atlas 几乎从不是因为它的向量能力最好,而是因为那套基础设施已经在生产里跑着——加一列向量比新引一个会独立挂掉的服务便宜得多。这个「少一个服务」的视角,是下一节决策树的主轴。
▸选型启发式:从约束反推,而不是从产品挑
选型不是给产品打分排名,而是把项目的硬约束(数据量、一致性要求、运维预算、规模上界)依次代入,让候选集自己收敛。下面这组规则按「最常命中」到「最特殊」排列:
- 已在跑 Postgres,且向量 <10–50M、需与业务数据强一致 JOIN → 先上 pgvector。理由是少一个服务、有 ACID 事务、不会产生孤儿向量。不到这条线,「这一步就不需要专用向量库」——这是本章最该带走的一句话。
- 过亿 / 十亿级、高 QPS、要 GPU 摄入 → Milvus / Zilliz。这是它的分布式组件和 GPU 索引真正回本的区间。
- 复杂 metadata 过滤是核心需求(多租户隔离、范围查询、地理过滤)→ Qdrant。它的 filtered-HNSW 把过滤条件织进图遍历(03 章讲过:pre-filter 召回不掉、post-filter 结果不缩水),是这类场景的强项。
- 要开箱即用的 hybrid → Weaviate(稀疏 + 稠密 + 融合内置);或者已经有 ES / OpenSearch,就直接 bolt-on,省一个服务。
- 零运维、要快速上线、规模可控、预算够 → Pinecone。但要算账:规模一大,转自托管能省约 75%——50M 向量自托管月成本约 $835,Pinecone 同规模 $3.2k+。
- 原型 / 本地 demo → Chroma 或 LanceDB;如果只要进程内的检索算法、根本不要一个数据库 → FAISS。
① pgvectorscale 在 50M 量级反超 Qdrant。公开基准里 pgvectorscale 在 99% recall 下约 471 QPS,对 Qdrant 约 41 QPS(同条件,VectorDBBench 类测试,未本地复现)。Timescale 的 StreamingDiskANN + SBQ(statistical binary quantization)让 Postgres 在中等规模很能打——「PG 上的向量一定慢」是过时印象。
② pgvector 的真正卖点是一致性,不是性能。同一个事务里写文档和它的 embedding,要么都成功要么都回滚,永远不会出现「文档在、向量丢了」的孤儿状态。专用向量库是独立服务,双写之间天然存在不一致窗口。
③ 选型的真实痛点是「多一个要部署 / 监控 / 会独立挂掉的服务」。运维负担常常压过跑分——一个 benchmark 快 20% 的库,如果意味着多一套要值守、要扩容、要排查级联故障的系统,对小团队往往是净亏。把这一点说出来,比背 QPS 数字更像做过决策的人。
▸你是否真的需要专用向量库
这是本章的核心辨析,也是面试里区分「装过库」和「做过选型」的分水岭。默认反应往往是「上 RAG 就装个向量数据库」——但 2026 的共识恰恰相反:专用向量库不是必选基础设施,而是一个要被约束触发的选项。把决策拆成五个依次收紧的问题:
- 数据量多大?百万到几千万级,单机方案(pgvector / Qdrant 单节点)绰绰有余;过亿才需要考虑分布式。
- 已经在跑 Postgres 或 ES 吗?在跑,就优先 bolt-on(pgvector / ES kNN),把「新增一个服务」的成本算进去。
- 过滤有多复杂?只是「按 user_id 过一下」,谁都能做;要多租户 + 范围 + 地理的复合过滤,才值得为 Qdrant 的 filtered-HNSW 买单。
- 一致性要求多高?要和订单 / 文档表做事务性强一致 JOIN,pgvector 的 ACID 是专用库给不了的——这条经常单独就把答案定死。
- 规模上界在哪?两年内会不会冲到十亿?会,就要么现在选 Milvus,要么留好迁移路径(先 pgvector,预留导出与切换方案)。
下面把这五个问题画成一棵可执行的决策树。注意它的入口不是「选哪个产品好」,而是「能不能不引入新服务」——只有当约束逼着往下走,才一层层升级到更重的方案。
▸2026 前沿:分三桶看,别把旧法当新知
这个领域变化快,但不是每一处都在变。把当下状态分成三桶——已沉淀(STABLE)照着教没问题、仍在变(IN FLUX)要盯日期、已被取代(SUPERSEDED)别再写进新方案。下面每条都带时间锚点,因为「2026 的前沿」半年后就会移动。
STABLE · 已沉淀的稳定内核
- HNSW 是默认索引——除非数据规模或内存预算逼你换 IVF / DiskANN(02 章),起手用 HNSW 不会错。
- pgvector 0.7.0(2024-04)的存储与量化原语:
halfvec(半精度,存储减半)、sparsevec(稀疏向量)、binary_quantize()(二值量化);以及 0.8.0(2024-10)的 iterative index scans——解决了过滤后结果不足时自动继续扫描的老问题。 - MRL(Matryoshka 表示学习)与可截断维度:text-embedding-3(2024-01)的
dimensions参数让一个模型输出可按需截断,256 维即超过旧 ada-002 的全维质量。「维度越高越好」已不成立。 - hybrid 检索是标配:稠密 + 稀疏 / BM25 + RRF 融合 + rerank,03 章已作为生产基线讲过。
- 量化分层:scalar 量化约 4× 压缩、binary 约 32× 压缩,配合用原始向量做 rescore 兜底召回——已是内存优化的标准配方。
IN FLUX · 近 6–12 月还在变(盯日期)
- late-interaction / 多向量检索:从 ColBERT 出发,演进到 ColPali / ColQwen 处理视觉文档(直接对页面图像做 token 级匹配,跳过 OCR)。Qdrant 原生支持 multivector,Weaviate、Vespa 亦已跟进。
- GPU 索引 cuVS / CAGRA:Milvus 2.6(2025-08)转向 GPU 建图 + CPU 查询的分工,并引入 RaBitQ 量化,报告省约 72% 内存——但查询端因成本退回 CPU,说明「全程 GPU」尚未在生产经济上跑通。
- 更细粒度量化:Qdrant 1.15(2025-07)的 1.5-bit / 2-bit 量化,在 binary 的激进压缩和 scalar 的召回之间补了中间档。
- 存算分离的 serverless 设计:turbopuffer 用 S3 做底座(Cursor 采用其检索)、LanceDB 嵌入式列存、Pinecone serverless——向量主体落对象存储,内存只做缓存。pgvectorscale 的 StreamingDiskANN + SBQ 是 Postgres 侧的同向探索。
- embedding 换代:Gemini Embedding 001(MTEB 约 68,居榜首)、Cohere embed-v4、Voyage voyage-3-large,开源侧 Qwen3-Embedding-8B 多语种第一。榜单半年一换,选型时按当下 MTEB 重测,别认死一个名字。
SUPERSEDED · 已被取代,别再教
text-embedding-ada-002→text-embedding-3(更高质量 + 可截断维度)。- 裸
float32全维存储 →halfvec/ 量化(同等召回下内存数倍下降)。 - 纯
IVFFlat→ HNSW(IVFFlat 仍有批处理场景,但默认不再用它)。 - dense-only 检索 → hybrid + rerank(纯稠密在精确词 / 专名 / 代码上召回不稳)。
- 「向量数据库是必选基础设施」的绝对论 → 按需选型。2026 共识:小规模 + 长上下文 + lexical 检索在不少场景可替代专用库。
附:RAG vs long-context 之争的理性立场
长上下文窗口变大后,「RAG 是不是要死了」反复被问。当下理性立场:RAG 没死,但 naive chunk pipeline 过时了。它正演进为 agentic retrieval——把 hybrid + rerank + CRAG / Self-RAG / HyDE 嵌进 agent 的推理循环,检索不再是一次性预处理,而是 agent 可反复调用的工具。long-context 在答案质量上略胜,但 token 成本上 RAG 仍便宜 8–82×。结论是混合,不是取代:用长上下文承载少量精排结果,用检索把候选从海量压到少量。
自测
合上屏幕,先在脑子里答完,再展开对照。第 1 题是选型辨析,面试高频。
-
团队已经在跑 Postgres,数据 800 万向量,且检索结果需要和订单表做 JOIN。选什么?为什么不直接上 Pinecone?
参考答案
选 pgvector。三条理由:① 800 万远在单机 PG 舒适区(<10–50M),HNSW 索引足够;② 需要和订单表 JOIN,pgvector 让向量和业务数据同库,一条 SQL 直接关联,专用库得把订单数据搬出来或反向同步;③ 同事务写入保证一致性,不会有孤儿向量。不上 Pinecone 是因为它是独立服务——平白多一个要部署 / 监控 / 会独立挂掉的系统,且无法和订单表做事务性 JOIN,还按用量计费。这个规模下 Pinecone 的零运维优势抵不过「跨库一致性 + 多一个服务」的代价。
-
「pgvector 在向量检索上一定比专用库慢」——这句话错在哪?
参考答案
两处。① 性能上不一定慢:pgvectorscale 的 StreamingDiskANN + SBQ 在 50M 量级、99% recall 下约 471 QPS,反超 Qdrant 的约 41 QPS(公开基准,未本地复现)。② 更重要的是问错了问题:pgvector 的卖点本就不是峰值 QPS,而是 ACID 一致性和「少一个服务」。在中小规模 + 强一致需求下,它常是更优解,比的不是跑分而是整体工程成本。
-
把下面四项各归到 STABLE / IN FLUX / SUPERSEDED 哪一桶:(a) HNSW 默认索引 (b) ColPali 多向量视觉检索 (c) text-embedding-ada-002 (d) dense-only 检索。
参考答案
(a) STABLE——默认起手索引,已沉淀。(b) IN FLUX——late-interaction 多向量近 6–12 月在快速演进(ColBERT → ColPali / ColQwen),Qdrant / Weaviate / Vespa 刚原生化。(c) SUPERSEDED——已被 text-embedding-3 取代。(d) SUPERSEDED——纯稠密在专名 / 精确词 / 代码上召回不稳,已被 hybrid + rerank 取代。
-
存算分离(向量放 S3、内存做缓存)能省约 100× 成本,代价是什么?什么负载下这笔账划不来?
参考答案
代价是缓存未命中时要从对象存储取回,尾延迟(p99)变高。这套架构赌的是「冷数据访问稀疏、热点集中」——对访问局部性强的负载划算。当负载是全量、高频、随机访问(几乎每次查询都 miss)时,取回开销吃掉省下的钱,还拖慢延迟,这笔账就划不来,此时传统全内存反而更合适。
规模会暴涨的项目,今天怎么选、迁移路径怎么留?
一个项目现在 500 万向量,预计两年内涨到 5 亿,且约 30% 的查询是精确 SKU 匹配(要按确切型号命中,不是语义近似)。今天选什么?迁移路径怎么提前留好?
提示(先自己列三条再看)
三个约束分别牵引不同决策:
① 当下 500 万:单机方案够用,今天没必要直接上 Milvus 那套分布式运维。但 ② 两年到 5 亿:终局一定是分布式(Milvus / Zilliz),所以今天的选择必须预留干净的迁移路径——别用任何把数据锁死的私有格式,确保向量 + 元数据能批量导出、能按确定性 ID 重建索引。一种稳妥路线是起步就用 Qdrant(单机性价比高、过滤强),把它当「能平滑放大的中间态」,到量级临界点再迁 Milvus;或起步 pgvector、预留导出脚本。
③ 30% 精确 SKU 匹配是关键陷阱:这部分根本不该走向量检索。精确型号匹配是结构化等值查询,用 B-tree / 倒排索引在毫秒级命中,丢给 ANN 反而又慢又会漏召回。正解是 hybrid 路由:SKU 精确匹配走结构化索引,语义查询才走向量——所以选型时要选一个能同时托住「结构化过滤 + 向量」的方案(pgvector 同库、Qdrant payload、或 hybrid 引擎),而不是纯向量库。把这条路由设计画进迁移方案,是这道题的得分点。