Milvus
来自站长百科
Milvus是一款专为AI应用和向量相似度搜索而设计的开源向量数据库。作为一款专门处理向量查询的数据库,Milvus能够在大规模数据集上有效索引向量。与传统的关系型数据库主要处理预定义模式的结构化数据不同,Milvus从底层设计上就是为了管理和处理由非结构化数据转换来的嵌入向量。
Milvus概述[ ]
Milvus诞生于2019年,其核心目标在于存储、索引及管理由深度学习网络及其他机器学习模型生成的海量嵌入向量数据。
随着互联网的发展,非结构化数据(如电子邮件、社交媒体帖子、物联网数据等)变得越来越普遍。为了方便计算机理解和处理这些数据,通常需要将其转换为向量形式。Milvus正是为存储和索引这些向量数据而设计,它通过计算向量间的相似度来分析它们的关系:向量越相似,代表原始数据源也越相似。
Milvus优势[ ]
- 高性能:Milvus 对海量数据集进行向量相似度检索的性能高超,特别是在单节点上,可以在秒内完成十亿级的向量搜索。
- 多样化索引支持:Milvus 支持多种索引算法,如 FAISS、Annoy、HNSW 和 CAGRA 等,能够大幅优化向量检索的性能。特别是新引入的 CAGRA 索引,其速度和性能远超传统的 CPU 索引,使得在小批量查询中也表现出色。通过合适的索引选择,Milvus 能够针对特定的数据规模和查询需求提供最优解决方案。
- 高可用性:Milvus 的系统组件相互独立并隔离运行,从而确保系统的弹性和可靠性。即使在部分组件出现故障时,整体系统仍可保持正常运行。
- 容灾能力:Milvus 支持在云上扩展,容灾能力强大,能够保证服务的高可用性。这种设计尤其适合需要持续、稳定服务的业务场景。
- 云原生设计:Milvus 采用存储与计算分离的云原生架构设计,支持灵活扩展。这使得 Milvus 能够动态调整资源,根据实际需求快速扩展或缩小规模。
- 混合查询支持:Milvus 不仅支持向量相似度检索,还允许在检索过程中进行标量字段过滤,实现混合查询。这种功能增强了 Milvus 的应用广度,使其能够适用于更多复杂的业务场景。
- 简单易用:仅需几分钟便可搭建大型向量相似性搜索服务。从部署到实际使用的过程都有详细的文档和社区支持,降低了用户的上手难度。
- 支持多种数据类型:Milvus 支持各种数据类型,并提供丰富的功能,如数据过滤、多种数据一致性等级和 Time Travel 等功能。
- 应用场景广泛:Milvus 被全球上千家企业信赖,适用于图片检索系统、视频检索系统、分子式检索系统、音频检索系统、推荐系统及智能问答机器人等多种场景。
Milvus关键概念[ ]
非结构化数据[ ]
未遵循固定模型或组织方式的信息,如图像、视频、音频和自然语言等,占全球数据的大部分。通过各种AI和ML模型,这类数据可被转换为嵌入向量。
嵌入向量[ ]
非结构化数据的特征提取表示,数学上表现为浮点数或二进制数组。现代嵌入技术能够将非结构化数据转化为嵌入向量。
向量相似性搜索[ ]
将向量与数据库中的其他向量比较,以找出最接近查询向量的向量的过程。近似最近邻(ANN)搜索算法用于加速此过程。
Milvus索引和度量方式[ ]
索引类型[ ]
Milvus支持的大多数向量索引类型使用近似最近邻搜索(ANNS),包括:
- FLAT:FLAT 最适合于在小型百万级数据集上寻求完全准确和精确的搜索结果的场景;
- IVF_FLAT:IVF_FLAT 是基于量化的索引,最适合于在准确性和查询速度之间寻求理想平衡的场景。还有一个 GPU 版本 GPU_IVF_FLAT;
- IVF_SQ8:IVF_SQ8 是一种基于量化的索引,最适合于在磁盘、CPU 和 GPU 内存消耗非常有限的场景;
- IVF_PQ:IVF_PQ 是一种基于量化的索引,最适合于在牺牲准确性的情况下追求高查询速度的场景。还有一个 GPU 版本 GPU_IVF_PQ;
- HNSW:HNSW 是一种基于图的索引,最适合于对搜索效率有很高要求的场景。
相似性度量[ ]
在 Milvus 中,相似性度量用于衡量向量之间的相似性。选择一个好的距离度量有助于显著提高分类和聚类性能。根据输入数据的形式,选择特定的相似性度量以实现最佳性能。
浮点嵌入中广泛使用的度量包括:
- 欧氏距离(L2):该度量通常在计算机视觉(CV)领域中使用;
- 内积(IP):该度量通常在自然语言处理(NLP)领域中使用。
二进制嵌入中广泛使用的度量包括:
- 汉明距离(Hamming):该度量通常在自然语言处理(NLP)领域中使用;
- 杰卡德相似系数(Jaccard):该度量通常在分子相似性搜索领域中使用。
Milvus系统架构[ ]
作为一个云原生的向量数据库,Milvus 在设计上将存储和计算分离。为了增强弹性和灵活性,Milvus 中的所有组件都是无状态的。
系统分为四个层次:
- 接入层:接入层由一组无状态代理组成,作为系统的前端层和用户的终端点;
- 协调服务:协调服务将任务分配给工作节点,并作为系统的大脑;
- 工作节点:工作节点充当手脚,是彻底的执行者,遵循协调服务的指示并执行用户触发的 DML/DDL 命令;
- 存储:存储是系统的骨架,负责数据持久性。它包括元数据存储、日志代理和对象存储。