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 知识库问答、智能客服、多模态检索等应用的首选向量数据库
