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,预留导出与切换方案)。

下面把这五个问题画成一棵可执行的决策树。注意它的入口不是「选哪个产品好」,而是「能不能不引入新服务」——只有当约束逼着往下走,才一层层升级到更重的方案。

选型开始 已在用 PG 且 <50M? 是 pgvector 少一服务 · ACID 否 要十亿级 或 GPU? 是 Milvus / Zilliz 分布式 · GPU 否 过滤极 复杂? 是 Qdrant filtered-HNSW 否 零运维 优先? 是 Pinecone 全托管 serverless 否 Weaviate hybrid 内置
图 4.1选型决策树:约束自上而下依次收紧,每个「是」分支都提前出口到更轻的方案。注意:树的形状本身是结论——绝大多数项目在头两个菱形就被分流(已有 PG 走 pgvector、要十亿走 Milvus),真正需要走到底、纠结 Pinecone 还是 Weaviate 的反而是少数。先问约束,专用库往往用不上。

▸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 检索在不少场景可替代专用库。
旧 新 → SUPERSEDED 别再教 ada-002 裸 float32 全维 纯 IVFFlat dense-only "向量库必选"绝对论 — 写进方案即扣分 STABLE 放心照教 HNSW 默认 halfvec / 量化分层 MRL 可截断维度 '24-01 text-embed-3 hybrid + rerank 标配 — 内核已稳定 IN FLUX 盯日期 多向量 ColPali '25-08 Milvus 2.6 GPU '25-07 Qdrant 2-bit 存算分离 serverless embedding 换代 — 半年后会移动
图 4.2前沿三桶:左→右是技术演进方向,但三桶同时存在于今天。注意:反直觉之处在于中间那桶——大多数生产系统的正确姿态是把 STABLE 桶吃透,而不是追 IN FLUX。追前沿(多向量、GPU 建图)只在它正好命中你的瓶颈时才划算;把 SUPERSEDED 当新知写进方案,则是面试里最直接的扣分项。

附: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×。结论是混合,不是取代:用长上下文承载少量精排结果,用检索把候选从海量压到少量。

传统:向量驻内存 RAM 全部向量 · 贵 查询直接命中 查询 成本基线 ≈ 100× 存算分离:向量在 S3 RAM 缓存 仅热点 · 小 miss 时取回 S3 对象存储 全部向量 · 便宜 存储成本 ≈ 1×
图 4.3存算分离把向量主体从内存挪到对象存储,内存退化为缓存层。注意:约 100× 的价差不是免费的——代价是缓存未命中时要从 S3 取回,尾延迟变高。turbopuffer / Pinecone serverless 赌的是「冷数据访问稀疏」,对热点集中的负载划算,对全量高频随机访问则未必。

自测

合上屏幕,先在脑子里答完,再展开对照。第 1 题是选型辨析,面试高频。

  1. 团队已经在跑 Postgres,数据 800 万向量,且检索结果需要和订单表做 JOIN。选什么?为什么不直接上 Pinecone?
    参考答案

    选 pgvector。三条理由:① 800 万远在单机 PG 舒适区(<10–50M),HNSW 索引足够;② 需要和订单表 JOIN,pgvector 让向量和业务数据同库,一条 SQL 直接关联,专用库得把订单数据搬出来或反向同步;③ 同事务写入保证一致性,不会有孤儿向量。不上 Pinecone 是因为它是独立服务——平白多一个要部署 / 监控 / 会独立挂掉的系统,且无法和订单表做事务性 JOIN,还按用量计费。这个规模下 Pinecone 的零运维优势抵不过「跨库一致性 + 多一个服务」的代价。

  2. 「pgvector 在向量检索上一定比专用库慢」——这句话错在哪?
    参考答案

    两处。① 性能上不一定慢:pgvectorscale 的 StreamingDiskANN + SBQ 在 50M 量级、99% recall 下约 471 QPS,反超 Qdrant 的约 41 QPS(公开基准,未本地复现)。② 更重要的是问错了问题:pgvector 的卖点本就不是峰值 QPS,而是 ACID 一致性和「少一个服务」。在中小规模 + 强一致需求下,它常是更优解,比的不是跑分而是整体工程成本。

  3. 把下面四项各归到 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 取代。

  4. 存算分离(向量放 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 引擎),而不是纯向量库。把这条路由设计画进迁移方案,是这道题的得分点。