引言
本页面旨在通过回答几个问题,为您提供关于Milvus的概述。阅读完此页面后,您将了解Milvus是什么,以及它是如何工作的,还将了解一些关键概念、为何使用Milvus、所支持的索引和度量标准、示例应用、架构以及相关工具。
什么是Milvus向量数据库?
Milvus于2019年创建,其主要目标是存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量。
作为一种专门设计用于处理输入向量查询的数据库,Milvus能够对上万亿规模的向量进行索引。与现有的主要处理遵循预定义模式的结构化数据的关系型数据库不同,Milvus从底层开始设计,用于处理转换自非结构化数据的嵌入向量。
随着互联网的不断发展,非结构化数据变得越来越普遍,包括电子邮件、论文、物联网传感器数据、Facebook照片、蛋白质结构等等。为了使计算机能够理解和处理非结构化数据,这些数据要经过嵌入技术转换为向量。Milvus存储和索引这些向量。Milvus能够通过计算两个向量的相似距离来分析它们之间的相关性。如果两个嵌入向量非常相似,那么说明原始数据源也是相似的。
Milvus工作流程:
关键概念
如果您对向量数据库和相似度搜索的世界还不熟悉,可以阅读以下关键概念的解释,以更好地理解。
了解更多关于Milvus术语的内容。
非结构化数据
非结构化数据,包括图像、视频、音频和自然语言,是指不遵循预定义模型或组织方式的信息。这种数据类型占据了全球数据的约80%,可以使用各种人工智能(AI)和机器学习(ML)模型将其转换为向量。
嵌入向量
嵌入向量是非结构化数据(如电子邮件、物联网传感器数据、Instagram照片、蛋白质结构等)的特征抽象。从数学角度来说,嵌入向量是由浮点数或二进制数组组成的。现代的嵌入技术用于将非结构化数据转换为嵌入向量。
向量相似度搜索
向量相似度搜索是指将一个向量与数据库进行比较,找出与查询向量最相似的向量的过程。使用近似最近邻(ANN)搜索算法可以加速搜索过程。如果两个嵌入向量非常相似,那么说明原始数据源也是相似的。
为什么选择Milvus?
- 在大规模数据集上进行向量搜索时,具有高性能。
- 拥有以开发人员为中心的社区,支持多语言和工具链。
- 可以在云中实现可扩展性和高可靠性,即使在发生故障时也能保持稳定。
- 通过将标量过滤与向量相似度搜索相结合,实现混合搜索。
支持的索引和度量标准是什么?
索引是数据的组织单元。在搜索或查询插入的实体之前,您必须声明索引类型和相似度度量标准。如果您未指定索引类型,Milvus将默认使用暴力搜索。
索引类型
Milvus支持的大多数向量索引类型使用近似最近邻搜索(ANNS),包括:
- FLAT:适用于在小规模(百万级)数据集上寻求完全准确和精确搜索结果的场景。
- IVF_FLAT:基于量化的索引,适用于在准确性和查询速度之间寻求理想平衡的场景。还有一个GPU版本GPU_IVF_FLAT。
- IVF_SQ8:基于量化的索引,适用于寻求磁盘、CPU和GPU内存消耗大幅减少的场景,因为这些资源非常有限。
- IVF_PQ:基于量化的索引,适用于追求高查询速度即使牺牲准确性的场景。还有一个GPU版本GPU_IVF_PQ。
- HNSW:基于图的索引,适用于对搜索效率有很高要求的场景。
有关更多详细信息,请参见向量索引。
相似度度量
在Milvus中,相似度度量用于衡量向量之间的相似性。选择一个好的距离度量可以显著提高分类和聚类性能。根据输入数据的形式,选择特定的相似度度量以获得最佳性能。
用于浮点嵌入的常用度量有:
- 欧氏距离 (L2):该度量通常在计算机视觉领域使用。
- 内积 (IP):该度量通常在自然语言处理领域使用。
用于二进制嵌入的常用度量有:
- 汉明距离:该度量通常在自然语言处理领域使用。
- 杰卡德相似度:该度量通常用于分子相似性搜索。
示例应用
Milvus使得将相似搜索添加到您的应用程序中变得很容易。Milvus的示例应用包括:
- 图像相似搜索:使图像可搜索,并即时从大型数据库中返回最相似的图像。
- 视频相似搜索:通过将关键帧转换为向量,然后将结果输入Milvus中,可以在几乎实时搜索和推荐数十亿个视频。
- 音频相似搜索:快速查询大量音频数据,如语音、音乐、音效和相似声音。
- 推荐系统:基于用户行为和需求推荐信息或产品。
- 问答系统:交互式的数字问答聊天机器人,能自动回答用户问题。
- DNA序列分类:通过比较相似的DNA序列,以毫秒级准确判断基因分类。
- 文本搜索引擎:通过将关键字与文本数据库进行比较,帮助用户找到他们正在寻找的信息。
Milvus的设计理念
作为基于云的向量数据库,Milvus在设计上将存储和计算分离。为了增强弹性和灵活性,Milvus中的所有组件都是无状态的。
系统分为四个层级:
- 访问层:访问层由一组无状态的代理组成,作为系统的前端层和用户的终端点。
- 协调服务:协调服务分配任务给工作节点,充当系统的中枢。
- 工作节点:工作节点充当手臂和腿部,它们是遵循协调服务指令并执行用户触发的DML/DDL命令的无脑执行者。
- 存储:存储是系统的支撑,负责数据持久化。它包括元数据存储、日志代理和对象存储。
开发人员工具
Milvus提供了丰富的API和工具来便于开发运维。
API访问
Milvus提供了包装在Milvus API之上的客户端库,可用于从应用程序代码中以编程方式插入、删除和查询数据:
- PyMilvus
- Node.js SDK
- Go SDK
- Java SDK
Milvus生态系统工具
Milvus生态系统提供了一些有用的工具,包括:
- Milvus CLI
- Attu:Milvus的图形化管理系统。
- MilvusDM(Milvus数据迁移):专门用于与Milvus导入和导出数据的开源工具。
- Milvus容量规划工具:通过各种索引类型,帮助您估计所需的原始文件大小、内存大小和稳定磁盘大小。
Milvus限制
Milvus致力于提供最佳的向量数据库以驱动AI应用和向量相似性搜索。然而,团队正在不断努力引入更多功能和最佳工具,以增强用户体验。此页面列出了使用Milvus时用户可能遇到的一些已知限制。
资源名称的长度
资源 | 限制 |
---|---|
Collection(集合) | 255个字符 |
Field(字段) | 255个字符 |
Index(索引) | 255个字符 |
Partition(分区) | 255个字符 |
命名规则
资源的名称可以包含数字、字母和下划线(_)。资源名称必须以字母或下划线开头。
资源数量
资源 | 限制 |
---|---|
Collection(集合) | 65,536个 |
连接/代理 | 65,536个 |
集合中的资源数目
资源 | 限制 |
---|---|
分区 | 4,096 |
分片 | 64 |
字段 | 64 |
索引 | 1 |
实体 | 无限制 |
字符串长度
数据类型 | 限制 |
---|---|
VARCHAR | 65,535 |
向量维度
属性 | 限制 |
---|---|
维度 | 32,768 |
每个RPC的输入和输出
操作 | 限制 |
---|---|
插入操作 | 512 MB |
搜索操作 | 512 MB |
查询操作 | 512 MB |
负载限制
在当前版本中,待加载的数据必须在所有查询节点的总内存资源的90%以下,以便为执行引擎保留内存资源。
搜索限制
向量 | 限制 |
---|---|
topk (返回最相似结果的数目) |
16,384 |
nq (搜索请求的数目) |
16,384 |