近日,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/benchm...。心动不如口头,赶快来体验极速的向量检索服务吧!