技术干货

重磅版本发布|三大关键特性带你认识 Milvus 2.2.9 :JSON、PartitionKey、Dynamic Schema

2023-06-05

By 焦恩伟

重磅版本发布|三大关键特性带你认识 Milvus 2.2.9 :JSON、PartitionKey、Dynamic Schema

亮点颇多、精彩程度堪比大版本的 Milvus 2.2.9 来啦!

随着 LLM 的持续火爆,众多应用开发者将目光投向了向量数据库领域,而作为开源向量数据库的领先者,Milvus 也充分吸收了大量来自社区、用户、AI 从业者的建议,把重心投入到了开发者使用体验上,以简化开发者的使用门槛。本次新版本不仅可以支持 JSON 类型,还增加了 Dynamic Schema、PartitionKey、Database 支持等,也增加了一些类似“支持用户自定义 task 调度策略”的小功能。

此外,我们也进行了部分优化,例如优化高过滤比例场景下的查询性能、减少流式数据的内存拷贝等。

总体而言,拥有诸多新特性加持的 Milvus 2.2.9 不仅满足了社区用户的迫切需求,也在一定程度上降低了用户的使用门槛,使用体验拉满!本文将带大家全方位解读 Milvus 2.2.9 的新特性,前方丰富信息量预警……

图片 图片

新特性

  • 支持 JSON 类型

JSON 类型是社区中呼声最高的 feature 之一。在真实的使用场景中,大量用户会结合向量数据以及向量的元信息一起使用,例如在知识增强场景中,用户不仅仅会在 Milvus 中存储 Embedding 之后的文本,还会存储文本的一些元信息如标题、作者、创作时间等等,用户使用这些元信息最大的需求是要随着业务场景的变化灵活调整。

JSON 类型的 schemaless 特点很好地满足了用户对灵活性的需求。在 2.2.9 中用户可以写入并使用 JSON 做数据过滤,同时 Milvus 对 JSON 类型也会使用 SIMD 加速查询性能。未来,我们还会对 JSON 类型中的字段增加索引,进一步提升标量、向量混合查询的性能。

  • Dynamic Schema

在支持了 JSON 类型后,Milvus 可以通过简单的 SDK 封装满足用户动态 schema 的需求。2.2.9 以后的 SDK 中会增加 High Level API,在 High Level API 中会自动将动态的字段填入 collection 隐藏的 JSON 字段中。对于用户开发者来说,只需关注业务字段即可,大大降低了用户的心智负担和使用门槛。

  • PartitionKey

区别于 Milvus 已有的 Partition 功能,PartitionKey 功能会根据用户指定的列作为分区主键,在使用的过程中也无需使用 loadPartition、releasePartition 等 API。对于用户而言,不仅真正做到了使用简单,同时解除了现有 Partition 4096 数量的限制。

个数无上限的 PartitionKey 能够极大地复用资源,比如要开发一款面向百万级用户以上的个性化的 AI 应用,最直接的做法是每个用户单独开一套集群或开一个 collection,但这无疑是对资源的巨大浪费。而如果将所用用户的向量数据放在同一个 collection 中,势必会面临查询性能的问题,此时可以将用户 ID 作为 PartitionKey,按照用户 ID 将数据进行分区,可以在资源使用和高性能之间取得很好的平衡。

  • 支持 Database

在 2.2.9 之前 Milvus 为了简化用户的使用,暂时隐藏了 Database,用户直接访问 Collection 即可。随着 Milvus 在越来越多的生产环境中落地,用户对于权限隔离、资源隔离等运维类需求也越来越多。在 Milvus 2.2.9 中,我们将 Database 层级暴露给用户,同时对 Database 增加了权限认证能力。值得注意的是,使用 2.2.8 及之前版本的用户升级后,原有的 collection 会被放在默认 Database 中。

  • 支持阿里云 OSS

Milvus 作为一款云原生向量数据库,存储引擎可以很容易对接到兼容 S3 协议的对象存储上。支持阿里云的对象存储也比较容易,使用阿里云的用户在配置中将 cloudProvider 置为阿里云即可使用。

功能增强

  • 支持用户自定义task调度策略;

  • 支持表达式中使用单引号字符串;

  • 大大降低standalone模式下磁盘使用量;

  • 提升Load/Release性能。

其他优化

除了增加新特性,我们也进行了部分优化调整:

  • 优化高过滤比例场景下的查询性能;

  • 使用 SIMD 加速标量过滤;

  • 减少流式数据的内存拷贝。

问题修复

除了新增和优化相应的特性和功能外,我们也修复了大量社区中反馈的与稳定性、业务逻辑相关的 bug:

  • 修复 DiskANN 磁盘占用无法被清理的问题;

  • 修复了由于无效的 Numpy 数组文件导致的批量插入 panic 问题;

  • 修正了 Int8~Int32 类型的空结果集;

  • 修复了在 balance 已被释放 collection 时发生的 panic;

  • 解决了会话停止在失去连接后变得卡住的问题;

  • 修复了获取未索引 segment 逻辑不正确导致 panic 的问题;

  • 解决了配额影响下使用不存在集合时会 panic 的问题;

  • 修正刷新可能过早通知完成的问题。

点击了解更多信息:https://milvus.io/docs/release_notes.md#229

  • 焦恩伟

Zilliz Cloud 免费试用

免费试用

分享文章