向量数据库解决了什么问题?

向量数据库解决了什么问题:为什么不能用MySQL作向量检索、ANN索引原理

从一个问题出发

你做了一个RAG系统,有100万给个文档chunk,每个chunk都经过Embedding变成了一个768维向量

现在用户提了一个问题,你把这个问题也向量化了,接下来要做的事情就是:找到100万个向量里,和这个Query向量最相似的top-5个

最直接的方法就是"暴力搜索":把Query向量和全部100万个向量逐一计算余弦相似度,排序,取top-5,在一台普通服务器上,这个操作大概需要几百毫秒到几秒---对于实时场景来说完全不可以接收

而且,当向量数量增长到1000万、1亿时,暴力搜索的耗时增长,根本无法用于生产

这就是向量数据库要解决的核心问题:在海量高维向量中,如何在毫秒级内找到最相似的结果

为社么不能用MySQL做向量检索?

传统关系型数据库的查询本质上是精确度匹配或者范围扫描,比如WHERE age > 25 AND city = '北京',通过B-Tree索引可以快速定位到符合条件的行

向量相似度搜索完全不同,你不是在问"那些向量等于某个值",而是在问"那些向量和我的查询向量最接近"---这是一个在高维连续空间里的几何问题

传统数据库的索引结构对这类问题完全无效,因为他们设计之初没有考虑"高维几何相似度"这个维度,即便PostgreSQL的pgverctor扩展支持向量存储,在大规模场景下的性能仍然远不如专门的向量数据库

向量索引:ANN如何在速度和精度之间取得平衡

要在百万级向量中做毫秒级检索,关键是向量索引,向量数据库不做暴力全量计算,而是预先构建一个特殊的索引结构,让检索时只需要访问一小部分向量就能找到近似的最近邻---这就是ANN

近似,这两个字需要注意,ANN不保证找绝对最近邻,但在实践中找到的结果精确度足够高,而速度提升是数量级的

目前最主流的两类向量索引算法是:

HNSW

HNSW构建了一个层级结构的图:最顶层是少量节点,形成高速公路,底层是所有节点,形成"街道网络"。检索时从顶层入口进入,沿图中的邻居边快速导航,逐层下降,想GPS导航一样越来越精细,最终定位到目标附近的最近邻

HNSW的优势时查询速度极快、精度高,是Milvus,Qdrant,Weaviate等主流向量数据库的默认索引,代价是构建索引时内存占用较大

IVF

IVF先对所有向量做K-means聚类,把相似的向量分组到同一个货架,检索时先找到Query向量最近的几个货架,只在这些货架里面做精细查找,而不是全量扫描

IVF的优势是内存占用较低,适合超大规模数据集,缺点是如果Query向量恰好落在两个货架的边界,可能会漏掉一些相关结果(边界效应)

向量数据库还能做什么?

向量数据库不只是"存向量、搜向量"这么简单,他还有几个在RAG工程里面非常重要的能力:

元数据过滤

每个向量可以附带结构化的元数据,比如文档来源、创建时间、部门归属、文档类型等。检索时可以在向量相似度搜索的同时附加元数据条件---比如"只在最近三个月的文档里面搜索"、"只搜索产品部门的文档"。这让RAG系统可以做到语义相关+业务过滤的组合查询

混合检索

主流向量数据库,支持同时运行向量搜索和关键词搜索,然后用融合算法,合并两路结果。这对中文专业术语场景尤其有用,因为有些专有名词的语义表示很弱,必须依赖关键词精确匹配

向量更新和删除

知识库需要持续更新---文档修改了、删除了,向量索引也需要对应更新,不同数据库对这个操作的支持成本差异很大,选型时需要考虑业务更新频率

主流向量数据库简介

目前常见的向量数据库选项可以分为几类:

专用向量数据库,这类系统从设计之初就以向量检索为核心,功能最完善,性能最优,适合大规模生产场景

传统数据库的向量扩展,如果已经有这些基础设施,小规模场景下也可以用,但在百万量级向量时性能明显不如专用方案

轻量级本地库,适合嵌入到应用内做原型或者小规模部署

选型的核心考量是规模和功能需求:如果是几十万向量以内的场景,Chroma或者pgvector足够,规模到百万以上、需要元数据过滤和混合检索,Milvus或者Qdrant是更好的选择

常见误区

误区一:向量数据库的结果不精确,所以不可靠

ANN近似指的是找到的不一定是数学意义上的绝对最近邻,但实践过程中召回精度通常在95%-99%,对于RAG应用来说,这个精度完全够用,而速度收益是数量级的

误区二:向量数据库越大越好,键索引时参数越高越好

HNSW等索引有超参数(如M---每个节点的最大连接数,efConstruction---建图时的搜索深度),这些参数越大精度越高,但占用内存和构建时间也成比例增加。根据实际场景找到精度、内存的平衡点,不是越大越好

误区三:向量相似度高就代表语义相关

向量相似度是Embedding模型学出来的相似度,取决于模型的训练质量和领域覆盖。如果Embedding模型对某个专业领域支持不足,即便向量相似度高,语义也可能并不相关,向量数据库只是工具,底层模型的质量仍然是决定因素

误区四:用FAISS就是用了向量数据库

FAISS是一个向量索引库,不是完整的数据库系统。他没有持久化、没有元数据管理、没有CRUD接口,只负责索引构建和搜索计算。在生产环境里面,通常需要在FAISS基础上自己封装持久化和业务逻辑,或者直接用封装好的这些能力的向量数据库

相关推荐
程序员清风24 分钟前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律1 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵1 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅2 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_2 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界4 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB4 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛4 小时前
MySQL的操作
数据库·mysql
猫咪很可爱5 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
小豆庄5 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程