乐趣区

关于milvus:Milvus-21x-到-Milvus-22x-升级实践

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

退出移动版