-- 知识铺
Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引,详见介绍请参见:
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)三个部分。
架构实现特点
Milvus2.x版本的架构实现特点:
- 微服务化:Milvus将服务拆成多个角色,每个角色职责划分相对独立,其中IndexNode/QueryNode/DataNode 这些角色是实际工作的Woker节点,IndexCoord/QueryCoord/DataCoord 是负责协调Woker节点,及将任务协调并分派给其他角色的节点。
|
|
- 支持云原生:Milvus 服务本身是没有状态的,数据存储在对象存储,元数据会存放在ETCD。原生支持K8s部署集群部署,可以根据集群或者个别角色的负载去动态扩缩资源。
- 向量操作【读/写/建索引】之间进程级别隔离:向量 读/写/建索引都是通过不同的节点完成,这样操作之间都是通过进程之间隔离,不会抢占资源,相互影响。
- 在查询的时候指定不同的一致性级别:在真实的业务场景中,一致性要求越强,查询对应的响应时间也会变长。用户可以根据自己的需求选择不同的一致性级别。
3. Milvus核心概念
所有概念及术语参见 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. Milvus 应用
4.1 业务架构
在实际项目落地时,业务架构图示意如下:
4.2 Milvus 应用场景
可以使用 Milvus 搭建符合自己场景需求的向量相似度检索系统。Milvus 的使用场景如下所示:
- 图片检索系统:以图搜图,从海量数据库中即时返回与上传图片最相似的图片。
- 视频检索系统:将视频关键帧转化为向量并插入 Milvus,便可检索相似视频,或进行实时视频推荐。
- 音频检索系统:快速检索海量演讲、音乐、音效等音频数据,并返回相似音频。
- 生物化学分子式检索系统:超高速检索相似化学分子结构、超结构、子结构。
- 推荐系统:根据用户行为及需求推荐相关信息或商品。
- 智能问答机器人:交互式智能问答机器人可自动为用户答疑解惑。
- DNA 序列分类系统:通过对比相似 DNA 序列,仅需几毫秒便可精确对基因进行分类。
- 文本搜索引擎:帮助用户从文本数据库中通过关键词搜索所需信息。
5. Milvus Attu
Milvus Attu的一个高效的开源管理工具。它具有直观的图形用户界面(GUI),允许您轻松地与数据库进行交互。只需单击几下,就可以可视化集群状态、管理元数据、执行数据查询等等。
6. Docker Compose配置与部署
6.1 部署Milvus向量数据库
以下步骤都在Linux环境中进行,Windows环境下在安装好Docker Desktop前提下可以类似操作:
依据自已环境是否有GPU或使用GPU,下载milvus-standalone-docker-compose.yml或milvus-standalone-docker-compose-gpu.yml下载到本地。
1、新建一个目录milvus
2、将milvus-standalone-docker-compose.yml放到milvus文件夹内,改名为docker-compose.yml
3、docker compose up -d
6.2 同时部署Milvus与Milvus Attu
其它步骤与6.1节操作准备相同,主要是在docker-compose.yml配置文件中增加Milvus向量数据库可视化管理工具Milvus Attu服务,具体增加服务的代码如下:
|
|
**注:**如果docker image下载时间过长,可以先使用命令:docker-compose pull命令下载服务相关的所有镜像。然后再使用docker-compose up -d 命令启动服务。如果启动服务时报端口错误,依据实际需要对相关端口端口进行修改。
访问:http://IP:8000,即可看到如下界面:
单击连接后,进入如下界面:
参考链接
[3] Milvus Attu
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240730/MilvusMilvus%E5%90%91%E9%87%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%88%9B%E5%BB%BA%E4%B8%8E%E5%8F%AF%E8%A7%86%E5%8C%96%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com