通过本文可以了解 Milvus 是什么以及它的工作原理,以及关键概念、为什么使用 Milvus、支持的索引和指标、示例应用程序、架构和相关工具。
什么是 Milvus 矢量数据库?
Milvus 创建于 2019 年,目标只有一个:存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大量嵌入向量。
作为一个专门设计用于处理输入向量查询的数据库,它能够对万亿尺度的向量进行索引。与主要按照预定义模式处理结构化数据的现有关系数据库不同,Milvus 从自下而上设计,以处理从非结构化数据转换的嵌入向量。
随着互联网的发展和发展,非结构化数据变得越来越普遍,包括电子邮件、论文、物联网传感器数据、Facebook 照片、蛋白质结构等。为了让计算机理解和处理非结构化数据,这些数据使用嵌入技术转换为向量。Milvus 存储和索引这些向量。Milvus 能够通过计算两个向量的相似性距离来分析它们的相关性。如果两个嵌入向量非常相似,这意味着原始数据源也非常相似。
Milvus 工作流程
Milvus 矢量数据库的工作流程可以概括为以下几个步骤:
- 准备数据:首先需要准备待索引的数据,这些数据通常是矢量类型的,例如图像、音频、文本、传感器数据等。在准备数据的过程中,可以对数据进行清洗、规范化、降维等处理,以提高索引效率和准确性。
- 创建索引:在数据准备完成后,需要建立索引来支持矢量检索。Milvus 目前支持多种索引算法,包括 FLAT、IVF、HNSW 等,用户可以根据数据类型和检索需求选择合适的索引算法。
- 插入数据:当索引建立完成后,可以开始向 Milvus 中插入待检索数据。在插入数据时,Milvus 会自动对矢量数据进行编码和压缩,以减少存储空间和传输带宽。
- 查询数据:当数据插入完成后,就可以进行矢量检索了。用户可以通过 API 接口或 SQL 语句来进行查询,Milvus 会根据索引算法快速定位相似度最高的数据集合,并返回结果。
- 更新数据:如果数据发生变化或者需要重新建立索引,可以在 Milvus 中对数据进行更新。更新数据时需要注意与索引算法的兼容性,避免数据覆盖或者索引失效。
- 备份和恢复:Milvus 支持数据备份和恢复功能,用户可以定期备份数据以防止数据丢失或损坏。在需要恢复数据时,可以使用备份文件来重新加载数据集。
以上就是 Milvus 矢量数据库的基本工作流程,它能够快速支持大规模矢量检索和相似度计算,为各种应用场景提供有力支持。
关键概念
非结构化数据
非结构化数据,包括图像、视频、音频和自然语言,是不符合预定义模型或组织方式的信息。这种数据类型约占世界数据的 80%,可以使用各种人工智能(AI)和机器学习(ML)模型转换为矢量。
嵌入矢量
嵌入向量是非结构化数据的特征抽象,如电子邮件、物联网传感器数据、Instagram 照片、蛋白质结构等。从数学上讲,嵌入向量是浮点数或二进制数组。现代嵌入技术用于将非结构化数据转换为嵌入向量。
矢量相似性搜索
向量相似性搜索是将向量与数据库进行比较的过程,以找到与查询向量最相似的向量。近似最近邻(ANN)搜索算法用于加速搜索过程。如果两个嵌入向量非常相似,这意味着原始数据源也非常相似。
有关更多详细信息,请参阅 Milvus 词汇表。
为什么要用 Milvus?
- 在海量数据集上进行矢量搜索时的高性能。
- 一个开发人员优先的社区,提供多语言支持和工具链。
- 即使在中断的情况下,云的可扩展性和高可靠性。
- 通过将标量过滤与矢量相似性搜索配对来实现混合搜索。
支持哪些索引和指标?
索引是数据的组织单位。必须声明索引类型和相似性指标,然后才能搜索或查询插入的实体。如果不指定索引类型,Milvus 将默认运行蛮力搜索。
索引类型
Milvus 支持的大多数矢量索引类型使用近似最近邻搜索(ANNS),包括:
- FLAT:FLAT 最适合在百万规模的小数据集上寻求完全准确和准确的搜索结果的场景。
- IVF_FLAT:IVF_FLAT 是一个基于量化的索引,最适合在准确性和查询速度之间寻求理想平衡的场景。
- IVF_SQ8:IVF_SQ8 是一个基于量化的索引,最适合寻求大幅减少磁盘、CPU 和 GPU 内存消耗的场景,因为这些资源非常有限。
- IVF_PQ:IVF_PQ 是一个基于量化的索引,最适合寻求高查询速度的场景,即使以牺牲准确性为代价。
- HNSW:HNSW 是一个基于图表的索引,最适合对搜索效率有高要求的场景。
- ANNOY:ANNOY 是一个基于树的指数,最适合寻求高召回率的场景。
有关更多详细信息,请参阅矢量索引。
相似性指标
在 Milvus 中,相似性指标用于测量向量之间的相似性。选择良好的距离指标有助于显著提高分类和聚类性能。根据输入数据形式,选择特定的相似度量以获得最佳性能。
广泛用于浮点嵌入的指标包括:
- 欧几里得距离 Euclidean distance**(L2**):该指标通常用于计算机视觉(CV)领域。
- **内积 Inner product(IP):**该指标通常用于自然语言处理(NLP)领域。
广泛用于二进制嵌入的指标包括:
- 汉明 Hamming:该指标通常用于自然语言处理(NLP)领域。
- Jaccard:这个指标通常用于分子相似性搜索领域。
- Tanimoto:该指标通常用于分子相似性搜索领域。
- 上层建筑 Superstructure:该指标通常用于搜索分子的类似上层建筑。
- 子结构 Substructure:该指标通常用于搜索分子的类似子结构。
有关更多信息,请参阅相似性指标。
示例应用程序
Milvus 可以轻松地为您的应用程序添加相似性搜索。Milvus 的应用示例包括:
- 图像相似性搜索:图像可搜索,并立即从庞大的数据库中返回最相似的图像。
- 视频相似性搜索:通过将关键帧转换为矢量,然后将结果输入 Milvus,可以近实时搜索和推荐数十亿个视频。
- 音频相似性搜索:快速查询大量音频数据,如语音、音乐、音效和表面类似声音。
- 分子相似性搜索:对指定分子的快速相似性搜索、子结构搜索或上层建筑搜索。
- 推荐系统:根据用户行为和需求推荐信息或产品。
- 问题回答系统:交互式数字 QA 聊天机器人,可自动回答用户问题。
- DNA 序列分类:通过比较相似的 DNA 序列,在毫秒内准确分类基因。
- 文本搜索引擎:通过将关键字与文本数据库进行比较,帮助用户找到他们正在寻找的信息。
有关更多 Milvus 应用程序场景,请参阅 Milvus 教程和 Milvus Adopters。
Milvus 是如何设计的?
作为云原生矢量数据库,Milvus 通过设计将存储和计算分开。为了增强弹性和灵活性,Milvus 中的所有成分都是无状态的。
该系统分为四个层次:
- 访问层:访问层由一组无状态代理组成,是系统的前层和用户的端点。
- 协调员服务:协调员服务将任务分配给工人节点,并作为系统的大脑。
- 工人节点:工人节点充当手臂和腿,是愚蠢的执行者,遵循协调员服务的指示并执行用户触发的 DML/DDL 命令。
- 存储:存储是系统的骨干,负责数据持久性。它包括元存储、日志代理和对象存储。
开发人员工具
Milvus 由丰富的 API 和工具支持,以促进 DevOps。
API 访问
Milvus 将客户端库包装在 Milvus API 之上,可用于以编程方式从应用程序代码中插入、删除和查询数据:
我们正在努力启用更多新的客户端库。如果您想做出贡献,请转到 Milvus 项目的相应存储库。
Milvus 生态系统工具
Milvus 生态系统提供了有用的工具,包括:
- Milvus CLI
- Attu,Milvus 的图形管理系统。
- MilvusDM(Milvus 数据迁移),一个专门为使用 Milvus 导入和导出数据而设计的开源工具。
- Milvus 大小工具,可帮助您估计具有各种索引类型的指定数量的向量所需的原始文件大小、内存大小和稳定磁盘大小。
评论区