经过了 4 个月的打磨,Milvus 2.2.0 于 11 月 18 日正式发版!2.2 版本推出了包括基于磁盘的近似最近邻(ANN)索引算法、从文件批量导入数据、基于角色的访问控制等新特性。进一步提升了向量搜索的稳定性、搜索速度和灵活的扩缩容能力。
Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Go SDK 版本 | Node.js SDK 版本 |
---|---|---|---|---|
2.2.0 | 2.2.0 | 2.2.0 | Coming soon | 2.2.0 |
新特性
- 从文件中批量导入数据
Milvus 提供了一系列新的 API,用于支持从文件中更有效率地批量导入数据。现在您可以将存放于 Minio 或 S3 上的任意 JSON 文件中的数据直接导入 Milvus。请阅读从文件中导入数据章节[1]获取更多信息。
- 搜索结果分页
为了避免单个 RPC 会话返回过多的搜索结果,Milvus 现已支持通过设置偏移量(offset)和关键词的方式减少返回的搜索结果数量。请阅读搜索[2]和查询[3]章节获取更多信息。
- 基于角色的访问控制(RBAC)
与其它传统的数据库类似,Milvus 现已支持 RBAC。您可以通过管理用户、角色和权限实现对 Milvus 数据库的访问控制。请阅读启用 RBAC [4]章节获取更多信息。
- 配额和限制
配额是 Milvus 用来保护系统在流量突发时免受内存溢出(OOM)和崩溃困扰的新机制。通过该机制,您可以控制数据插入、搜索速率和内存使用。请阅读配置配额和限制[5]章节获取更多信息。
- 集合生存时间(TTL)
在之前的版本中,Milvus 仅支持设置集群层级的 TTL。Milvus 现已支持在创建或修改集合时设置该集合的 TTL。在设置了 TTL 的集合中的数据会在 TTL 结束后到期。请阅读创建集合[6]或修改集合[7]章节获取更多的信息。
- 基于磁盘的近似近邻搜索索引(Beta)
在传统近似近邻搜索索引算法中,您需要将索引加载到内存中才能对其进行搜索。Milvus 现已支持 DiskANN,用于实现基于磁盘的大规模数据集索引能力。DiskANN 是一种基于 Vamana 图像对常驻固态磁盘的数据集进行近似近邻搜索的索引算法。使用该算法可节省大约 10 倍的内存使用量。请阅读磁盘索引[8]章节获取更多信息。
- 数据备份工具(Beta)
Zilliz Inc. 向 Milvus 社区贡献了数据备份恢复工具。Milvus 2.2.0 现已支持使用命令行和调用 API 的方式实现数据库备份和恢复能力。
问题修复与系统稳定性增强
- 实现了 Query Coord v2,支持完全基于事件的异步分片放置策略。该版本解决了所有搜索阻塞的问题并提升了故障恢复效率。
- 重构了 Root Coord 和 Index Coord,提供更加优雅的问题处理能力和更好的任务编排能力。
- 修复了当 Milvus Standalone 版本重启时出现的 RocksMQ 数据保留机制不合法的问题。
- 重构了 etcd 中 Metadata 的存储机制。通过使用新的压缩机制,etcd 中的键值对体积减少了 10 倍以上,从而解决了 etcd 内存和存储使用量大的问题。
- 解决了持续插入或删除集合实体引发的内存使用问题。
能力提升
- 性能提升
- 解决了 CPU 核数较多时无法充分使用的性能瓶颈。Milvus 现已使用多于 8 核的 CPU,极大地提升了效率。
- 提升了搜索并发量,大幅降低了搜索时延。
- 通过并行加载的方式,进一步降低了加载耗时。
- 可观察性
- 所有日志等级默认为 INFO。
- 增加集合级别的时延指标,包括搜索、查询、插入、删除等。
- 调试工具
- Milvus 进一步优化了 BirdWatcher[9] 调试工具。该工具现已支持连接 Metadata 存储并检查 Milvus 部分系统内部状态。
其它
- 索引和数据加载
- 没有建立索引的集合无法加载。
- 集合加载后不能再创建索引。
- 集合释放后才能删除索引。
- Flush
- 提供 Flush API,用于对数据段进行密封并将其同步到对象存储中。频繁调用 Flush API 可能会产生过多体积较小的数据段,影响搜索性能。
- 调用
num_entities()
或create_index()
不会自动调用 Flush API。
- 时间旅行
- Milvus 2.2 默认关闭时间旅行功能以节省磁盘使用量。如需开启该功能,您需要在配置文件中手动配置
common.retentionDuration
配置项。
- Milvus 2.2 默认关闭时间旅行功能以节省磁盘使用量。如需开启该功能,您需要在配置文件中手动配置
不兼容变更
由于 Metadata 存储优化及 API 归一化的影响,Milvus 2.2 与之前发布的版本并不完全兼容。请阅读升级文档[10]获取如何安全地将 Milvus 2.1.x 升级到 2.2.0 的方法。
参考资料
[1]
从文件中导入数据章节: https://milvus.io/docs/v2.2.x/bulk_load.md
[2]
搜索: https://milvus.io/docs/v2.2.x/search.md
[3]
查询: https://milvus.io/docs/v2.2.x/query.md
[4]
启用 RBAC : https://milvus.io/docs/v2.2.x/rbac.md
[5]
配置配额和限制: https://milvus.io/docs/v2.2.x/configure_quota_limits.md
[6]
创建集合: https://milvus.io/docs/v2.2.x/create_collection.md
[7]
修改集合: https://milvus.io/docs/v2.2.x/modify_collection.md
[8]
磁盘索引: https://milvus.io/docs/v2.2.x/disk_index.md
[9]
BirdWatcher: https://github.com/milvus-io/birdwatcher
[10]
升级文档: https://milvus.io/docs/v2.2.x/upgrade_milvus_cluster-helm.md