深挖-向量数据库
一句话理解
专门存储和检索高维向量的数据库系统,是 RAG(检索增强生成)的核心基础设施,支撑语义搜索、推荐系统、相似度去重等场景。
零基础理解
传统数据库存的是数字和文本,查询时做精确匹配;向量数据库存的是”语义坐标”——上文 Embedding 模型输出的向量。查询时不是问”哪条记录等于 X”,而是问”哪些向量和 X 最接近”。你可以对向量数据库说:“找出和这段文字意思最接近的 100 篇文档”,它返回的是语义层面最相关的内容,而不是关键词匹配。
核心概念
向量索引 (Vector Index)
向量数据库的核心竞争力在于索引算法。暴力搜索(逐一比较)在百万级以上数据量时不可行,需要近似索引:
| 索引类型 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| IVF (Inverted File) | 先聚类,搜索时只查最近几个聚类中心 | 实现简单,内存友好 | 精度受聚类质量影响 |
| HNSW (Hierarchical Navigable Small World) | 多层图结构,上层跳跃,下层精细 | 查询快,精度高 | 内存占用大,构建慢 |
| DiskANN | 基于图的索引,优化磁盘 I/O | 十亿级数据可存磁盘 | 首次构建耗时长 |
| PQ (Product Quantization) | 向量压缩,降维存储 | 内存极省 | 精度损失 |
| ScaNN | Google 出品,各向异性量化 | 精度/速度平衡好 | 主要面向 Google 生态 |
近似最近邻 (ANN)
Approximate Nearest Neighbor — 在精度和速度之间取折中。与 KNN(精确搜索)的区别:
- KNN:O(N) 复杂度,保证返回真正的 Top-K
- ANN:O(log N) 或 O(1) 复杂度,返回近似 Top-K,召回率通常 95%-99%
元数据过滤 (Metadata Filtering)
实际场景中,单纯语义搜索不够。需要叠加结构化条件:
- 时间范围:“最近 30 天的文档”
- 分类标签:“只查技术文档”
- 权限控制:“只查当前用户有权限的内容”
过滤策略分为前过滤(Pre-filtering,先过滤再向量搜索)和后过滤(Post-filtering,先向量搜索再过滤)。前过滤可能漏掉语义相关但不满足条件的文档;后过滤可能返回数量不足。2026 年主流方案是混合过滤,在索引阶段同时考虑向量和标量。
混合检索 (Hybrid Search)
结合 Sparse Retrieval(如 BM25)和 Dense Retrieval(向量搜索)的优势:
- BM25:关键词精确匹配,适合专有名词、缩写
- 向量搜索:语义理解,适合同义词、改写表达
- 融合策略:RRF (Reciprocal Rank Fusion)、加权求和
分片和副本
- 水平分片:数据量超过单机容量时,按向量 ID 哈希分片
- 副本:多副本提升吞吐和可用性,需保证一致性
2026 年主流向量数据库对比
| 数据库 | 类型 | 索引算法 | 分布式 | 混合检索 | 开发者体验 | 适用场景 |
|---|---|---|---|---|---|---|
| Milvus | 开源 (Zilliz) | IVF/HNSW/DiskANN | 是,云原生 | 支持 | 中等,需学习概念 | 十亿级生产环境 |
| Pinecone | 商业 SaaS | 自研 (不公开) | 是,全托管 | 支持 | 优秀,< 5 分钟上手 | 不想运维的团队 |
| Qdrant | 开源 (Rust) | HNSW | 是,支持集群 | 强,过滤性能突出 | 优秀,API 简洁 | 高性能+复杂过滤 |
| Weaviate | 开源 | HNSW/Flat | 是 | 原生支持 (hybrid) | 优秀,GraphQL 接口 | 需要混合搜索 |
| Chroma | 开源 (Python) | HNSW | 否 | 有限 | 极佳,一行代码 | 原型开发、小数据 |
| pgvector | PostgreSQL 扩展 | IVFFlat/HNSW | 依赖 PG | 是 (SQL JOIN) | 极佳,复用现有 PG | 已有 PG 的团队 |
| Elasticsearch | 开源/商业 | HNSW | 是 | 原生支持 (BM25+dense) | 优秀,生态成熟 | 已有 ES 的团队 |
| FAISS | 开源 (Meta) | IVF/HNSW/PQ | 否 | 否 | 库级别,需自行封装 | 嵌入式、研究场景 |
选型框架
你需要选什么向量数据库?
│
├── 数据量 < 10万条?
│ └── 是 → Chroma 或 pgvector,够用且简单
│
├── 已有 PostgreSQL?
│ └── 是 → pgvector,零额外基础设施
│
├── 已有 Elasticsearch?
│ └── 是 → ES 原生向量搜索,无需引入新组件
│
├── 需要零运维?
│ └── 是 → Pinecone (商业) 或 Zilliz Cloud (Milvus 托管版)
│
├── 需要复杂元数据过滤?
│ └── 是 → Qdrant 或 Weaviate
│
├── 数据量 > 1 亿条?
│ └── 是 → Milvus (分布式) 或 Pinecone (商业)
│
└── 预算有限 + 大规模?
└── Milvus 开源版 或 Qdrant 集群
2026 年趋势
1. 向量数据库与传统数据库边界模糊
PostgreSQL (pgvector)、Elasticsearch、MongoDB Atlas、Cassandra 等传统数据库/搜索引擎纷纷内置向量搜索能力。对于多数团队,“一个数据库搞定所有”比”引入专门的向量数据库”更有吸引力。
2. 混合检索成为标配
单独依赖向量搜索已不够。2026 年的主流方案是向量 + BM25 + 结构化过滤的三合一。Weaviate 和 Elasticsearch 在这方面走在前列。
3. 成本优化与量化
- 向量压缩 (Product Quantization, Scalar Quantization)
- 磁盘索引 (DiskANN, Vamana) 降低内存需求
- 分层存储 (热数据/冷数据)
4. 多模态向量检索
同时索引文本、图像、音频的向量,在同一个数据库中进行跨模态检索。
相关笔记
- 概念-Embedding模型 — 向量数据库存储的核心数据来源
- 稠密检索(深挖) — 向量数据库在 RAG 检索环节的应用
- 深挖-向量数据库选型 — 更详细的选型决策指南
- 深挖-Elasticsearch — 传统搜索引擎的向量化演进
- 深挖-FAISS — 轻量级向量相似度搜索库
- 深挖-pgvector — PostgreSQL 向量扩展
- 第13章 · RAG 进化树 — RAG 系统中向量数据库的定位
- 混合检索(深挖) — 混合检索策略详解
- 深挖-重排序 — 向量检索后的精排环节
来源
- Milvus 官方文档: https://milvus.io/docs
- Pinecone 文档: https://docs.pinecone.io
- Qdrant 文档: https://qdrant.tech/documentation
- Weaviate 文档: https://weaviate.io/developers/weaviate
- pgvector GitHub: https://github.com/pgvector/pgvector
- FAISS GitHub: https://github.com/facebookresearch/faiss
- “Vector Database Benchmark 2026” 相关评测报告