RAG入门,向量存储与Milvus企业级向量数据库,如何选?

摘要:本文是 refine-rag 系列教程的第八篇,我们来学习向量存储的核心技术和 Milvus 数据库的使用。 本文所有代码都在:https:github.comzonezoenrefine-rag 往期系列文章 007:RAG 入门
本文是 refine-rag 系列教程的第八篇,我们来学习向量存储的核心技术和 Milvus 数据库的使用。 本文所有代码都在:https://github.com/zonezoen/refine-rag 往期系列文章 007:RAG 入门-向量嵌入与检索 006:RAG 入门-面试官问你,RAG 为什么要切块? 005:RAG 入门-LangChain读取表格数据 目录 前言 为什么传统数据库搞不定向量搜索? 向量数据库横向对比 为什么选择 Milvus? 快速搭建 Milvus Milvus 核心概念 实战示例 学习路径 前言 前面我们学习了向量嵌入与检索,知道如何把文本转成向量、如何计算相似度。但有个问题:这些向量存在哪里? 如果只有几千条数据,存在内存里就够了。但如果有几百万、几千万条数据呢?这时候就需要专业的向量数据库。 向量数据库就像是为向量量身定制的"仓库管理系统",它不仅能存储海量向量,还能快速检索、高效管理。 为什么传统数据库搞不定向量搜索? 上一篇文章提到,向量本质上是一个浮点数数组,是机器理解文本语义的方式。 你可能会想:既然向量就是数组,那我存进 MySQL 的 JSON 字段或者直接存在内存 List 里不行吗? 答案是:小规模可以,大规模必死。 当你的知识库达到万级、百万级甚至亿级时,你会面临: 检索效率塌方(计算量过大): 传统数据库查找数据是“相等判断”,而向量搜索需要计算空间距离。如果你有 100 万条数据,每搜一次都要全表扫一遍并计算相似度O(n) 复杂,查询一次可能要几秒甚至几分钟。向量数据库通过 ANN(近似最近邻)算法(如 HNSW),将搜索效率提升到了毫秒级O(log n) 复杂度。 维度灾难(内存压力): 一个 1536 维的向量(OpenAI 标准)看起来不大,但几百万条叠在一起,会瞬间撑爆普通的服务器内存。向量数据库专门优化了数据的压缩与加载策略。 工程化缺失: 向量数据库不仅仅是“存数据”,它还提供了成熟的 CRUD、多租户隔离、数据备份和水平扩展(Scale-out)能力,这些是简单的内存库(如 FAISS)难以胜任的。 核心对比:传统数据库 vs 向量数据库 传统数据库查找的是精准的数据,而向量数据库则更适合模糊搜索。 传统数据库 (MySQL): 你问:“有没有编号为 1024 的商品?”他秒回。 你问:“有没有长得像苹果的手机?”他直接罢工”。 向量数据库 (Milvus): 他会把所有数据转化为空间坐标,告诉你:“虽然我没找到完全一样的,但有几个神似的数据。” 代码层面的直观感受 传统数据库(MySQL):侧重“准” -- 精确查询:差一个字都搜不到 SELECT * FROM products WHERE category = '手机' AND brand = '苹果'; -- 范围查询:基于确定的数值边界 SELECT * FROM products WHERE price BETWEEN 5000 AND 8000; 特点:擅长精确匹配,基于 B-Tree 索引,查询条件极其明确(非黑即白)。 向量数据库(Milvus):侧重“像” # 相似度查询:基于“语义距离” results = client.search( collection_name="products", data=[query_vector], # 搜索“长得像苹果的手机”对应的向量 limit=10 ) 特点:擅长模糊搜索,基于向量索引(HNSW、IVF),返回的是 Top-K 个“最相似”的候选者。
阅读全文