1. 什么是向量数据库?(非技术解释)
传统数据库(如MySQL)查找的是“完全匹配”的数据(比如where name = "张三")。
而向量数据库查找的是“最相似”的数据。
它存储的不是文字或图片本身,而是将这些数据“编码”成一长串浮点数(即向量,比如[0.256, -0.784, 1.203, ...])。这个向量代表了数据的“语义特征”。比如,“猫”和“老虎”的向量在空间中离得很近,而“猫”和“汽车”离得很远。
2. 核心算法原理(如何做到快速查找?)
如果数据量巨大,逐一比对向量距离(暴力搜索)极其缓慢。向量数据库的核心竞争力在于近似最近邻(ANN)算法,主要有三种经典索引:
HNSW(分层可导航小世界图):目前最主流。构建一张多层图网络,上层跳跃式粗查,下层精细搜索。优点:查询极快、召回率高;缺点:内存消耗极大。
IVF(倒排文件索引):先对所有向量进行“聚类”(分组),查询时只搜索离目标最近的几个组。优点:内存占用低;缺点:召回率略低于HNSW。
PQ(乘积量化):将高维向量压缩成更小的存储单元,大幅减少计算量。
现状:生产环境几乎都采用IVF + PQ + HNSW的混合策略(如Faiss的IVF-PQ或Milvus的混合索引),在内存、速度和精度之间取得平衡。
3. 主流向量数据库选型对比(2026年视角)
目前市场已趋于稳定,分为三大阵营:
| 数据库 | 定位与特点 | 适合谁? |
|---|---|---|
| Milvus / Zilliz | 开源事实标准,专为向量设计,分布式能力强,支持GPU加速。 | 生产级大规模(亿级向量)AI应用,如搜索引擎、推荐系统。 |
| Pinecone | 全托管云服务,运维简单,索引构建速度极快,但价格较贵且封闭。 | 创业公司快速验证MVP,不想自建运维团队。 |
| Qdrant | Rust编写,性能极高,内存安全,支持过滤和向量混合搜索。 | 注重高性能和稳定性,且需要复杂标量过滤的场景。 |
| Elasticsearch | 在原有版本上增加了向量插件。 | 已有ES架构,不想引入新组件,且对向量精度要求不极致的团队。 |
| Chroma / LanceDB | 轻量级,嵌入式,专为LLM应用开发(LangChain友好)。 | 本地开发、原型验证、个人知识库助手。 |
4. 核心应用场景(不仅限于RAG)
很多人以为向量数据库只用来做知识库问答(RAG),其实这只是冰山一角:
RAG(检索增强生成):把企业文档切片向量化,让大模型在回答前先“查阅”相关上下文,解决幻觉问题。
多模态搜索:以图搜图、以文搜音(如淘宝拍立淘、音乐识别)。
推荐系统:将用户行为特征向量化,实时检索与当前用户最相似的“邻居”的喜好物品。
药物/分子发现:将分子结构编码为向量,在化学空间中快速找到结构相似的化合物。
5. 避坑建议(关键)
不要迷信“向量”:实际业务中,“标量过滤”(Metadata Filtering)比向量相似度更重要。比如“查找与这张图片相似的,且价格在100元以内、品牌是Nike的商品”。如果数据库不支持高效的标量过滤,查询会非常慢。
维度灾难:向量维度超过768维后,提升精度带来的算力成本急剧上升。尽量使用通用Embedding模型(如OpenAI
text-embedding-3-small)或针对业务微调的模型,不要盲目增加维度。
工作原理
第一阶段:写入数据(如何把“苹果”变成数字?)
这个过程叫向量化(Embedding),核心是“语义理解”而非“关键词匹配”。
输入:你传入一段文本(如“苹果很好吃”)、一张图片或一段音频。
调用模型:数据库内部或外部调用一个Embedding模型(如OpenAI的
text-embedding-3或开源的BGE)。输出向量:模型将输入转化为一个高维浮点数数组,例如
[0.12, -0.58, 0.93, ... , 0.41](通常有 384、768 或 1536 个维度)。存储+索引:
原始数据(文本/图片URL)存入对象存储。
向量数据存入专门的向量列。
最关键的一步:数据库立即对这个向量执行索引构建算法(如HNSW或IVF),把它挂载到特定的“图结构”或“聚类簇”中,为后续快速查询做准备。
第二阶段:查询数据(如何在一亿条数据中“闪电”找到最像的?)
如果暴力遍历一亿条向量进行余弦相似度计算,一次查询需要几秒钟,这不可接受。向量数据库使用“粗略筛选 + 精细重排”的两阶段策略。
步骤 1:查询向量化
你输入“新鲜的水果”,系统用同一个Embedding模型将它转化为向量Q。
步骤 2:近似最近邻搜索(ANN)——提速核心
系统不会遍历所有数据,而是利用事先建好的索引进行“作弊式”查找:
如果使用 IVF(倒排索引):系统会先计算
Q属于哪个“聚类簇”(相当于先确定它在哪个城市),只搜索该簇内的向量,排除掉其他99%的不相关数据。如果使用 HNSW(层级图):系统从最顶层的“高速路”节点开始,跳跃式地找到离
Q最近的几个入口点,再逐层向下细化,像下楼梯一样快速定位到最底层的小范围邻居群。
步骤 3:标量预过滤(极易踩坑的环节)
如果你的查询带有条件(例如“新鲜的水果,且价格<10元,产地为山东”),数据库会执行Pre-filter(预过滤)或Post-filter(后过滤):
预过滤:先在价格<10元且产地为山东的记录中,再计算向量相似度(精准但可能漏掉向量极相似但标量不符的优质结果)。
后过滤:先找出向量最相似的Top 200条,再从中筛选出价格<10元的(速度快,但若Top 200里没有符合条件的,返回结果为空)。
高级数据库(如Milvus)支持迭代式过滤,平衡两者。
步骤 4:精确重排与打分
对于筛选出的候选集(比如100条),系统才进行精确的余弦相似度或欧氏距离计算,按分数从高到低排序。
步骤 5:返回结果
数据库将排序后的Top K条结果(如最相似的5条)连同原始文本/图片URL一起返回给你。
关键补充:写入与查询的“坑”
| 环节 | 常见误区 | 正确逻辑 |
|---|---|---|
| 模型一致性 | 用“百度”的模型入库,用“OpenAI”的模型查询。 | 入库和查询必须使用完全相同的Embedding模型,否则向量空间不互通,查询结果完全错误。 |
| 索引更新 | 每插入一条数据就重建一次全局索引。 | 新数据先写入缓冲区,达到阈值(如512MB)后才触发索引构建,因此向量数据库不适合频繁单条更新的业务(写放大严重)。 |
| 删除逻辑 | 物理立即删除。 | 绝大部分向量数据库对删除是标记为“墓碑”(软删除),查询时过滤掉,后台异步物理清理,避免索引结构剧烈抖动。 |
一句话总结
写入时:用AI模型将非结构化数据“翻译”成空间坐标(向量),并建立索引地图。
查询时:将你的问题也“翻译”成坐标,利用索引地图快速跳过99%的区域,只在最可能的小范围内进行精确距离计算,最后返回离你坐标最近的原始数据。