Milvus 2.1.x 到 Milvus 2.2.x 升级实践

news2024/11/28 4:26:10

 

近日,Milvus 2.2.0 发布,新版本里支持了许多激动人心的功能,包括:磁盘索引(DiskANN)、从文件中批量导入数据(bulk_insert)、基于角色的访问控制(RBAC)、集合生存时间(TTL)等。不少社区的小伙伴对新版本都已经跃跃欲试。不过与以往版本直接升级镜像的简单操作相比,由于 2.2 和 2.1 的元数据发生了变化,以及接口侧的一些行为发生了改变,所以升级的手续要比以前多一丢丢了。下面就让我们来看看如何优雅地将 Milvus 从 2.1.x 版本升级到 2.2.x 版本

整个升级过程主要涉及两部分的变更,分别是部署侧和接口侧。部署侧主要是镜像和元数据的变更,接口侧主要是 sdk 的行为变更,从而需要在原来的业务代码上做一些调整。接下来我们会对这两部分分别介绍。本文以 Milvus 2.1.4 升级到 Milvus 2.2.0 为例进行介绍,因为 2.1.0 到 2.1.4 之间的所有版本,数据和接口都是兼容的,所以其他 2.1.x 版本的升级都是类似的。

#01

部署侧升级

Milvus 2.2.0 以前,RootCoord 同时负责管理集合的元信息以及索引的元信息,IndexCoord 只负责索引任务的调度。为了让索引元信息与 RootCoord 解耦,Milvus 2.2 决定把原来由 RootCoord 管理的索引元信息转移到由 IndexCoord 管理。所以,部署侧升级的核心工作就是将 Milvus 2.1.4 的元数据结构修改为 Milvus 2.2.0 的元数据结构,并用新的 Milvus 2.2.0 镜像启动 Milvus 的各个组件

由于 Milvus 具有单机和分布式两种形态,部署模式支持 docker compose、Helm、k8s operator,为了表述更加清晰,我们使用表格来说明各自的操作步骤和注意事项。

由于 APT/YUM 和 Ansible 不是社区推荐的主流部署模式,所以本次的升级实践暂不讨论这两种部署模式。

单机版

 

分布式

 

#02

接口侧升级

API 层面,为了统一社区三大官方 SDK(Python SDK、Java SDK、Go SDK)的行为,以及统一用户对 Milvus 的使用规范,Milvus 2.2.0 对 create_index()、drop_index()、load()、release()、flush() 这几个接口做了限制和补充。归纳起来分为索引和数据加载以及数据落盘(flush)两大类。 索引和数据加载

  • 没有建立索引的集合无法加载。

  • 集合加载后不能再创建索引。

  • 集合释放后才能删除索引。 涉及到的接口包含:create_index()、drop_index()、load()、release()。下面通过一些 2.1.4 和 2.2.0 的应用代码的写法对比,来详细说明上面三条变更带来的变化。

 

对于“没有建立索引的集合无法加载”这条规则,有一个特殊的要注意的情况,那就是 Flat 暴搜。在 2.2.0 之前,数据插入集合后,用户可以直接调用load()接口,然后就可以使用 Flat 做暴搜。在 2.2.0 之后,为了遵循“没有建立索引的集合无法加载”这条规则,即使你想要使用 Flat 做暴搜,那么你也需要在 load 之前显式创建 Flat 索引。具体的使用代码如下:

hello_milvus = Collection(...)
hello_milvus.insert(...)
index = {
  "index_type": "FLAT",
  "metric_type": "L2",
  "params": {},
}
hello_milvus.create_index("embeddings", index)
hello_milvus.load()
hello_milvus.search(...)

数据落盘(Flush)

Flush() 是在 Milvus 2.2.0 里面新增的一个接口,含义是对数据段 (segment) 进行密封 (sealed) 并将其同步到对象存储中。在之前的版本里面,Milvus 里面没有暴露 Flush() 接口,但是在调用 num_entities() 或 create_index() 的时候,会隐式地调用 Flush API。

Flush() 一般用在数据插入结束之后,创建索引之前,这样可以保证所有的数据都成功落盘并顺利创建索引。需要注意的是,当你进行多次数据插入的时候,最好不要过于频繁地调用 Flush() 接口。因为太过频繁地调用Flush(),会生成很多小的数据段(segment),进而会触发很多 compaction 操作,对系统的 IO 和稳定性产生较大影响

以上就是接口侧升级的主要内容,最后还需要提醒大家,使用 Milvus 2.2.0 的时候,需要把 SDK 也升级到 2.2.0 版本,避免发生异常的不兼容情况

#03

结语

当你做完部署侧和接口侧的升级后,恭喜你,你已经顺利完成 2.1.x 到 2.2.x 的升级工作了。版本间数据和接口不兼容还是挺烦人的一件事,社区后面一定会减少这样的不兼容变更,让每一位 Milvuser 获得更加良好的使用体验~

Milvus 2.2.x 比 Milvus 2.1.x 的性能提升了 50+%,具体信息可以参考 Milvus 官网上的 Benchmark:https://milvus.io/docs/benchmark.md。心动不如行动,赶快来体验极速的向量检索服务吧!

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

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

相关文章

Linux | 网络概念理解 | 对网络的初始

文章目录重新看待计算机体系结构软件分层的思想网络中的分层协议的理解局域网的理解MAC地址 && IP地址报头的作用端口号(port)重新看待计算机体系结构 计算机由硬件组成,而不同硬件之间要怎么通信,或者说要怎么进行数据的…

MySQL——count(*)的底层实现以及相关优化

在开发系统的时候,可能需要需要计算一个表的行数这时候你可能会想,一条 select count(*) from t 语句不就解决了吗? 但是,会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后可能就想了,My…

盘点2022企业网络安全的七大成功要素

网络安全弹性已成为企业的重中之重,高达62%的受访企业在过去两年中经历了影响业务的安全事件。 最流行的四大攻击事件类型是: 1)网络或数据泄露(51.5%) 2)网络或系统中断(51.1%) 3)勒索软件事件&#x…

openpnp - 软件调试环境搭建

文章目录openpnp - 软件调试环境搭建概述笔记openpnp官方站点将openpnp工程克隆到本地将openpnp的wiki工程克隆到本地查看openpnp开发指南根据openpnp开发指南搭建openpnp开发环境IDE的选择IntelliJ IDEA学习版的安装引入openpnp工程在IDEA中, 运行openpnp主程序配置IntelliJ I…

工业手持终端并非“单兵作战”,5G智能模组时刻在线赋能

随着智能终端技术的不断演进,稳定性、实时性和续航能力强的工业手持终端为移动通信、消费电子、工业信息采集等领域提供便捷、高效的数据采集、存储、传输等功能服务。在智慧物流、智慧零售、智能制造、智慧医疗等领域,工业手持终端仍表现出需求激增、功…

Neuron 2.3.0 发布:更轻松地接入和管理海量工业设备

Neuron 2.3.0 版本现已正式发布! 除了新增数据统计、模糊搜索、页面下载日志等功能提升产品易用性外,Neuron 2.3.0 版本还新增了 CIP Ethernet/IP、Mitsubishi Melsec 1E frame E71 和 Fanuc Focas 三个协议驱动,以更强大的能力帮助工业用户…

chatgpt使用教程

** 使用门槛:需要自行准备能开全局代理的科学上网工具 好评赠送免费科学上网工具,也可以自己准备科学工具。 ** 下单以后,我们会发送一串账号密码给您。如图: 其中卡号就是chatgpt的账号,密码就是chatgpt密码。 第…

数据结构---优先队列

优先队列实现方式入队出队JAVA实现总结二叉堆是实现优先队列的基础,上一篇二叉堆博文: 二叉堆队列的特点是先进先出(FIFO)。 优先队列不再遵循先入先出的原则,而是分为两种情况。 最大优先队列,无论入队顺…

Ansible 服务器主机配置

使用 ansible 来对远程主机进行部署的话。我们需要首先对远程主机进行配置。 配置文件路径 配置文件位于:/etc/ansible/hosts 路径下面。 可以使用 vi 工具进行打开。 配置示例 下面是一个简单的配置示例。 [db]127.0.0.1[app]127.0.0.1 ansible_connections…

关于Playwright Xpath找不到元素问题解决方案

今日像往常进行xpath定位元素 发现代码里定位不出来 所以我就手动修改定位xpath 最后怎么修改都获取不到 返回None 那我就向上找 找到他的外祖母 最后进行inner_html() 发现元素是存在的 没有任何问题 这里我就又更加怀疑自己定位出错 折腾了半天发现定位不出来 于是我放弃了…

目标检测算法——车辆牌照识别数据集汇总 2(附下载链接)

🎄🎄近期,小海带在空闲之余收集整理了一批车辆牌照识别数据集供大家参考。 整理不易,小伙伴们记得一键三连喔!!!🎈🎈 目录 一、伊朗车牌数据集 🎄&#x1f3…

【目标跟踪】光流法运动视频跟踪【含Matlab源码 1357期】

⛄一、光流场简介 1 案例背景 运动视觉研究的内容是如何从变化场景中的一系列不同时刻的图像中提取有关场景中物体的形状、位置和运动的信息。根据研究的方法,它可以分为两类:基于特征的方法和基于光流场的方法。基于特征的方法抽取特征点,是…

傻白探索Chiplet,Chiplet面临的挑战之互连和封装(四)

目录 一、互连技术 二、封装技术 (1)英特尔 (2)台积电 三、生产流程 四、软件技术 实施Chiplet技术面临的主要挑战包括: 互连技术。Chiplet技术需要开发新型互连技术,以便将小芯片组合在一起。目前&a…

51单片机模块化编程

模块化 传统方式编程:所有的函数均放在 main.c 里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。 模块化编程:把各个模块的代码放在不同的 .c 文件里…

FL Studio21新版终于有内置的强大混响插件了

FL Studio 21新版终于有内置的强大混响插件了FL Studio 21新版不光如此,还增加很多官方主题,并内置了多款可选,满足大家对个性化的需求! 而且每一个人都能快速地创建属于自己的主题,彰显你的与众不同! 一分…

JavaScript(五):函数、作用域

JavaScript函数函数的基本使用return返回语句arguments的使用函数的两个案例作用域函数的基本使用 1.函数声明 格式: function 函数名(){ 函数体代码 } function是声明函数的关键字,必须小写 2.函数调用 函数名(); 调用的时候不要忘记加小括号函数如果…

【数据分析】大型ADCP数据集的处理和分析(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

猿如意中的【Sublime Text Build 3211】开发工具详情介绍

目录 一、工具名称 二、下载安装渠道 2.1 什么是猿如意? 2.2 如何下载猿如意? 2.3 如何在猿如意中下载Sublime Text Build 3211? 三、Sublime Text Build 3211介绍 四、软件安装过程 五、软件界面 六、Sublime Text Build 3…

redis7知识点总结

文章目录1. redis单线程为啥会这么快2. redis数据类型和底层存储结构2.1 string类型2.1.1 SDS2.2 hash类型2.3 list类型2.4 set类型(集合)2.5 zset类型(有序集合)2.6 ziplist压缩列表2.7 listpack2.8 quicklist-快速列表2.9 skipl…

马士兵-郑金维—并发编程—6.并发集合

一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CAS+synchronized实现的线程安全 CAS:在没有hash冲突时(Node要放在数组上时) synchronized:在出现hash冲突时(Node存放的位置已经有数据了) 存储的结构:…