Milvus 数据段(Segment)
在Milvus中,数据段(Segment)是存储在集合(Collection)或分区(Partition)中的一块数据单元。每个数据段包含若干行数据,便于分布式存储和高效检索。
生活类比: 数据段就像一个大文件夹里的子文件夹,每个子文件夹里装着一部分资料。这样查找、整理、搬运都更方便。
集合、分区和数据段的关系
集合(Collection)是Milvus中存储数据的最高层级,可以理解为一张表。每个集合可以包含多个分区(Partition),每个分区又可以包含多个数据段(Segment)。三者的关系如下:
- 集合:数据的总仓库,比如"用户信息库"。
- 分区:集合中的分组,比如"男用户分区""女用户分区"。
- 数据段:分区中的数据块,比如"男用户分区"下的第1块数据。
生活类比: 集合像一个大书柜,分区是书柜里的不同书架,数据段是书架上的一摞摞书。
结构示意:集合包含两个分区(左右并排、上下对齐),每个分区包含三个数据段
- ID: 数据段的唯一标识。
- Level: 数据段的层级,反映了数据段在生命周期中的阶段。
- L0: 最新写入的原始数据段,通常还在内存中,未经过合并。
- L1: 经过一次或多次合并、压缩后的数据段,通常已落盘,数据更"冷"。
- Level越高,数据越"老",越稳定,写入频率越低,适合高效检索。
生活类比: Level就像快递分拣中心的分级:L0是刚到的包裹,L1是已经打包好、准备长期存放的包裹。
技术说明: Level机制有助于数据分层管理,提升写入和检索效率,减少碎片。
- 分区ID: 该数据段属于哪个分区。
- 持久数据段状态: 如Flushed表示已落盘,数据已安全保存。
- 行数: 该数据段包含的数据条数。
- 查询节点IDs: 负责存储和检索该数据段的服务器节点编号。
分布式Milvus集群中,数据段会分布在不同的查询节点(QueryNode)上。每个查询节点负责一部分数据段的检索任务。
生活类比: 查询节点就像图书馆的不同管理员,每个管理员负责管理和查找自己负责的那几排书架(数据段)。
作用: 合理分配查询节点可以提升检索效率,实现负载均衡和高可用。
- 查询数据段状态: 如Sealed表示该段已封存,不再写入,只用于查询。
4. 适用场景
- 大规模数据的分布式存储与高效检索
- 数据安全与持久化
- 系统自动管理与优化存储结构
5. 小结
- 数据段是Milvus底层高效存储和检索的基础单元。
- 通过压缩、落盘等机制,保证数据既安全又高效。