Milvus 向量数据库简述
Milvus
Milvus是zilliz研发的开源向量数据库,赋能AI应用和向量相似度搜索。
https://github.com/milvus-io/milvus
Milvus的系统架构
- 接入层Access layer:一组无状态的proxy,是所有请求的入口。
 - 协调服务Coordinator service:分配任务给worker node,主要工作有集群拓扑管理、负载均衡、TSO时间生成、数据管理等。
- RootCoord:集群控制器
 - QueryCoord:查询服务的控制器
 - DataCoord:数据服务的控制器
 - IndexCoord:索引构建服务的控制器
 
 - 执行节点Worker nodes:完成协调服务coord下发的指令。
- QueryNode:对其所管理的segment进行流批一体化查询
 - DataNode:对其所管理的segment进行持久化
 - IndexNode:对其所管理的segment进行全量索引构建
 
 - 存储服务:Milvus数据的持久化。
 
Milvus的存储结构
- Collection集合:等价于关系型数据系统中的表。
 - Shard分片:将数据的写入操作分散到不同的节点上。使Milvus能充分利用集群的并行计算能力进行写入。一个Collection默认包含两个Shard。
 - Partition分区:集合的一个分区,Milvus支持将收集数据划分为物理存储上的多个部分,每个分区包含多个段。
 - Segment段:Milvus在数据插入时,通过合并数据自动创建的数据文件。在搜索中,Milvus 会搜索每个segment,并返回合并后的结果。
- Growing Segment
 - Sealed Segment
 
 - Entity实体:包含一组field。Field与实际对象对应,field可以是结构化数据,也可以是向量。PrimaryKey是指代Entity的唯一值。等价于关系型数据库的行。
 - Field字段:可以是数字、字符串、向量等。等价于关系数据库的表字段。
 
Milvus索引
Milvus目前支持的向量索引类型大都属于ANN近似最近邻搜索,牺牲可接受范围内的精度提高检索效率。向量类型分为浮点型向量和二进制向量。
- 浮点型向量
- 距离计算方式
- 欧氏距离L2
 - 内积IP
 
 - 索引类型
- FLAT:暴力搜索。
 - IVF_FLAT: IVF的全称是Inverted File Index倒排文件索引。IVF主要利用倒排的思想保存每个聚类中心下的向量(id,vector),每次查询向量的时候找到最近的几个中心,分别搜索这几个中心下的向量。通过减小搜索范围,大大提升搜索效率。
 - IVF_SQ4: SQ4和SQ8是两种向量的量化方法。
 - IVF_SQ8
 - IVF_PQ: PQ乘积量化,将高维向量切分为小向量再聚类,还可以完成向量的压缩。
 - HNSW
 - DISKANN: DiskANN通过将索引结构存储在磁盘上,从而允许处理超出内存容量的数据集。
 
 
 - 距离计算方式
 - 二进制向量
- 距离计算方式
- Jaccard距离
 - Haming距离
 
 - 索引类型
- BIN_FLAT
 - BIN_IVF_FLAT
 
 
 - 距离计算方式
 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Writer-X!
