Milvus向量数据库

/ˈmɪlvəs/

一、特点

百亿 级,分布式 ,毫秒级检索,低延迟、高并发,支持百万维度;

支持多模态 (文本、图片、视频、音频)各种非结构化数据的向量存储 ,支持混合检索、多向量类型(稠密向量、稀疏向量);

实时索引更新;

索引优化:提供多种索引类型(如 IVF_FLAT、HNSW、IVF_PQ、ANNOY 等)

支持向量压缩、分布式索引分片、分布式事务

支持元数据过滤(如按文档标签、时间戳筛选)

支持 "冷热数据分离":热数据存内存,冷数据存对象存储,分层存储(内存 + SSD + 对象存储)

需安装启动服务,

适用场景:亿级以上海量数据,实时 超低延迟检索(<100ms),私有部署。

二、结构

Collection:包含一组 entity,

Entity:包含一组 field。primary key 是用于指代一个 entity 的唯一值。

Field:可以是代表对象属性的结构化数据,例如数字和字符串,也可以是向量。

Milvus 向量数据库 关系型数据库
Collection
Entity
Field 表字段

Segment:一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,Milvus 会搜索每个 segment,并返回合并后的结果。

Partition分区:是集合(Collection)的一个分区。Milvus 支持将收集数据划分为物理存储上的多个部分。这个过程称为分区,每个分区可以包含多个段。

Sharding分片 :是指将数据写入操作分散到不同节点上,使 Milvus 能充分利用集群的并行计算能力进行写入。默认情况下,单个 Collection 包含 2 个分片(Shard)。目前 Milvus 采用基于​主键哈希​的分片方式,未来将支持随机分片、自定义分片等更加灵活的分片方式。

​**注意:**​ 分区的意义在于通过划定分区减少数据读取,而分片的意义在于多台机器上并行写入操作。

PChannel:物理信道。每个 PChannel 对应一个日志存储主题。默认情况下,将分配一组 256 个 PChannels 来存储记录 Milvus 集群启动时数据插入、删除和更新的日志。

VChannel:逻辑通道。每个集合将分配一组 VChannels,用于记录数据的插入、删除和更新。VChannels 在逻辑上是分开的,但在物理上共享资源。


三、存储

负责 Milvus 数据的持久化,分为元数据存储(meta store)、消息存储(log broker)和对象存储(object storage)三个部分。

1、元数据存储

负责存储元信息的快照,比如:集合 schema 信息、节点状态信息、消息消费的 checkpoint 等。元信息存储需要极高的可用性、强一致和事务支持,因此,etcd 是这个场景下的不二选择。除此之外,etcd 还承担了服务注册和健康检查的职责。

2、对象存储

负责存储日志的快照文件、标量 / 向量索引文件以及查询的中间处理结果。Milvus 采用 MinIO 作为对象存储,另外也支持部署于 AWS S3 和 Azure Blob 这两大最广泛使用的低成本存储。但是,由于对象存储访问延迟较高,支持基于内存或 SSD 的缓存池,通过冷热分离的方式提升性能以降低成本。

3、消息存储

消息存储是一套支持回放的发布订阅系统,用于持久化流式写入的数据,以及可靠的异步执行查询、事件通知和结果返回。执行节点宕机恢复时,通过回放消息存储保证增量数据的完整性。


四、索引

支持多种索引类型(如 IVF_FLAT、HNSW、IVF_PQ、ANNOY 等),

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

基于原始数据构建,可以提高对 collection 数据搜索的速度。一个向量字段支持一种索引类型。切换索引类型时,Milvus 自动删除之前的索引。

选择:

  • 中小规模数据(100 万以内):选 IVF_FLAT(精度高,检索速度快)
  • 大规模数据(100 万~10 亿):选 HNSW(低延迟,召回率高)或 IVF_PQ(存储成本低,适合超大规模)

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

五、使用

1、机器节点:存储 和 计算分离架构,根据数据量调整节点规格(比如亿级数据建议至少 3 个数据节点 + 2 个查询节点)

2、Milvus 初始化

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

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

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

3、Milvus 检索

调用 Milvus SDK,传入查询向量 + 元数据过滤条件(如 source="员工手册"),Milvus 会分布式并行检索。

4、知识库更新(增量维护)

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

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

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


六、Milvus 主要的组件

Milvus 支持两种部署模式,单机模式(standalone)和分布式模式(cluster)。两种模式具备完全相同的能力,用户可以根据数据规模、访问量等因素选择适合自己的模式。Standalone 模式部署的 Milvus 暂时不支持在线升级为 cluster 模式。

6.1 单机版

单机版 Milvus​ 包括三个组件:

  • Milvus 负责提供系统的核心功能。
  • etcd 是元数据引擎,用于管理 Milvus 内部组件的元数据访问和存储,例如:proxy、index node 等。
  • MinIO 是存储引擎,负责维护 Milvus 的数据持久化。
6.2 分布式版

分布式版 Milvus​ 由八个微服务组件和三个第三方依赖组成,每个微服务组件可使用 Kubernetes 独立部署。

存储 和 计算分离架构:根据数据量调整节点规格(比如亿级数据建议至少 3 个数据节点 + 2 个查询节点)

​**(1)微服务组件**​
  • Root coord
  • Proxy
  • Query coord
  • Query node
  • Index coord
  • Index node
  • Data coord
  • Data node *
​**(2)第三方依赖**​
  • etcd 负责存储集群中各组件的元数据信息。
  • MinIO 负责处理集群中大型文件的数据持久化,如索引文件和全二进制日志文件。
  • Pulsar 负责管理近期更改操作的日志,输出流式日志及提供日志订阅服务。
相关推荐
Zilliz Planet2 小时前
官宣,Milvus开源语义高亮模型:告别饱和检索,帮RAG、agent剪枝80%上下文
人工智能·算法·机器学习·剪枝·milvus
不正经绣才2 小时前
飞书多维表格工作流指南(AI日报小助手)
ai·飞书·教程·工作流·扣子
KG_LLM图谱增强大模型2 小时前
知识图谱的演进:从静态到动态、时序与事件的全景综述
人工智能·大模型·知识图谱
一个帅气昵称啊2 小时前
.Net优雅实现AI知识库基于Ollama模型,Qdrant作为向量数据库实现RAG流程AI检索增强
人工智能·ai·.net·rag·qdrant
2501_940391082 小时前
AI搜索优化:BugooAI、智推时代、百分点科技的战略抉择
ai
iFlow_AI3 小时前
使用iFlow CLI创建自定义Command:网页文章下载与翻译工具
前端·javascript·大模型·心流·iflow·iflowcli
CRMEB3 小时前
高品质开源电商系统的技术内核:架构设计与技术优势
ai·开源·php·免费源码·源代码管理·商城源码
德育处主任Pro3 小时前
『NAS』不止娱乐,NAS也是生产力,在绿联部署AI工作流工具-n8n
人工智能·docker·ai·群晖·nas·绿联·极空间
enjoy编程3 小时前
Spring-AI Agent Skills 赋予AI智能体“即插即用”的专业超能力
人工智能·ai·智能体·spring ai·opencode·agent skill