跳转到内容

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 原生不支持分布式、性能一般
pgvectorSQL 向量数据库SQL 原生、事务一致性单机、不支持量化
Milvus分布式向量数据库分布式、量化、多向量运维复杂、无 SQL
FAISS向量搜索库性能极致、GPU、灵活不持久化、不过滤、不分布式
Qdrant高性能向量数据库单机性能好、Rust 实现生态不如 Milvus

常见误区:FAISS 性能最好所以选 FAISS

FAISS 的搜索性能确实最好,但"搜索快"不等于"系统快"——一个完整的 RAG 系统还需要数据持久化、标量过滤、并发控制、数据同步等功能。如果你用 FAISS 来实现这些功能,你基本上就是在手写一个向量数据库——而且大概率写得不如 Milvus 或 pgvector。正确的做法是:生产环境用向量数据库,需要极致性能时用 FAISS 作为加速层


小结

这一节我们建立了技术选型框架:需要持久化/标量过滤 → pgvector 或 Milvus,需要极致性能 → FAISS,需要快速原型 → Chroma。FAISS 是引擎,向量数据库是整车——大多数场景你需要的是车,不是引擎。下一节是本教程的最后一节——FAISS 的局限性与未来。

基于 MIT 许可发布