面试知识库
高 进阶

向量数据库选型#

一句话答案#

主流向量数据库:Milvus(开源高性能)、Pinecone(云托管)、Weaviate(混合搜索),按规模和运维能力选择。

核心要点

产品定位混合检索 / 稀疏量化
Milvus开源分布式,支持亿级sparse 向量字段 + 内置 BM25 全文检索函数;hybrid_search 配 RRF / 加权 ranker支持 PQ、SQ 等多种量化索引
Qdrant开源,Rust 实现,payload 过滤强named sparse vector(可开 IDF 修正);Query API prefetch + fusion: rrf / dbsf标量、乘积、二值(含 1.5/2 bit)、非对称量化
Weaviate开源,模块化(内置向量化/rerank 模块)内置 BM25F,hybrid 查询,融合可选 ranked / relativeScore旋转量化 RQ(新集合默认开 8-bit)、PQ、BQ、SQ
Pinecone全托管云服务,免运维全文检索(BM25)、sparse / sparse-dense 索引、托管 rerank托管,内部实现不暴露
pgvectorPostgreSQL 扩展sparsevec 类型;BM25 需配合 PG 全文检索或其他扩展,融合通常在 SQL/应用层做halfvec(半精度)、bit 二值 + 表达式索引量化
Elasticsearch / OpenSearch搜索引擎加向量能力原生 BM25 + kNN;ES 用 rrf / linear retriever,OpenSearch 用 hybrid 查询 + search pipeline均支持标量/二值等量化选项(以官方文档为准)
Chroma轻量,适合原型,也有云服务已支持 BM25 / SPLADE 稀疏向量与混合检索(Search() API)以官方文档为准

各产品迭代很快(例如 Milvus 已进入 3.x,Weaviate、Qdrant 每几个月一个小版本),具体能力和参数名以官方文档为准。

索引类型: HNSW(高召回) / IVF(高吞吐) / FLAT(精确但慢)


ANN 索引工作原理(暴力搜索是 O(N) 全量比对,ANN 用”近似”换速度)

HNSW(分层可导航小世界图): 把”分层图 + 跳表”思想结合——构建多层图,上层节点稀疏、连边长,像”高速公路”快速跨越大距离;下层稠密、连边短,做精细定位。查询从顶层入口点开始,每层做贪心搜索:在当前层不断走向离查询点更近的邻居,走到该层局部最近点就”下沉”到下一层,逐层逼近,最底层(含全部节点)输出结果。查询复杂度约 O(log N)。

三个核心参数(含义不能混):

参数作用阶段含义调大的影响
M构建每个节点的最大连边数(图的稠密度)召回高、图更稳,但内存大、构建慢
efConstruction构建构建时维护的候选邻居数图质量更高(邻居选得更准),构建更慢
efSearch查询查询时维护的候选列表长度召回高,但单次查询更慢(速度↔召回的旋钮)

为何内存大: 全图必须常驻内存才能高效随机跳转(图遍历是随机访存,不适合走磁盘);且每个节点要存多层的邻接表(每层最多 M 条边),原始向量 + 多层邻接结构一起占用,所以 HNSW 是”以内存换召回与速度”。

IVF(倒排文件索引): 离线先用 k-means 把全部向量聚成若干簇、得到一批质心,每个向量归入最近质心的”桶”(倒排列表)。查询时先算查询向量到各质心的距离,只在最近的 nprobe 个桶里做精确搜索,跳过其余桶。nprobe 是召回↔速度的权衡:调大搜更多桶、召回高但更慢。优点是构建快、内存省、适合超大规模;缺点是桶边界处的近邻可能被漏掉(落在没被搜的相邻桶里)。

PQ(乘积量化,省内存的压缩手段): 把每个高维向量切成若干子段,对每个子段位置单独训练一套聚类码本,用最近码字的**编号(几个字节)**替代原始子段浮点数,从而把向量压缩成一串短编码。大幅降低内存(可压缩到原来几十分之一),代价是量化引入精度损失。实际常与 IVF 组合成 IVF_PQ:IVF 缩小搜索范围、PQ 压缩向量,是超大规模(亿级)+ 内存受限场景的主力方案。

FLAT(暴力精确): 不建索引,逐一精确比对,召回 100% 但 O(N)。仅适合小数据集或对精度要求极高、数据量可控的场景。

面试回答(2分钟版)

向量数据库是RAG系统中存储和检索Embedding向量的核心组件,选型要根据数据规模和运维能力来决定。主流方案有几类:Milvus是开源分布式方案,支持亿级向量,适合有运维能力的团队自建;Qdrant也是开源方案,payload过滤和量化选项比较丰富;Pinecone是全托管云服务,免运维开箱即用,适合快速上线但有持续成本;现在主流向量库基本都支持向量加关键词的混合检索和RRF融合,差别主要在实现方式和运维成本;如果只是做原型验证,Chroma足够轻量;团队如果已有PostgreSQL技术栈,pgvector作为插件可以避免引入新组件。索引类型的选择也很关键:HNSW基于图的近似搜索,召回率高但内存占用大;IVF基于倒排索引,吞吐量高适合大规模场景;FLAT是暴力精确搜索,小数据集用没问题但大规模不可行。内存吃紧时再叠加量化(标量、二值、PQ),用少量精度换内存,必要时对候选做原始向量重打分。选型时除了看性能指标,还要考虑与现有技术栈的集成难度、社区活跃度和长期维护成本。

追问与易错

追问方向:

  • Milvus 和 Pinecone 怎么选?各自适合什么场景? → Milvus 开源可自建,适合数据不出境 + 深度定制;Pinecone 全托管免运维,适合快速上线 + 小团队。百万级以上数据量 Milvus 性价比更高
  • HNSW 和 IVF 索引的区别?什么时候用哪个? → HNSW 内存常驻、查询快但内存占用大;IVF 磁盘友好、内存省但查询略慢。数据量 <1000 万用 HNSW,超大规模用 IVF_PQ
  • 向量维度对检索性能的影响有多大? → 维度从 768→1024,原始向量内存增 33%,距离计算量也近似按维度线性增加。维度越高语义表达越丰富但边际收益递减;支持 Matryoshka 的模型可以截短维度,在自己的评测集上比较召回再定
  • 向量数据库和传统数据库 + ANN 插件(如 pgvector)怎么选? → 数据量不大(常见经验是百万级以内)且已有 PG 基础设施,pgvector 够用,还能和业务数据做事务、JOIN;数据量更大、需要分布式扩展、多种量化索引、内置混合检索时选专用向量库
  • 带过滤条件的向量检索有什么坑? → ANN 先搜后过滤时,过滤条件很严格会导致返回条数不足。各家的应对不同:Qdrant 在 HNSW 图上做过滤感知的遍历,pgvector 0.8 起提供 iterative index scan(默认关闭),Milvus 支持标量字段索引和分区。选型时要用真实的过滤比例压测召回和延迟

易错点:

  • ❌ 只看召回率不看延迟和成本 → 生产环境需要平衡 Recall、Latency、内存占用三者
  • ❌ 不考虑向量维度对性能的影响 → 1024 维比 768 维原始向量内存增加 33%,距离计算也更慢
  • ❌ 忽略索引构建时间 → HNSW 构建耗时随数据量、M、efConstruction 增长,大库可能到小时级,需要规划离线构建和重建时间

结合项目时可以讲: 选了哪个库、为什么不选另外几个(数据量、已有技术栈、运维能力),索引和距离度量怎么定,向量 ID 怎么和业务库的 chunk 记录对应以支持精确删除,以及用什么数据验证了召回和延迟。