门槛一降再降,易用性大幅提升!Milvus 2.2.12 持续升级中

2023-08-25 09:02:34 浏览数 (1)

Milvus 又迎版本升级,三大新特性全力加持,易用性再上新台阶!

近期,Milvus 上线了 2.2.12 版本,此次更新不仅一次性增加了支持 Restful API、召回原始向量、json_contains 函数这三大特性,还优化了 standalone 模式下的 CPU 使用、查询链路等性能,用一句话总结就是:低门槛、高可用、强性能

01.

New Features

  • Restful API

为了进一步降低使用 Milvus 的门槛、提升用户体验,在 2.2.12 版本中 Milvus 支持了 Restful API,用户无需安装客户端,通过 Restful API 即可完成对接。用户在部署 Milvus 时无需占用额外端口,SDK 和 Restful 同时使用 19530 端口。

相比于使用 SDK,Restful 在易用性上更有优势,但高级的运维接口仍需使用 SDK。同时,如果你是延迟敏感型业务,我们也建议使用 SDK。

具体的 Restful API 详见:https://milvus.io/api-reference/restful/v2.2.x/About.md

  • 召回原始向量

在 Milvus 2.2.12 版本以前,出于对性能及优化内存的角度考虑,用户进行 search 时不支持返回原始向量。很多召回原始向量的场景不得不将查询拆成两步来执行:用户需要先进行 ANN search 向量id,再根据 id query 原始向量。这不仅增加了用户的学习和开发成本,对 Milvus 来讲也无法达到节约资源的效果。

有了 Milvus 2.2.12,用户可以直接在 ANN search 时返回原始向量,无需额外的操作步骤,省时又省力。

  • 支持 json_contains

如大家所知,在 Milvus 2.2.8 支持 JSON 类型之后,我们立刻收到了大量的用户反馈,其中呼声最高的就是支持 JSON 数组的各种运算,包括包含、不包含、交集、并集、差集等等。不同的算子实现难度各有不同,在 2.2.12 版本中,我们优先支持了 json_contains 函数来支持包含算子,其他的算子会在后续版本中陆续支持。

02.

Enhancements

除了新增的三大特性,我们还对部分性能进行了优化:

  • #25238

优化 standalone 模式下的 CPU 使用。在 standalone 模式下,不少用户反馈系统空载情况下也会有很高的 CPU 占用,经过长期的排查,我们发现了几个问题:

rocksdb 的参数使用不当会触发很多无意义的 compaction 以及磁盘 IO;

迭代器使用不当频繁访问同一前缀的数据。

为此,我们重新梳理了 rocksdb 的参数使用,同时开启了 level 2 以上的 zstd 压缩减少磁盘使用量。

  • #25402

支持 varchar 类型的主键使用主键索引。由于之前的系统限制,主键是 varchar 类型时无法命中索引,导致性能不佳,经过修复后此场景能够提升 10 倍以上效率。

  • #25192

优化查询链路,跳过无必要的 reduce 步骤。通过 tracing 等手段排查,发现在 reduce 阶段有可能会耗费大量时间甚至超过向量搜索时间,尤其是在大 NQ 的场景中。此次优化效果显著,在部分场景中能有 4 倍以上的性能提升。

  • #25772

解决单机多 CPU 场景下 CPU 利用率低的问题。我们新增了 queryNode.minCPUParallelTaskNumRatio=4 参数,通过调整此参数,可以调整单机的并行度。

值得注意的是:需要结合具体的业务场景经过测试、微调才能得到一个比较好的并发参数,如果不确认最好保持默认值。通过参数控制是 2.2 系列的临时方案,在 2.3 系列中会增加更智能的并发控制逻辑。

03.

Bugfix

#25470 #25510 修复 Milvus 占用过多 MinIO 的问题。产生很多 MinIO 文件是因为 Milvus 的 compaction 机制过于频繁以及垃圾清理机制比较保守,这会在 MinIO 中累积大量的过期文件,在新版本中我们调整了这些策略,节约用户的存储资源。

#25757 #24858 #25369 #25513 修复删除数据后还能被查询到的问题。产生此问题的原因较为复杂,有兴趣的同学可以参考 PR 的内容。

#25181 #25194 #25107 #25305 修复了很多对象存储相关的问题。在 2.2.8 之后,我们引入了 aws-sdk-cpp 读取对象存储,遇到了不少问题。此次更新修复了很多由此带来的 bug,包括增加了错误码、修复线程创建失败问题、在 MacOS 环境无法读取文件的问题。

#25809 #25758 修复 bulk-insert 的问题。越来越多的用户在生产环境中部署 Milvus,在冷启动阶段批量导入功能至关重要,此次更新修了大量 bulk-insert 的 bug,提升了批量导入的稳定性。

0 人点赞