Milvus 介绍
本页面旨在通过回答几个问题来让您大致了解 Milvus。读完本页后,您将了解 Milvus 是什么、它是如何工作的、关键概念、为什么使用 Milvus、支持的索引和指标、示例应用程序、架构和相关工具。
Milvus 矢量数据库是什么?
Milvus 于 2019 年创建,其目标只有一个:存储、索引和管理由深度神经网络和其他机器学习 (ML) 模型生成的大量嵌入向量。
作为专门为处理输入向量查询而设计的数据库,它能够对万亿规模的向量进行索引。与现有的关系数据库主要处理遵循预定义模式的结构化数据不同,Milvus 是自下而上设计的,用于处理从非结构化数据转换而来的嵌入向量。
随着互联网的发展和发展,非结构化数据变得越来越普遍,包括电子邮件、论文、物联网传感器数据、Facebook 照片、蛋白质结构等等。为了让计算机理解和处理非结构化数据,使用嵌入技术将这些数据转换为向量。 Milvus 存储并索引这些向量。 Milvus 能够通过计算两个向量的相似距离来分析它们之间的相关性。如果两个嵌入向量非常相似,则意味着原始数据源也相似。
关键概念
如果您不熟悉矢量数据库和相似性搜索领域,请阅读以下关键概念的解释,以获得更好的理解。
了解有关 Milvus 术语表的更多信息。
非结构化数据
非结构化数据,包括图像、视频、音频和自然语言,是不遵循预定义模型或组织方式的信息。这种数据类型约占全球数据的 80%,并且可以使用各种人工智能 (AI) 和机器学习 (ML) 模型转换为向量。
嵌入向量
嵌入向量是非结构化数据的特征抽象,例如电子邮件、物联网传感器数据、Instagram 照片、蛋白质结构等等。从数学上来说,嵌入向量是浮点数或二进制数的数组。现代嵌入技术用于将非结构化数据转换为嵌入向量。
向量相似度搜索
向量相似性搜索是将向量与数据库进行比较以查找与查询向量最相似的向量的过程。近似最近邻(ANN)搜索算法用于加速搜索过程。如果两个嵌入向量非常相似,则意味着原始数据源也相似。
为什么是 Milvus?
- 在海量数据集上进行矢量搜索时具有高性能。
- 一个开发者优先的社区,提供多语言支持和工具链。
- 即使发生中断,云的可扩展性和高可靠性也是如此。
- 通过将标量过滤与向量相似性搜索配对来实现混合搜索。
支持哪些索引和指标?
索引是数据的组织单位。您必须先声明索引类型和相似性度量,然后才能搜索或查询插入的实体。如果不指定索引类型,Milvus 将默认进行暴力搜索(brute-force search)。
索引类型
- 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是基于图的索引,最适合对搜索效率要求较高的场景。
有关详细信息,请参阅向量索引。
相似度指标(Similarity metrics)
在 Milvus 中,相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。根据输入数据形式,选择特定的相似性度量以获得最佳性能。
广泛用于浮点嵌入的指标包括:
- 欧氏距离(Euclidean distance)(L2):该度量通常用于计算机视觉(CV)领域。
- 内积(Inner product)(IP):该指标一般用于自然语言处理(NLP)领域。
广泛用于二进制嵌入的指标包括:
- Hamming:该指标一般用于自然语言处理(NLP)领域。
- Jaccard:这个指标一般用在分子相似性搜索领域。
有关更多信息,请参阅相似性度量。
应用示例
Milvus 可以轻松地将相似性搜索添加到您的应用程序中。 Milvus 的示例应用包括:
- 图像相似性搜索:图像可搜索并立即从海量数据库中返回最相似的图像。
- 视频相似度搜索:通过将关键帧转换为向量,然后将结果输入 Milvus,可以近乎实时地搜索和推荐数十亿视频。
- 音频相似度搜索:快速查询语音、音乐、音效等海量音频数据,表面相似声音。
- 推荐系统:根据用户行为和需求推荐信息或产品。
- 问答系统:交互式数字 QA 聊天机器人,自动回答用户问题。
- DNA序列分类:通过比较相似的DNA序列,在毫秒内准确梳理出基因的分类。
- 文本搜索引擎:通过将关键字与文本数据库进行比较,帮助用户找到他们正在寻找的信息。
更多 Milvus 应用场景请参见 Milvus 教程和 Milvus 采用者。
Milvus 是如何设计的?
Milvus 作为云原生向量数据库,在设计上将存储和计算分离。为了增强弹性和灵活性,Milvus 中的所有组件都是无状态的。
该系统分为四个级别:
- 访问层:访问层由一组无状态代理组成,作为系统的前端层和用户的端点。
- 协调器服务:协调器服务将任务分配给工作节点,充当系统的大脑。
- 工作节点:工作节点充当手臂和腿,是哑执行器,遵循协调器服务的指令并执行用户触发的 DML/DDL 命令。
- 存储:存储是系统的骨骼,负责数据的持久化。它包括元存储、日志代理和对象存储。
有关更多信息,请参阅架构概述。
开发者工具
Milvus 有丰富的 API 和工具支持,以促进 DevOps。
API访问
Milvus 有封装在 Milvus API 之上的客户端库,可用于通过应用程序代码以编程方式插入、删除和查询数据:
我们正在努力启用更多新的客户端库。如果您愿意贡献,请前往 Milvus 项目相应的存储库。
Milvus 生态系统工具
Milvus 生态系统提供了有用的工具,包括:
-
Attu, Milvus 的图形化管理系统。
-
MilvusDM (Milvus 数据迁移),一款专门用于使用 Milvus 导入和导出数据的开源工具。
-
Milvus sizing tool, Milvus 估算工具,可帮助您估算指定数量的各种索引类型向量所需的原始文件大小、内存大小和稳定磁盘大小。