milvus: 专为向量查询与检索设计的向量数据库

news2024/11/27 20:31:15

1. 什么是milvus?

milvus docs
milvus release

Milvus的目标是:store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models.

Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引。

与现有的关系数据库主要按照预定义的模式处理结构化数据不同,Milvus采用自底向上设计,以处理从非结构化数据转换而来的Embedding向量。
在这里插入图片描述
特点如下:

  • 高性能:性能高超,可对海量数据集进行向量相似度检索。
  • 高可用、高可靠:Milvus 支持在云上扩展,其容灾能力能够保证服务高可用。
  • 混合查询:Milvus 支持在向量相似度检索过程中进行标量字段过滤,实现混合查询。
  • 开发者友好:支持多语言、多工具的 Milvus 生态系统。

2. milvus架构

Milvus 采用共享存储架构,存储计算完全分离,计算节点支持横向扩展。

从架构上来看,Milvus 遵循数据流和控制流分离,整体分为了四个层次,分别为接入层(access layer)、协调服务(coordinator service)、执行节点(worker node)和存储层(storage)。各个层次相互独立,独立扩展和容灾。

Milvus 的内部无状态组件共 8 个,依赖 3 个外部服务/中间件

2.1. 系统层次划分

整个系统分为四个层次

  • 接入层(Access Layer):系统的门面,由一组无状态 proxy 组成。对外提供用户连接的 endpoint,负责验证客户端请求并合并返回结果。
  • 协调服务(Coordinator Service):系统的大脑,负责分配任务给执行节点。协调服务共有四种角色,分别为 root coord、data coord、query coord 和 index coord。
  • 执行节点(Worker Node):系统的四肢,负责完成协调服务下发的指令和 proxy 发起的数据操作语言(DML)命令。执行节点分为三种角色,分别为 data node、query node 和 index node。
  • 存储服务 (Storage): 系统的骨骼,负责 Milvus 数据的持久化,分为元数据存储(meta store)、消息存储(log broker)和对象存储(object storage)三个部分。
    在这里插入图片描述

2.2. 架构实现特点

Milvus2.x版本的架构实现特点

  • 微服务化:Milvus将服务拆成多个角色,每个角色职责划分相对独立,其中IndexNode/QueryNode/DataNode 这些角色是实际工作的Woker节点,IndexCoord/QueryCoord/DataCoord 是负责协调Woker节点,及将任务协调并分派给其他角色的节点。

    • ETCD:负责存储元数据
    • 对象存储:负责存储向量数据
    • Proxy:Milvus统一的访问层
    • DataNode/DataCoord: 负责向量的写入
    • IndexNode/IndexCoord:负责向量索引的构建
    • QueryNode/QueryCoord : 负责向量的查询
    • RootCoord: 负责处理DDL去协调其他Coord,全局时间分发,维护当前元数据快照
  • 支持云原生:Milvus 服务本身是没有状态的,数据存储在对象存储,元数据会存放在ETCD。原生支持K8s部署集群部署,可以根据集群或者个别角色的负载去动态扩缩资源。

  • 向量操作【读/写/建索引】之间进程级别隔离:向量 读/写/建索引都是通过不同的节点完成,这样操作之间都是通过进程之间隔离,不会抢占资源,相互影响。

  • 在查询的时候指定不同的一致性级别:在真实的业务场景中,一致性要求越强,查询对应的响应时间也会变长。用户可以根据自己的需求选择不同的一致性级别。

2.3. Knowhere

如果把 Milvus 比喻为一辆跑车,Knowhere 就是这辆跑车的引擎。

Knowhere是Milvus的核心向量执行引擎,它集成了几个矢量相似度搜索库,包括Faiss, Hnswlib和Annoy。

Knowhere 的定义范畴分为狭义和广义两种:

  • 狭义上的 Knowhere 是下层向量查询库(如Faiss、HNSW、Annoy)和上层服务调度之间的操作接口。同时,异构计算也由 Knowhere 这一层来控制,用于管理索引的构建和查询操作在何种硬件上执行, 如 CPU 或 GPU,未来还可以支持 DPU/TPU/……这也是 Knowhere 这一命名的源起 —— know where。

  • 广义上的 Knowhere 还包括 Faiss 及其它所有第三方索引库。因此,可以将 Knowhere 理解为 Milvus 的核心运算引擎。

从上述定义可以得知,Knowhere 只负责处理数据运算相关的任务,其他系统层面的任务如数据分片、负载均衡、灾备等,都不在它的功能范畴中。另外,从 Milvus 2.0.1 开始,广义的 Knowhere 已从 Milvus 项目中剥离出来,成为了一个单独的项目。

架构特点

  • 最底层是系统硬件
  • 第三方索引库位于硬件之上
  • Knowhere通过CGO与顶部的索引节点和查询节点交互,这允许Go包调用C代码。
    在这里插入图片描述

3. 核心概念

所有概念及术语参见 Milvus glossary

3.1.向量相似度检索

向量相似性搜索是将一个向量与数据库中的数据进行比较,以找到与目标搜索向量最相似的向量的过程。

近似最近邻(ANN)搜索算法用于计算向量之间的相似性

3.2. 记录相关概念

  • collection-集合: 包含一组 entity,可以等价于关系型数据库系统(RDBMS)中的表。
  • entity-实体:包含一组 field。
    • 注意: Milvus 2.0在一个集合中只支持一个主键字段。
      • 可以自定义 primary key,否则 Milvus 将会自动生成 primary key
      • 目前 Milvus 不支持 primary key 去重,因此有可能在一个 collection 内出现 primary key 相同的 entity。
  • field -字段:Entity 的组成部分
    • field 可以是代表对象属性的结构化数据,例如数字和字符串
    • field 可以是代表对象特征的向量。primary key 是用于指代一个 entity 的唯一值。
    • 注意: Milvus 2.0 现已支持标量字段过滤

Milvus与关系型数据库的对应关系如下:
在这里插入图片描述

3.3.Partition-分区

分区是集合(Collection)的一个分区。Milvus 支持将收集数据划分为物理存储上的多个部分。这个过程称为分区,每个分区可以包含多个segment。

3.4.Segment-段

Milvus 在数据插入时,通过合并数据自动创建的数据文件。一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,Milvus 会搜索每个 segment,并返回合并后的结果。

3.5.Sharding-分片

Sharding是指将写操作分配到不同的节点上,以最大限度地利用Milvus集群的并行计算潜力来写数据。默认情况下,单个集合包含两个分片。Milvus采用基于主键哈希的分片方法。Milvus未来支持更灵活的分片方法,如随机分片和自定义分片。

3.6. bitset

bitset是位的集合,位是只有两个可能值的元素,最典型的是0和1,或者布尔值true和false。

  • 在Milvus中,bitset是由位数0和1组成的数组,与整型、浮点数或字符不同,bitset可以用来紧凑而高效地表示某些数据。默认为0,只有满足特定要求时才会设置为1。
  • 对bitset的操作使用布尔逻辑进行,在布尔逻辑下,输出值要么有效,要么无效,也分别用1和0表示
    如:逻辑运算符AND可用于基于位于相同索引位置的项比较两个bitset,并使用结果生成一个新的bitset,如果位置上的两个元素相同,则在新的bitset中,1将被写入该位置;如果不相同,则为0。

Bitset是一个简单而强大的机制,可以帮助Milvus执行属性过滤、数据删除和Time Travel查询。

  • Attribute filtering: 满足给定属性过滤器要求的数据被标记为1。
  • Data deletion:bitset作为一种简洁的方式来存储关于段中的一行是否被删除的信息。被删除的实体在相应的bitset中被标记为1,在搜索或查询期间不会计算
  • Query with Time Travel:当您使用Time Travel进行搜索时,Milvus使用bitsets来存储有关某个段中的数据是否满足travel_timestamp中的时间戳要求的信息

4. 业务架构

在实际项目落地时,业务架构图示意如下:
在这里插入图片描述

5.部署模式

5.1.单机版 Milvus

单机版 Milvus 包括三个组件:

  • Milvus 负责提供系统的核心功能。
  • etcd 是元数据引擎,用于管理 Milvus 内部组件的元数据访问和存储,例如:proxy、index node 等。
  • MinIO 是存储引擎,负责维护 Milvus 的数据持久化。
    在这里插入图片描述

5.2.分布式版 Milvus

分布式版 Milvus 由八个微服务组件和三个第三方依赖组成,每个微服务组件可使用 Kubernetes 独立部署。

  • 微服务组件
    • Root coord : 负责处理数据定义语言(DDL)和数据控制语言(DCL)请求。比如,创建或删除 collection、partition、index 等,同时负责维护中心授时服务 TSO 和时间窗口的推进。
    • Query coord:负责管理 query node 的拓扑结构和负载均衡以及从 growing segment 移交切换到 sealed segment。Query node 中的 segment 只存在两种状态:growing 和 sealed,分别对应增量数据和历史数据。
    • Index coord:负责管理 index node 的拓扑结构,构建索引和维护索引元信息。
    • Data coord:负责管理 data node 的拓扑结构,维护数据的元信息以及触发 flush、compact 等后台数据操作。
    • Proxy:
    • Query node: 通过订阅消息存储(log broker)获取增量日志数据并转化为 growing segment,基于对象存储加载历史数据,提供标量+向量的混合查询和搜索功能。
    • Index node:负责执行索引构建任务。Index node不需要常驻于内存,可以通过 serverless 的模式实现。
    • Data node:通过订阅消息存储获取增量日志数据,处理更改请求,并将日志数据打包存储在对象存储上实现日志快照持久化。
  • 第三方依赖
    • etcd 负责存储集群中各组件的元数据信息。
    • MinIO 负责处理集群中大型文件的数据持久化,如索引文件和全二进制日志文件。
    • Pulsar 或 Kafka 负责管理近期更改操作的日志,输出流式日志及提供日志订阅服务。
      在这里插入图片描述

6. Milvus提供的工具

6.1. Milvus Cli

Milvus CLI (Command-Line Interface)是一个命令行工具,提供数据库连接、数据操作、数据导入导出等功能。基于Milvus Python SDK,它允许使用交互式命令行提示符通过终端执行命令。

6.2. Milvus Backup

Milvus Backup是一个允许用户备份和恢复Milvus数据的工具。它同时提供CLI和API,以适应不同的应用场景。

6.3. MilvusDM

MilvusDM (Milvus Data Migration)是一个开源工具,专为使用Milvus导入和导出数据而设计。MilvusDM允许迁移特定集合或分区中的数据。

为了大幅提高数据管理效率,降低DevOps成本,MilvusDM支持以下迁移通道:

  • Milvus to Milvus: Migrates data between instances of Milvus.
  • Faiss to Milvus: Imports unzipped data from Faiss to Milvus.
  • HDF5 to Milvus: Imports HDF5 files into Milvus.
  • Milvus to HDF5: Saves the data in Milvus as HDF5 files.

6.4. Milvus Attu

Milvus的一个高效的开源管理工具。它具有直观的图形用户界面(GUI),允许您轻松地与数据库进行交互。只需单击几下,就可以可视化集群状态、管理元数据、执行数据查询等等。
在这里插入图片描述

7. Milvus 应用场景

可以使用 Milvus 搭建符合自己场景需求的向量相似度检索系统。Milvus 的使用场景如下所示:

  • 图片检索系统:以图搜图,从海量数据库中即时返回与上传图片最相似的图片。
  • 视频检索系统:将视频关键帧转化为向量并插入 Milvus,便可检索相似视频,或进行实时视频推荐。
  • 音频检索系统:快速检索海量演讲、音乐、音效等音频数据,并返回相似音频。
  • 生物化学分子式检索系统:超高速检索相似化学分子结构、超结构、子结构。
  • 推荐系统:根据用户行为及需求推荐相关信息或商品。
  • 智能问答机器人:交互式智能问答机器人可自动为用户答疑解惑。
  • DNA 序列分类系统:通过对比相似 DNA 序列,仅需几毫秒便可精确对基因进行分类。
  • 文本搜索引擎:帮助用户从文本数据库中通过关键词搜索所需信息。

8. Milvus Long Term Roadmap

Milvus Project Roadmap 及时间计划:

版本时间备注
2.22022.10.28Stable
2.2.32023.2.8Stable
2.32023.2.28Experiment
2.42023.5.30Stable
3.0-RC12023.7.30Experiment
3.0-GA2023.8.30Stable

9. 使用教程示例

9.1. text_search_engine

Milvus在自然语言处理(NLP)领域的一个主要应用是文本搜索引擎。这是一个很好的工具,可以帮助用户找到他们正在寻找的信息。它甚至可以显示难以找到的信息。文本搜索引擎将用户输入的关键字或语义与文本数据库进行比较,然后返回符合特定条件的结果。

在本教程中,您将学习如何构建文本搜索引擎。本教程使用BERT将文本转换为固定长度的向量。将Milvus作为向量数据库进行存储和向量相似性搜索。然后使用MySQL将Milvus生成的向量id映射到文本数据。
在这里插入图片描述

9.2 Text to Image Search Engine

本教程使用CLIP模型提取图像的特征并将其转换为向量。然后将这些图像矢量存储在Milvus向量数据库中。当用户输入查询文本时,这些文本也使用相同的ML模型CLIP转换为嵌入向量。随后,在Milvus中进行向量相似性搜索,检索与输入文本向量最相似的图像向量。
在这里插入图片描述

9.3. Question Answering System

本教程讲如何构建一个QA系统:该系统可以将新的用户问题链接到先前存储在向量数据库中的大量答案。

要构建这样一个聊天机器人,需要准备自己的问题和相应答案数据集。将问题和答案存储在MySQL(一个关系数据库)中。然后使用自然语言处理(NLP)的机器学习(ML)模型BERT将问题转换为向量。这些问题向量在Milvus中存储和索引。

当用户输入一个新问题时,BERT模型也会将其转换为一个向量,Milvus会搜索与这个新向量最相似的问题向量。QA系统对最相似的问题返回相应的答案。

在这里插入图片描述

9.4. Recommender System

本教程讲如何构建一个电影推荐系统:该系统可以推荐符合用户兴趣的电影。

要构建这样一个推荐系统,首先下载一个与电影相关的数据集。本教程使用MovieLens 1M。或者你可以准备自己的数据集,其中应该包括用户对电影的评分、用户的人口统计特征和电影描述等信息。使用PaddlePaddle组合用户id和特征,并将它们转换为256维向量。以类似的方式将电影id和特征转换为矢量。

将电影向量存储在Milvus中,并使用用户向量进行相似度搜索。如果用户向量与电影向量相似,Milvus将返回电影向量及其ID作为推荐结果。然后使用存储在Redis或MySQL中的电影向量ID查询电影信息。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue项目开发环境和生产环境代理的配置问题

1.跨域 跨域解决方案: 1.JSONP 通过动态 script标签跨域 2.document.domain iframe跨域 3.location.hash iframe 4.window.name iframe跨域 5.postMessage 跨 window 通信 6.跨域资源共享(CORS) 7.nginx代理跨域 8.nodejs中间件代理跨域 9…

基于光子实验的指数级加速的量子同态加密理论

前言 量子计算机不仅有望在某些重要任务上超越经典计算机,而且还能保护计算的隐私。例如,盲量子计算协议支持安全委托量子计算,其中客户端可以保护其数据和算法的隐私,不受分配来运行计算的量子服务器的影响。然而,这…

NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

新人旧人区别 以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。 移除了 GUIDE从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节更新了编译器版本默认情况下右键没了【新建文件】的选项桌面目录改为中文,可能…

【3519AV200】AI算法承载硬件平台_双目IMX334视频通道接入硬件方案开发

Hi3519AV200内置四核A55,提供高效且丰富和灵活的CPU资源,以满足客户计算和控制需求。集成单核MCU,以满足某些低延时要求较高场景。 Hi3519AV200集成了高效的神经网络推理单元,支持2.5Tops INT8 ,并支持业界主流的神经网…

【监控系统】可视化工具Grafana简介及容器化部署实战

1.什么是Grafana 官网地址:https://grafana.com/ Grafana用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。支持快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中…

【MySQL】索引与B+树

【MySQL】索引与B树 索引概念前导硬件软件方面 索引的理解单个page多个page引入B树B树的特征为什么B树做索引优于其他数据结构?聚簇索引与非聚簇索引辅助索引 索引的创建主键索引的创建和查看唯一键索引的创建和查看普通索引的创建和查看复合索引全文索引索引的其他…

2.java语法

文章目录 2.1. 字符型常量和字符串常量的区别?2.2. 关于注释?2.3. 标识符和关键字的区别是什么?2.4. Java 中有哪些常见的关键字? 2.5. 自增自减运算符2.6. continue、break、和 return 的区别是什么? 2.1. 字符型常量和字符串常…

Java编译器中的优化技术

一、JIT技术 Java中的热点代码主要有两类,包括:1、被多次调用的方法。 2、被多次执行的循环体。 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,它成为 “ 热点代 码 ” 是理所当然的。而后者则…

《零基础入门学习Python》第068讲:GUI的终极选择:Tkinter5

这节课的主要内容为 Listbox 组件、Scrollbar 组件 和 Scale 组件 在之前的学习中,我们已经知道了,如果说提供选项给客户选择,那么有两种情况,单选的话,我们用 Radiobutton,多选的话,用Checkb…

笔记本电源适配器使用时发烫会有安全隐患吗?

笔记本电源适配器(充电器) 笔记本充电器内部是一个很大的电感结构,因其工作原理会产生一部分热能,所以部分发热是正常的,即使发热也会一直保持一定的温度。同时,充电器外壳都是耐高温的不会烧坏&#xff…

【MySQL】索引是什么东东?

书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。 索引和数据位于存储引擎中,MySQL默认的存储引擎是InnoDB。 1 为什么MySQL采用B树作为索引? 1.1 其他数据结构为什么…

C语言每日一题:6.移除元素+合并两个有序数组。

第一题:移除元素 思路一: 一:暴力查找的方法: 1.找到对应val值的下标,返回数组的下标。 2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问…

【C++】开源:grpc远程过程调用(RPC)配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍grpc远程过程调用(RPC)配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜…

TikTok广告数据不好?收下这份常见问题自查手册!

你是一位跨境卖家吗?你是否在TikTok上投放过广告? 如果你的答案是肯定的,那么你可能遇到过一些困扰。比如,你的广告为什么不起量?为什么突然掉量了?为什么成本上升了?到底是哪里出了问题&#…

【MyBatis 学习三】子段不一致问题 多表查询 动态SQL

目录 一、解决Java实体类属性与数据库表字段不一致问题 🌷现象1:显示字段不对应:使用ResultType查询结果为null; 🌷解决办法:字段不对应:使用ResultMap解决。 二、数据库的多表查询 &#…

【【51单片机的红外遥控】】

红外遥控,完全把控 红外遥控 利用红外光进行通信的设备,由红外LED将调制后的信号发出,再由专门的红外接收头进行解调输出 通信方式:单工 异步 红外LED波长:940nm 通信协议标准:NEC标准 用那种一体化红红外…

面试总结-Redis篇章(八)——Redis分布式锁

JAVA 面试总结-Redis分布式锁 模拟抢券场景 通过下面方法添加Synchronized锁来防止上述情况,如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁端口8080和8081同时访问&#x…

抽象工厂模式——产品族的创建

1、简介 1.1、简介 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品 1.2、定义 抽象工厂模式(Abstract Factory Pattern):提供…

【MySQL】SQL优化(九)

🚗MySQL学习第九站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.插入数据 (1) 小规模数据 如果我们需要一次性往数据库表中插入多条记录: -- 例如我们需要插入大量数据 insert into t…

3.安装kubesphere

1.本地存储动态 PVC # 在所有节点安装 iSCSI 协议客户端(OpenEBS 需要该协议提供存储支持) yum install iscsi-initiator-utils -y # 设置开机启动 systemctl enable --now iscsid # 启动服务 systemctl start iscsid # 查看服务状态 systemctl status …