Milvus-云原生和分布式的开源向量数据库-介绍

/ˈmɪlvəs/

在 RAG(检索增强生成)的向量检索工具中,Milvus 是一款「云原生、分布式」的开源向量数据库

核心定位是解决「大规模、高并发、高可用」场景下的向量相似性检索问题

相比 ANNOY(轻量单机)、FAISS(单机 / 分布式但需手动部署),Milvus 更适合企业级 RAG 系统(比如百万 / 亿级知识库、多团队协作、高并发查询),是当前工业界落地 RAG 的主流选择之一

什么是 Milvus?

官方定义:

一款专为高维向量设计的开源向量数据库,支持近似最近邻(ANN)检索和精确检索,提供高吞吐、低延迟的向量查询服务

核心目标:

解决「亿级高维向量的快速检索 + 企业级稳定性」问题

比如 RAG 场景中,当知识库规模达到 10 亿级文档片段(对应 10 亿级向量),且需要支持每秒数千次查询(QPS)时,ANNOY、单机 FAISS 无法承载,而 Milvus 通过分布式架构可轻松应对

关键标签:

开源、云原生、分布式、多模态支持(不仅支持文本向量,还支持图像、音频等向量)、企业级高可用

Milvus 的核心优势

相比 ANNOY、FAISS 等工具,Milvus 的核心优势集中在「大规模支撑、稳定性、易用性」,完美适配企业级 RAG 需求

分布式架构:支持海量数据与高并发

  • 数据分片:将亿级向量拆分成多个分片,存储在不同节点上,避免单节点压力过大
  • 水平扩容:当数据量或查询量增长时,只需新增节点即可,无需重构系统
  • 高吞吐量:支持每秒数万次向量查询(QPS),满足高并发问答场景(比如大型企业内部全员使用的知识库问答)

企业级高可用:避免服务中断

  • 数据多副本:每个向量分片会存储多个副本(比如 3 副本),单个节点故障时,副本自动接管服务,无数据丢失
  • 故障自动恢复:节点故障后,系统会自动检测并重启,无需人工干预
  • 支持跨区域部署:可在多个数据中心部署,进一步提升可用性(比如跨北京、上海机房)

易用性:降低企业级部署成本

  • 全托管服务(Zilliz Cloud):无需手动部署、运维分布式集群,开箱即用(类似 Pinecone,但支持私有部署)
  • 丰富的 API 与 SDK:支持 Python、Java、Go、C++ 等多种语言,可无缝集成到 RAG 技术栈(LangChain、Haystack 等框架直接提供 Milvus 连接器)
  • 可视化管理工具(Attu):提供图形化界面,可直观查看向量库、索引、查询性能,方便运维调试

灵活的索引与检索策略

  • 支持多种 ANN 索引算法:可根据数据量和需求选择(比如 IVF_FLAT 适合中小规模、IVF_PQ 适合大规模、HNSW 适合低延迟场景)
  • 混合检索:支持「向量相似度检索 + 元数据过滤」(比如 RAG 中可按 "文档来源 = 产品手册" 过滤,只检索该类文档的向量),进一步提升检索精度
  • 多模态兼容:不仅支持文本向量(如 Sentence-BERT 输出),还支持图像向量(如 ResNet 输出)、音频向量,可支撑多模态 RAG(比如 "上传图片查询相关文档")

数据安全与合规

支持数据加密:传输加密(TLS/SSL)、存储加密(AES-256),满足企业数据安全要求

访问控制:支持 RBAC(基于角色的访问控制),可按团队 / 用户分配向量库的读写权限

(比如产品团队只能查询产品文档向量,财务团队只能查询财务文档向量)

RBAC 的全称是 基于角色的访问控制(Role-Based Access Control),是一种常用的权限管理机制

核心是通过 "角色" 作为中间层,关联用户与权限,实现权限的批量分配和统一管控

Milvus 的核心技术逻辑

Milvus 的底层设计围绕「分布式向量存储 + 高效索引 + 并行查询」展开

核心流程可分为「数据写入(RAG 向量预处理)」和「数据查询(RAG 在线检索)」:

数据写入流程(RAG 向量预处理阶段)

步骤 1:接收 RAG 预处理后的「向量 + 文本片段 + 元数据」(比如 768 维向量、片段内容、文档来源)

步骤 2:数据分片:按预设规则(如哈希分片)将向量分配到不同节点的分片上

步骤 3:索引构建:每个分片会对本地向量构建索引(支持手动触发或自动触发,比如数据量达到 1 万条时自动构建)

步骤 4:数据持久化:向量和索引会存储到持久化存储(如 MinIO、S3),避免节点重启后数据丢失

数据查询流程(RAG 在线检索阶段)

步骤 1:接收用户问题编码后的查询向量,以及可选的元数据过滤条件(如 "文档来源 = 2025 年假政策")

步骤 2:路由分发:查询请求被路由到所有存储相关分片的节点

步骤 3:并行检索:每个节点对本地分片执行向量检索(结合索引快速匹配),返回 Top-K 相似向量

步骤 4:结果聚合:将所有节点的检索结果汇总,重新按相似度排序,筛选出最终的 Top-K 结果(比如 Top-5)

步骤 5:返回结果:将结果对应的文本片段和元数据返回给 RAG 的生成模块

Milvus 在 RAG 中的完整应用流程

离线准备(向量预处理 + Milvus 入库)

文档拆分:用 LangChain 拆分长文档为短片段(如 200 字 / 段)

向量编码:用 Sentence-BERT 编码片段为 768 维向量,关联元数据(文档来源、章节、页码)

Milvus 初始化:

创建「集合(Collection)」:相当于 RAG 的 "知识库向量表",定义向量维度(如 768)、元数据字段(如 source: string, chapter: string)

创建索引:为集合指定索引算法(如 HNSW,适合低延迟场景)

数据写入:将「向量 + 元数据」批量写入 Milvus 集合,Milvus 自动完成分片和索引构建

在线推理(在线检索 + Milvus 查询)

用户提问:用户输入 "2025 年年假政策是什么?"

问题预处理 + 编码:规范问题后,用同一个 Sentence-BERT 编码为查询向量

Milvus 检索:

调用 Milvus SDK,传入查询向量 + 元数据过滤条件(如 source="员工手册")

Milvus 分布式并行检索,毫秒级返回 Top-5 相似向量对应的文本片段

结果过滤:剔除相似度低于阈值(如 0.5)的片段

生成答案:将「问题 + 高相关片段」输入大模型,生成精准答案

知识库更新(增量维护)

新增文档:拆分、编码后,批量写入 Milvus 集合(支持增量更新,无需全量重建索引)

删除 / 修改文档:通过元数据(如 chunk_id)定位到目标向量,执行删除 / 更新操作

索引优化:Milvus 支持自动优化索引(如合并小分片、重建索引),保证检索性能稳定

Milvus 与其他 RAG 向量检索工具的对比

关键使用建议

索引选择

中小规模数据(100 万以内):选 IVF_FLAT(精度高,检索速度快)

大规模数据(100 万~10 亿):选 HNSW(低延迟,召回率高)或 IVF_PQ(存储成本低,适合超大规模)

注意:索引构建需要时间,批量写入数据后建议手动触发索引构建(避免刚写入就查询导致检索速度慢)

元数据设计:

必加字段:文档来源(source)、片段 ID(chunk_id)、创建时间(create_time),方便后续筛选、更新、溯源

避免冗余:元数据字段不宜过多(比如不存储完整文本片段,仅存储片段 ID,文本片段可存在 MySQL/MinIO 中,通过 ID 关联),减少 Milvus 存储压力

部署方式:

快速验证:用 Milvus Standalone(单机版),部署简单,适合测试

生产环境:用 Milvus Cluster(分布式集群)或 Zilliz Cloud(全托管),保证高可用和高并发

资源配置:根据数据量调整节点规格(比如亿级数据建议至少 3 个数据节点 + 2 个查询节点)

性能优化:

批量写入:预处理阶段批量写入 Milvus(每次批量 1 万~10 万条),比单条写入效率高 10 倍以上

查询参数调优:HNSW 索引可调整 ef 参数(查询时的候选集大小,ef 越大精度越高但延迟越高,默认 100,可根据需求调整)

向量维度:优先选择低维向量编码器(如 all-MiniLM-L6-v2 输出 384 维),减少存储和计算成本

核心总结

Milvus 是 RAG 场景中「企业级向量检索」的标杆工具

核心价值是「用分布式架构解决大规模、高并发、高可用的向量检索问题」,同时兼顾易用性和合规性

它不像 ANNOY 那样轻量,但能支撑 RAG 从 "小范围试用" 到 "全公司推广" 的规模化落地

是中大型企业构建 RAG 知识库问答、智能客服、多模态检索等应用的首选向量数据库

相关推荐
西岭千秋雪_3 小时前
Kafka客户端整合
java·spring boot·分布式·kafka·linq
360智汇云3 小时前
Kafka 消费积压影响写入?试试 Pulsar
分布式·kafka
Ctrl+S 之后4 小时前
分布式数据库高可用架构设计与动态一致性优化实践经验分享
数据库·经验分享·分布式
小坏讲微服务5 小时前
整合Spring Cloud Alibaba与Gateway实现跨域的解决方案
java·开发语言·后端·spring cloud·云原生·gateway
4***14905 小时前
后端分布式缓存集群,Redis Sentinel
redis·分布式·缓存
SelectDB技术团队8 小时前
Apache Doris 自动分区:如何应对分布式环境下的复杂并发挑战|Deep Dive
分布式·apache
早睡冠军候选人8 小时前
Ansible学习----管理复杂的 Play 和 Playbook 内容
运维·学习·云原生·ansible
qq_281317479 小时前
ZooKeeper
分布式·zookeeper·云原生
旦沐已成舟12 小时前
K8S中修改apiserver地址
云原生·容器·kubernetes