赞
踩
Milvus的目标是:store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models.
Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引。
与现有的关系数据库主要按照预定义的模式处理结构化数据不同,Milvus采用自底向上设计,以处理从非结构化数据转换而来的Embedding向量。
特点如下:
Milvus 采用共享存储架构,存储计算完全分离,计算节点支持横向扩展。
从架构上来看,Milvus 遵循数据流和控制流分离,整体分为了四个层次,分别为接入层(access layer)、协调服务(coordinator service)、执行节点(worker node)和存储层(storage)。各个层次相互独立,独立扩展和容灾。
Milvus 的内部无状态组件共 8 个,依赖 3 个外部服务/中间件
整个系统分为四个层次:
Milvus2.x版本的架构实现特点:
微服务化:Milvus将服务拆成多个角色,每个角色职责划分相对独立,其中IndexNode/QueryNode/DataNode 这些角色是实际工作的Woker节点,IndexCoord/QueryCoord/DataCoord 是负责协调Woker节点,及将任务协调并分派给其他角色的节点。
支持云原生:Milvus 服务本身是没有状态的,数据存储在对象存储,元数据会存放在ETCD。原生支持K8s部署集群部署,可以根据集群或者个别角色的负载去动态扩缩资源。
向量操作【读/写/建索引】之间进程级别隔离:向量 读/写/建索引都是通过不同的节点完成,这样操作之间都是通过进程之间隔离,不会抢占资源,相互影响。
在查询的时候指定不同的一致性级别:在真实的业务场景中,一致性要求越强,查询对应的响应时间也会变长。用户可以根据自己的需求选择不同的一致性级别。
如果把 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 项目中剥离出来,成为了一个单独的项目。
架构特点:
所有概念及术语参见 Milvus glossary
向量相似性搜索是将一个向量与数据库中的数据进行比较,以找到与目标搜索向量最相似的向量的过程。
近似最近邻(ANN)搜索算法用于计算向量之间的相似性
Milvus与关系型数据库的对应关系如下:
分区是集合(Collection)的一个分区。Milvus 支持将收集数据划分为物理存储上的多个部分。这个过程称为分区,每个分区可以包含多个segment。
Milvus 在数据插入时,通过合并数据自动创建的数据文件。一个 collection 可以包含多个 segment。一个 segment 可以包含多个 entity。在搜索中,Milvus 会搜索每个 segment,并返回合并后的结果。
Sharding是指将写操作分配到不同的节点上,以最大限度地利用Milvus集群的并行计算潜力来写数据。默认情况下,单个集合包含两个分片。Milvus采用基于主键哈希的分片方法。Milvus未来支持更灵活的分片方法,如随机分片和自定义分片。
bitset是位的集合,位是只有两个可能值的元素,最典型的是0和1,或者布尔值true和false。
紧凑而高效地表示某些数据
。默认为0,只有满足特定要求时才会设置为1。Bitset是一个简单而强大的机制,可以帮助Milvus执行属性过滤、数据删除和Time Travel查询。
在实际项目落地时,业务架构图示意如下:
单机版 Milvus 包括三个组件:
分布式版 Milvus 由八个微服务组件和三个第三方依赖组成,每个微服务组件可使用 Kubernetes 独立部署。
Milvus CLI (Command-Line Interface)是一个命令行工具,提供数据库连接、数据操作、数据导入导出等功能。基于Milvus Python SDK,它允许使用交互式命令行提示符通过终端执行命令。
Milvus Backup是一个允许用户备份和恢复Milvus数据的工具。它同时提供CLI和API,以适应不同的应用场景。
MilvusDM (Milvus Data Migration)是一个开源工具,专为使用Milvus导入和导出数据而设计。MilvusDM允许迁移特定集合或分区中的数据。
为了大幅提高数据管理效率,降低DevOps成本,MilvusDM支持以下迁移通道:
Milvus的一个高效的开源管理工具。它具有直观的图形用户界面(GUI),允许您轻松地与数据库进行交互。只需单击几下,就可以可视化集群状态、管理元数据、执行数据查询等等。
可以使用 Milvus 搭建符合自己场景需求的向量相似度检索系统。Milvus 的使用场景如下所示:
版本 | 时间 | 备注 |
---|---|---|
2.2 | 2022.10.28 | Stable |
2.2.3 | 2023.2.8 | Stable |
2.3 | 2023.2.28 | Experiment |
2.4 | 2023.5.30 | Stable |
3.0-RC1 | 2023.7.30 | Experiment |
3.0-GA | 2023.8.30 | Stable |
Milvus在自然语言处理(NLP)领域的一个主要应用是文本搜索引擎。这是一个很好的工具,可以帮助用户找到他们正在寻找的信息。它甚至可以显示难以找到的信息。文本搜索引擎将用户输入的关键字或语义与文本数据库进行比较,然后返回符合特定条件的结果。
在本教程中,您将学习如何构建文本搜索引擎。本教程使用BERT将文本转换为固定长度的向量。将Milvus作为向量数据库进行存储和向量相似性搜索。然后使用MySQL将Milvus生成的向量id映射到文本数据。
本教程使用CLIP模型提取图像的特征并将其转换为向量。然后将这些图像矢量存储在Milvus向量数据库中。当用户输入查询文本时,这些文本也使用相同的ML模型CLIP转换为嵌入向量。随后,在Milvus中进行向量相似性搜索,检索与输入文本向量最相似的图像向量。
本教程讲如何构建一个QA系统:该系统可以将新的用户问题链接到先前存储在向量数据库中的大量答案。
要构建这样一个聊天机器人,需要准备自己的问题和相应答案数据集。将问题和答案存储在MySQL(一个关系数据库)中。然后使用自然语言处理(NLP)的机器学习(ML)模型BERT将问题转换为向量。这些问题向量在Milvus中存储和索引。
当用户输入一个新问题时,BERT模型也会将其转换为一个向量,Milvus会搜索与这个新向量最相似的问题向量。QA系统对最相似的问题返回相应的答案。
本教程讲如何构建一个电影推荐系统:该系统可以推荐符合用户兴趣的电影。
要构建这样一个推荐系统,首先下载一个与电影相关的数据集。本教程使用MovieLens 1M。或者你可以准备自己的数据集,其中应该包括用户对电影的评分、用户的人口统计特征和电影描述等信息。使用PaddlePaddle组合用户id和特征,并将它们转换为256维向量。以类似的方式将电影id和特征转换为矢量。
将电影向量存储在Milvus中,并使用用户向量进行相似度搜索。如果用户向量与电影向量相似,Milvus将返回电影向量及其ID作为推荐结果。然后使用存储在Redis或MySQL中的电影向量ID查询电影信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。