Milvus

Milvus是zilliz研发的开源向量数据库,赋能AI应用和向量相似度搜索。
https://github.com/milvus-io/milvus

Milvus的系统架构

  1. 接入层Access layer:一组无状态的proxy,是所有请求的入口。
  2. 协调服务Coordinator service:分配任务给worker node,主要工作有集群拓扑管理、负载均衡、TSO时间生成、数据管理等。
    • RootCoord:集群控制器
    • QueryCoord:查询服务的控制器
    • DataCoord:数据服务的控制器
    • IndexCoord:索引构建服务的控制器
  3. 执行节点Worker nodes:完成协调服务coord下发的指令。
    • QueryNode:对其所管理的segment进行流批一体化查询
    • DataNode:对其所管理的segment进行持久化
    • IndexNode:对其所管理的segment进行全量索引构建
  4. 存储服务:Milvus数据的持久化。

Milvus的存储结构

  1. Collection集合:等价于关系型数据系统中的表。
  2. Shard分片:将数据的写入操作分散到不同的节点上。使Milvus能充分利用集群的并行计算能力进行写入。一个Collection默认包含两个Shard。
  3. Partition分区:集合的一个分区,Milvus支持将收集数据划分为物理存储上的多个部分,每个分区包含多个段。
  4. Segment段:Milvus在数据插入时,通过合并数据自动创建的数据文件。在搜索中,Milvus 会搜索每个segment,并返回合并后的结果。
    • Growing Segment
    • Sealed Segment
  5. Entity实体:包含一组field。Field与实际对象对应,field可以是结构化数据,也可以是向量。PrimaryKey是指代Entity的唯一值。等价于关系型数据库的行。
  6. Field字段:可以是数字、字符串、向量等。等价于关系数据库的表字段。

Milvus索引

Milvus目前支持的向量索引类型大都属于ANN近似最近邻搜索,牺牲可接受范围内的精度提高检索效率。向量类型分为浮点型向量和二进制向量。

  1. 浮点型向量
    1. 距离计算方式
      • 欧氏距离L2
      • 内积IP
    2. 索引类型
      • FLAT:暴力搜索。
      • IVF_FLAT: IVF的全称是Inverted File Index倒排文件索引。IVF主要利用倒排的思想保存每个聚类中心下的向量(id,vector),每次查询向量的时候找到最近的几个中心,分别搜索这几个中心下的向量。通过减小搜索范围,大大提升搜索效率。
      • IVF_SQ4: SQ4和SQ8是两种向量的量化方法。
      • IVF_SQ8
      • IVF_PQ: PQ乘积量化,将高维向量切分为小向量再聚类,还可以完成向量的压缩。
      • HNSW
      • DISKANN: DiskANN通过将索引结构存储在磁盘上,从而允许处理超出内存容量的数据集。
  2. 二进制向量
    1. 距离计算方式
      • Jaccard距离
      • Haming距离
    2. 索引类型
      • BIN_FLAT
      • BIN_IVF_FLAT