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!