Skip to content

十、向量知识库 ​

← 上一章:九、RAG 框架 | 返回总览 | 下一章:十一、Embedding 模型 →

主流向量数据库 ​

2026 年选型的第一层判断不再是"谁的 benchmark 更高",而是架构路线——它基本决定了成本量级和运维方式:

路线代表一句话
全托管专用库Pinecone、Zilliz Cloud不管运维,按量付费,成本最高
开源自托管Milvus、Qdrant、Weaviate可控、可私有化,运维自己扛
寄生于既有数据库pgvector / pgvectorscale、LanceDB不新增一套数据库系统,2026 年的务实默认
对象存储原生Turbopuffer索引放对象存储,闲置数据近乎零成本,代价是冷查询延迟
数据库类型特点
Pinecone云服务全托管(闭源),企业级,易上手;老牌路线,存储成本偏高
Turbopuffer云服务对象存储(S3 / GCS / Azure)原生,索引不常驻内存;Cursor / Notion / Anthropic 生产使用;无免费档,$16/月起
Milvus / Zilliz开源 / 云服务生产级,大规模向量检索,云原生架构(46.2K star)
Qdrant开源 / 云服务Rust 编写,高性能,高级过滤(34.8K star)
Weaviate开源 / 云服务内置向量化模块,GraphQL API(16.8K star)
Chroma开源(嵌入式)轻量、零配置起步,适合原型与中小规模;2025 年以 Rust 重写(29.4K star)
LanceDB开源(嵌入式)/ 云进程内运行,Lance 列存格式(基于 Apache Arrow),同一张表存向量与多模态数据,自带版本管理与回滚(11.5K star)
pgvectorPostgres 扩展在既有 PostgreSQL 里做向量检索,与业务数据同事务查询;Supabase / Neon / RDS 等默认自带(23.1K star)
pgvectorscalePostgres 扩展Timescale 出品,在 pgvector 之上叠加 StreamingDiskANN 磁盘索引与量化压缩,突破内存上限(3.1K star)

向量数据库选型对比 ​

数据库部署性能规模过滤能力上手难度成本
Pinecone全托管云高十亿级强(元数据过滤)低偏高
Turbopuffer全托管云(对象存储)高(热缓存 p50 < 10ms;冷查询需从对象存储回载)千亿级(官方口径实测 1T+ 文档)强(元数据 + BM25 全文 + 混合)低用量计费,$16/月起;官方称约为传统方案 1/10
Milvus / Zilliz自托管 / 云极高百亿级强(标量 + 向量混合)中自托管免费,云付费
Qdrant自托管 / 云极高(Rust)十亿级强(高级过滤)中自托管免费,云付费
Weaviate自托管 / 云高亿级强(GraphQL)中自托管免费,云付费
Chroma嵌入式中百万级基础极低免费
LanceDB嵌入式 / 云高(磁盘访问接近内存)亿级(单节点 1 亿+)中(SQL 风格过滤 + 全文)极低自托管免费;云 Pro $39/月
pgvectorPostgres 扩展中(索引需常驻内存)千万级强(标准 SQL WHERE)极低免费(复用现有 PG)
pgvectorscalePostgres 扩展高(磁盘索引)亿级强(标签过滤)低免费(开源扩展)

一句话取舍:把速度和运维交给专用库(Milvus / Qdrant / Pinecone),把成本和"少一套系统"交给 pgvector / LanceDB / Turbopuffer。没有全面最优解,只有约束不同的解。

选型建议 ​

  • 原型验证(< 100 万向量) → Chroma:零配置,Python 一行启动
  • 已在用 Postgres → pgvector(内存吃紧时加 pgvectorscale):不新增一套数据库系统,向量与业务数据同事务查询,备份、权限、连接池全部复用。2026 年最务实的默认选择
  • 生产环境(千万-亿级) → Milvus / Qdrant:性能最强,社区大
  • 不想管运维 → Pinecone / Zilliz Cloud:全托管,开箱即用
  • 海量冷数据 + 成本敏感 → Turbopuffer:索引放对象存储,闲置命名空间几乎零成本,适合"用户多、单个用户的数据平时没人查"的多租户场景
  • 多模态 / 数据工程栈 → LanceDB:向量、文本、图像、音频同表存储,本地磁盘与对象存储都能跑,与 Pandas / DuckDB / Polars 衔接顺畅
  • GraphQL 技术栈 → Weaviate:原生 GraphQL API
  • Rust 技术栈 + 极致性能 → Qdrant:Rust 编写,高并发

选型路径 ​

你的情况?
 ├── 已在用 Postgres,数据量在千万级以内 → pgvector(内存不够时再加 pgvectorscale)
 ├── 数据在本地 / 边缘,想"一个库文件搞定" → LanceDB;只做原型 → Chroma
 ├── 海量冷数据、成本是第一约束 → Turbopuffer(对象存储原生)
 ├── 已有 ES / OpenSearch 集群 → 先评估集群自带的向量能力,不急着上新库
 └── 要极致性能 / 强多租户隔离 → Milvus、Qdrant、Weaviate

自托管还是托管?
 ├── 有运维能力、要私有化 → 开源自托管(Milvus / Qdrant / Weaviate)
 └── 不想管运维 → 全托管(Pinecone / Zilliz Cloud / Turbopuffer)

核心概念 ​

向量索引类型 ​

索引类型原理查询速度召回率内存占用适用场景
HNSW基于图的近似最近邻,多层跳表导航极快高较高生产环境首选,延迟敏感
IVF先聚类再搜索,只查相关聚类快中低大规模数据,可接受精度换速度
Flat(暴力)逐个比较,精确搜索慢100%低小数据集(< 10 万),需要精确结果
DiskANN图索引与向量存盘,查询时按需流式读取快高低(内存只留压缩副本)数据量超出内存、成本敏感

选择建议:< 100 万向量用 Flat(精确);100 万 - 1 亿用 HNSW(又快又准);> 1 亿用 IVF + HNSW 组合;内存装不下时改用 DiskANN 磁盘索引(如 pgvectorscale 的 StreamingDiskANN)。

混合检索 ​

纯向量检索可能遗漏关键词精确匹配,混合检索同时使用向量 + 关键词,兼顾语义和精确匹配:

用户查询:"Python 3.12 新特性"
  ├── 向量检索 → 找到语义相关的文档
  ├── 关键词检索(BM25)→ 精确匹配"Python 3.12"
  └── 融合排序(RRF)→ 综合两路结果,重排输出

Milvus、Qdrant、Weaviate、Turbopuffer、LanceDB 都原生支持混合检索;Postgres 侧可配合 BM25 扩展(如 ParadeDB)补齐关键词一路。

过滤策略 ​

在向量检索前/后加上元数据过滤(如时间、类别、权限),缩小检索范围:

  • 预过滤:先过滤元数据,再在子集中做向量搜索。适合过滤后数据量仍较大的场景
  • 后过滤:先做向量搜索,再过滤不满足条件的结果。可能丢失结果,需增大 top-k

相关文章 ​

  • 向量数据库全面解析:从原理到选型:CSDN

基于 CC BY-NC-SA 4.0 发布