主题
7.2 FAISS vs 向量数据库:何时用哪个
FAISS 是引擎,向量数据库是整车——你需要的是车,不是引擎
这一节在讲什么?
前面七章我们学了 FAISS 的全部能力,也学了 pgvector、Milvus 和 Chroma。现在到了做决策的时候——你的项目该选哪个?这一节我们要建立清晰的技术选型框架,帮你根据场景选择最合适的工具。
选型决策树
你的需求是什么?
│
├─ 需要数据持久化?
│ ├─ 是 → pgvector 或 Milvus(FAISS 不持久化)
│ └─ 否 → 继续
│
├─ 需要标量过滤(WHERE 条件)?
│ ├─ 是 → pgvector 或 Milvus(FAISS 不支持)
│ └─ 否 → 继续
│
├─ 数据量有多大?
│ ├─ < 10 万 → Chroma(最简单)
│ ├─ 10 万~1000 万 → pgvector(SQL + 事务)
│ ├─ 1000 万~1 亿 → Milvus(分布式)
│ └─ > 1 亿 → Milvus(分布式 + 量化)
│
├─ 需要极致性能(GPU 加速)?
│ ├─ 是 → FAISS(原生 GPU 支持)
│ └─ 否 → 继续
│
├─ 需要自定义索引组合?
│ ├─ 是 → FAISS(积木式组合)
│ └─ 否 → 继续
│
├─ 嵌入式部署(不需要独立服务)?
│ ├─ 是 → FAISS 或 Chroma
│ └─ 否 → pgvector 或 Milvus
│
└─ 快速原型验证?
├─ 是 → Chroma
└─ 否 → pgvector五种工具的定位总结
| 工具 | 定位 | 核心优势 | 核心劣势 |
|---|---|---|---|
| Chroma | 嵌入式向量数据库 | 零配置、Python 原生 | 不支持分布式、性能一般 |
| pgvector | SQL 向量数据库 | SQL 原生、事务一致性 | 单机、不支持量化 |
| Milvus | 分布式向量数据库 | 分布式、量化、多向量 | 运维复杂、无 SQL |
| FAISS | 向量搜索库 | 性能极致、GPU、灵活 | 不持久化、不过滤、不分布式 |
| Qdrant | 高性能向量数据库 | 单机性能好、Rust 实现 | 生态不如 Milvus |
常见误区:FAISS 性能最好所以选 FAISS
FAISS 的搜索性能确实最好,但"搜索快"不等于"系统快"——一个完整的 RAG 系统还需要数据持久化、标量过滤、并发控制、数据同步等功能。如果你用 FAISS 来实现这些功能,你基本上就是在手写一个向量数据库——而且大概率写得不如 Milvus 或 pgvector。正确的做法是:生产环境用向量数据库,需要极致性能时用 FAISS 作为加速层。
小结
这一节我们建立了技术选型框架:需要持久化/标量过滤 → pgvector 或 Milvus,需要极致性能 → FAISS,需要快速原型 → Chroma。FAISS 是引擎,向量数据库是整车——大多数场景你需要的是车,不是引擎。下一节是本教程的最后一节——FAISS 的局限性与未来。