Milvus 介绍

这篇具有很好参考价值的文章主要介绍了Milvus 介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Milvus 特点

  • 在万亿矢量数据集上实现惊人的搜索速度:在万亿矢量数据集上,矢量搜索和检索的平均延迟可达毫秒级。
  • 简化的非结构化数据管理: Milvus 拥有专为数据科学工作流程设计的丰富 API。
  • 可靠、始终在线的矢量数据库: Milvus 内置的复制和故障转移/故障恢复功能可确保数据和应用程序始终保持业务连续性。
  • 高度可扩展和弹性: 组件级可扩展性使按需扩减成为可能。
  • 混合搜索: 除了向量之外,Milvus 还支持布尔、字符串、整数、浮点数等数据类型。标量和向量可以混合过滤。
  • 统一的 Lambda 结构: Milvus 将流式处理和批式处理相结合进行数据存储,平衡时效性和效率。
  • 时间旅行: Milvus 维护所有数据插入和删除操作的时间线。它允许用户在搜索中指定时间戳以检索指定时间点的数据视图。
  • 社区支持和行业认可:拥有超过 1,000 名企业用户、 GitHub 上超过 10,500 颗星以及活跃的开源社区,以及商业公司支持。

Milvus 架构

Milvus 独立版

Milvus 独立版包含三个组件:

  • Milvus: 核心功能组件。
  • etcd: 元数据引擎,访问并存储 Milvus 内部组件的元数据,包括 proxy、indexnode 等。
  • MinIO: 存储引擎,负责 Milvus 的数据持久化。

Milvus 介绍,milvus

Milvus 集群版

Milvus 集群版包含 8 个微服务组件和 3 个第三方依赖项。所有微服务都可以部署在 Kubernetes 上,彼此独立。

微服务组件

  • Root coord: 负责处理数据定义语言(DDL)和数据控制语言(DCL)请求,管理 TSO(timestamp Oracle),并发布时间刻度消息。
  • Proxy: 代理是用户访问 Milvus 的入口,负责不同请求的转发。
  • Query coord: 负责管理查询节点的拓扑结构和负载均衡,以及从 growing segment 到 sealed segment 的转换操作。
  • Query node: 负责对增量数据和历史数据执行向量和标量数据的混合搜索。
  • Index coord: 负责管理索引节点的拓扑结构,并维护索引元数据。
  • Index node: 负责为向量构建索引。
  • Data coord: 负责管理数据节点的拓扑结构,维护元数据,触发 flush、compact 等后台数据操作。
  • Data node: 数据节点通过订阅日志代理来获取增量日志数据,处理 mutation 请求,并将日志数据打包成日志快照存储在对象存储中。

第三方依赖项

  • etcd: 存储集群中各个组件的元数据。
  • MinIO: 负责集群中大文件的数据持久化,比如索引、二进制日志文件。
  • Pulsar: 管理近期变异操作的日志,输出流式日志,并提供日志发布订阅服务。

Milvus 介绍,milvus

集群版分层详细架构

Milvus 采用共享存储架构,存储和计算分离,计算节点可水平扩展。Milvus 遵循数据平面和控制平面分离的原则,包括四层:接入层、协调服务层、计算层和存储层。

Milvus 介绍,milvus

接入层

访问层是整个系统的入口,将客户端连接的端点暴露给用户。它负责处理客户端连接、进行静态验证、对用户请求的基本动态检查、转发请求以及收集结果并将结果返回给客户端。代理本身是无状态的,可以借助负载均衡组件(Nginx、Kubernetes的Ingress、NodePort、LVS)向外界提供统一的访问地址和服务。

协调服务层

协调服务是系统的大脑,负责集群拓扑节点管理、负载均衡、时间戳生成、数据声明和数据管理。

计算层

包含所有的 QueryNode 和 DataNode,执行协调器服务发出的指令和代理启动的数据操作语言 (DML) 命令。Milvus 中的工作节点类似于 Hadoop 中的数据节点。

存储层

存储层是 Milvus 的基石,负责数据持久化。存储层分为三部分:

  • Meta store: 负责存储元数据的快照,如集合 schema、节点状态、消息消费检查点等。Milvus 依赖 etcd 来实现这些功能,Etcd 还承担服务注册和健康检查的责任。
  • 日志代理: 支持播放的 pub/sub 系统,负责流数据持久化、可靠的异步查询执行、事件通知和返回查询结果。当节点进行停机恢复时,日志代理通过回放机制来保证增量数据的完整性。Milvus 集群使用 Pulsar 作为日志代理,独立模式使用 RocksDB。Kafka、Pravega 等流存储服务也可以用作日志代理。
  • 对象存储: 存储日志的快照文件、标量/向量索引文件以及中间查询处理结果。Milvus 支持 AWS S3 和 Azure Blob,以及轻量级开源对象存储服务 MinIO。

数据模型

在 Milvus 中,所有数据都是按照集合(collection)、分片(shard)、分区(partition)、段(segment)和实体(entity)来组织的。

Milvus 介绍,milvus

集合(collection)

Milvus 中的集合可以比作关系存储系统中的表。集合是 Milvus 中最大的数据单元。

分片(shard)

为了在写入数据时充分利用集群的并行计算能力,Milvus 中的集合必须将数据写入操作分散到不同的节点。默认情况下,单个集合包含两个分片。根据您的数据集量,您可以在集合中拥有更多分片。Milvus 默认使用哈希方法进行分片。

分区(partition)

一个分片中也有多个分区。Milvus 中的分区是指集合中标记有相同标签的一组数据。常见的分区方式包括按日期、性别、用户年龄等分区。创建分区可以有利于查询过程,因为可以通过分区标签过滤大量数据。

相比之下,分片更多的是在写入数据时的扩展能力,而分区更多的是在读取数据时增强系统性能。

段(segment)

Milvus 介绍,milvus

每个分区内都有多个小段。段是 Milvus 中系统调度的最小单位。有两种类型的段:增长段(GrowingSegment)和密封段(SealedSegment)。增长段由查询节点订阅,Milvus 用户不断将数据写入增长段中。当增长段的大小达到上限(默认为512 MB)时,系统将不允许向该增长段写入额外的数据,从而密封该段。索引建立在密封段上。

为了实时访问数据,系统会读取增长段和密封段中的数据。

实体

每个段都包含大量的实体。Milvus 中的实体相当于传统数据库中的一行。每个实体都有一个唯一的主键字段,该字段也可以自动生成。实体还必须包含时间戳(ts)和向量场——这是 Milvus 的核心。

Milvus 架构中的 Knowhere

狭义上,Knowhere 是一个操作接口,用于访问系统上层的服务和系统下层的 Faiss、Hnswlib、Annoy 等向量相似搜索库。此外,Knowhere 还负责异构计算。更具体地说,Knowhere 控制在哪个硬件(例如 CPU 或 GPU)上执行索引构建和搜索请求。这就是 Knowhere 名字的由来——知道在哪里执行操作。未来版本将支持更多类型的硬件,包括 DPU 和 TPU。

广义上,Knowhere 还整合了其他第三方索引库,例如 Faiss。因此,从整体上看,Knowhere 被公认为 Milvus 向量数据库中的核心向量计算引擎。

从 Milvus 2.0.1 开始,Knowhere 已独立于 Milvus 项目。

Milvus 介绍,milvus

Knowhere 优点

Knowhere 不仅进一步扩展了 Faiss 的功能,还优化了性能。更具体地说,Knowwhere具有以下优点。

支持 BitsetView

最初,Milvus 中引入 bitset 的目的是为了软删除。软删除的向量仍然存在于数据库中,但在向量相似性搜索或查询期间不会被计算。位集中的每个位对应于一个索引向量。如果一个向量在位集中被标记为 1,则意味着该向量被软删除,并且在向量搜索期间不会涉及该向量。目前,Bitset 参数被添加到 Knowhere 中所有公开的 Faiss 索引查询 API 中,包括 CPU 和 GPU 索引。

支持更多相似度指标来索引二进制向量

除了 Hamming 之外,Knowhere还支持 Jaccard、Tanimoto、Superstruct、Substruct。Jaccard 和Tanimoto 可用于衡量两个样本集之间的相似性,而 Superstruct 和 Substruct 可用于衡量化学结构的相似性。

支持 AVX512 指令集

Faiss本身支持多种指令集包括 AArch64、SSE4.2、AVX2。Knowhere 通过添加 AVX512 进一步扩展了支持的指令集,与 AVX2 相比,可以将索引构建和查询的性能提高 20% 至 30% 。

自动 SIMD 指令选择

Knowhere 旨在在具有不同 SIMD 指令(例如 SIMD SSE、AVX、AVX2 和 AVX512)的各种 CPU 处理器(本地和云平台)上良好运行。因此,挑战在于,给定一个软件二进制文件(即 Milvus),如何使其在任何 CPU 处理器上自动调用合适的 SIMD 指令。Faiss 不支持自动 SIMD 指令选择,用户需要在编译期间手动指定SIMD 标志(例如 -msse4)。然而,Knowhere 是通过重构 Faiss 的代码库构建的。依赖 SIMD 加速的常见功能(例如相似性计算)被排除在外。然后,对于每个功能,实现四个版本(即SSE、AVX、AVX2、AVX512),并将每个版本放入单独的源文件中。然后使用相应的 SIMD 标志进一步单独编译源文件。因此,在运行时,Knowhere 可以根据当前 CPU 标志自动选择最适合的 SIMD 指令,然后使用挂钩链接正确的函数指针。文章来源地址https://www.toymoban.com/news/detail-529448.html

到了这里,关于Milvus 介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 向量数据库~milvus

    本文主要基于milvus官方的材料外加自己的一些理解整理而来,欢迎交流 云原生:存算分离; 读写分离; 增量存量分离; 微服务架构,极致弹性; 日志即数据:通过message queue解耦生产者、消费着,降低系统复杂度; 提升index、data、query模块弹性; 流批一体:表和日志二象性;流式

    2024年02月03日
    浏览(47)
  • Langchain 集成 Milvus

    refer: https://docs.docker.com/engine/install/centos/ Milvus 会以容器方式启动,所以先安装 Docker。(本示例使用的是 Alma Linux 9.2) 卸载旧版本, 设置存储库, 安装 Docker 引擎, 启动 Docker, 通过运行 hello-world 映像来验证 Docker 引擎安装是否成功, refer: https://milvus.io/docs/install_standalone-dock

    2024年02月15日
    浏览(72)
  • kubernetes部署milvus

    Milvus创建于2019年,其唯一目标是存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大量嵌入向量。 嵌入向量数据库Milvus是一种专门为处理输入向量查询而设计的数据库,能够在万亿规模上对向量进行索引。与传统的关系数据库不同,Milvus主要按照预定义的模

    2024年02月13日
    浏览(30)
  • milvus文档

    proxy对外的代理(入口) 总控制 root coord query coord 查询协调器 data coord 插入协调器 index coord 索引协调器 2.3把 datacoord和indexcoord 合并 任务包括集群拓扑管理、负载平衡、时间戳生成、数据声明和数据管理 Coordinator HA高可用 1打开配置项 queryCoord.enableActiveStandby=true 2部署时启动两

    2024年02月09日
    浏览(30)
  • milvus和相似度检索

    milvus 的使用流程是 创建collection - 创建partition - 创建索引(如果需要检索) - 插入数据 - 检索 这里以 Python 为例, 使用的milvus版本为2.3.x 首先按照库, python3 -m pip install pymilvus 以上是源码,可以看出 alias 只是一个字典的映射的key 通过源码可以看到,还有两种连接方式: 在.env文件

    2024年02月07日
    浏览(32)
  • 向量数据库:Milvus

            Milvus由Go(63.4%),Python(17.0%),C++(16.6%),Shell(1.3%)等语言开发开发,支持python,go,java接口(C++,Rust,c#等语言还在开发中),支持单机、集群部署,支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行。,当前支持的Dimensions of a vector的最大值为32,768。其他限制。

    2024年01月23日
    浏览(55)
  • milvus安装及langchain调用

    安装docker-compose 下载文件 权限 查看版本 安装milvus 下载文件 通过docker-compose安装 查看安装是否成功 测试端口 安装可视化界面attu 拉取镜像 启动容器 其中端口和ip换成自己的就行(8920,192.168.175.4换成自己服务器的ip和自己定义的端口) 可视化界面 安装langchain 安装pymilvus 调

    2024年01月21日
    浏览(43)
  • docker compose安装milvus

    2024年01月23日
    浏览(37)
  • 【SpringBoot】SpringBoot整合Milvus

    Milvus,一个开源的高性能向量数据库,它在各种应用场景中展现出强大的性能和灵活性。 在许多现代应用中,处理和分析大规模向量数据变得越来越重要。例如,在图像和视频搜索、推荐系统、自然语言处理和生物信息学等领域,向量数据被广泛应用。 在公司推荐系统中,

    2024年02月12日
    浏览(26)
  • Milvus实践 第一章:简介与部署

    Milvus 是一款开源的向量数据库,支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,让你可以针对不同场景选择不同的索引类型。此外,Milvu

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包