找回密码
 立即注册
首页 业界区 业界 008-01:RAG 入门-向量存储与企业级向量数据库 milvus ...

008-01:RAG 入门-向量存储与企业级向量数据库 milvus

萨瑞饨 2 小时前
本文是 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):侧重“准”
  1. -- 精确查询:差一个字都搜不到
  2. SELECT * FROM products WHERE category = '手机' AND brand = '苹果';
  3. -- 范围查询:基于确定的数值边界
  4. SELECT * FROM products WHERE price BETWEEN 5000 AND 8000;
复制代码

  • 特点:擅长精确匹配,基于 B-Tree 索引,查询条件极其明确(非黑即白)。
向量数据库(Milvus):侧重“像”
  1. # 相似度查询:基于“语义距离”
  2. results = client.search(
  3.     collection_name="products",
  4.     data=[query_vector],  # 搜索“长得像苹果的手机”对应的向量
  5.     limit=10
  6. )
复制代码

  • 特点:擅长模糊搜索,基于向量索引(HNSW、IVF),返回的是 Top-K 个“最相似”的候选者。
向量数据库横向对比

目前主流的向量数据库有很多,我们来对比一下:
主流向量数据库对比

数据库类型开源部署方式性能生态推荐度Milvus专业向量库是本地/云5/55/55/5Qdrant专业向量库是本地/云4/54/54/5Weaviate专业向量库是本地/云4/54/54/5Pinecone云服务否仅云5/54/53/5Chroma轻量级是本地3/53/53/5FAISS库(非数据库)是本地5/53/53/5pgvectorPostgreSQL 插件是本地/云3/54/53/5详细对比

1. Milvus

优点:

  • 性能强大,支持亿级向量
  • 索引算法丰富(HNSW、IVF、DiskANN)
  • 支持混合检索(向量 + 标量过滤)
  • 云原生架构,易扩展
  • 社区活跃,文档完善
  • 国内团队开发,中文支持好
缺点:

  • 部署稍复杂(需要 etcd、MinIO)
  • 资源占用较高
适用场景:

  • 生产环境
  • 大规模数据(建议百万级以上使用)
  • 需要高性能和稳定性
2. Qdrant

优点:

  • Rust 编写,性能优秀
  • 部署简单(单二进制文件)
  • API 设计优雅
  • 支持 payload 过滤
缺点:

  • 社区相对较小
  • 中文文档较少
  • 大规模数据性能不如 Milvus
适用场景:

  • 中小规模项目
  • 快速原型开发
  • 喜欢 Rust 生态
3. Weaviate

优点:

  • 内置 GraphQL API
  • 支持多模态搜索
  • 自带向量化模块
  • 语义搜索能力强
缺点:

  • 学习曲线陡峭
  • 资源占用高
  • 配置复杂
适用场景:

  • 知识图谱应用
  • 多模态搜索
  • 需要 GraphQL
4. Pinecone

优点:

  • 完全托管,无需运维
  • 性能优秀
  • 易用性好
缺点:

  • 闭源,不可自部署
  • 费用较高
  • 数据在国外(延迟问题)
适用场景:

  • 不想自己运维
  • 预算充足
  • 海外用户
5. Chroma

优点:

  • 极简设计,易上手
  • 轻量级,适合开发
  • 与 LangChain 集成好
缺点:

  • 性能一般
  • 不适合大规模生产
  • 功能相对简单
适用场景:
<ul>学习和原型开发
小规模应用(

相关推荐

您需要登录后才可以回帖 登录 | 立即注册