发行说明
了解 Milvus 的最新动态!本页面汇总了各个版本中的新功能、改进、已知问题和缺陷修复。您可以在此部分中找到 v2.4.0 之后各个已发布版本的发行说明。建议您定期访问本页面以了解更新。
v2.4.24
发布日期:2025 年 11 月 11 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.24 | 2.4.15 | 2.4.11 | 2.4.11 |
Milvus 2.4.24 修复了关键安全漏洞 CVE-2025-64513。强烈建议所有 Milvus 2.4.x 用户尽快升级到 2.4.24。本版本还包含以下功能、改进和缺陷修复。
新功能
改进
- 跳过 source ID 检查 (#45391)
- 改进稀疏向量查询的非零元素数量(nnz)指标 (#40715)
- 支持动态刷新 Segment 剪枝配置 (#40633)
- 移除指标中不必要的 Collection 和 Partition 标签 (#40594)
- 改进数据导入错误消息 (#40598)
缺陷修复
- 加载 Segment 时获取其全部子 Delta Log (#40964)
- 同步 L0 Segment 时携带其起始位置 (#40899)
- 修复
move_cursor比较逻辑错误 (#40990) - 修复使用索引执行算术表达式时发生异常的问题 (#40800)
- 采样失败时不再立即删除质心文件,而是等待垃圾回收 (#40703)
- 修复列出 RBAC 策略时通配符权限返回空结果的问题 (#40556)
- 修复导入任务结束时间
endts的解析问题 (#40334) - 改进
initMetaCache的错误处理并补充单元测试 (#40329)
v2.4.23
发布日期:2025 年 2 月 28 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.23 | 2.4.15 | 2.4.10 | 2.4.11 |
我们很高兴地宣布 Milvus 2.4.23 正式发布。该版本改进了多阶段任务和均衡操作,并提供了关键缺陷修复,以防止死锁和重复创建索引。建议您升级或试用这一版本。一如既往,我们非常期待您的反馈,以帮助我们持续改进 Milvus!
关键缺陷修复
改进
- 添加了自动均衡的触发间隔配置 (#39925)
- 添加了用于检查 QueryCoord 均衡状态的管理 API (#39924)
- 优化了
GetQueryNodeDistribution的结果格式 (#39927) - 加快了 binlog 导入期间的对象列举速度 (#40049)
- 添加了
GetVector延迟指标,并优化了请求限制错误消息 (#40086) - 支持创建带有描述的 Collection (#40029)
缺陷修复
- 移除了 RESTful 处理程序中硬编码的 Partition 数量 (#40213)
- 修复了
AlterCollection无法修改ConsistencyLevel的问题 (#39906) - 修复了正在执行的 Compaction 任务数为负数的错误指标 (#39956)
- 确保 HTTP 请求超时时取消子上下文 (#40170)
- 修复了可以创建同名 Collection 的问题 (#40148)
- 解决了 Segment 可能停留在 sealed 状态而无法转换到 flushing 状态的问题 (#39998)
- 增强了
isBalanced函数,使其能够正确统计引号对 (#40005)
v2.4.22
发布日期:2025 年 2 月 14 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.22 | 2.4.15 | 2.4.10 | 2.4.11 |
我们很高兴地宣布 Milvus 2.4.22 正式发布。该版本专注于提升性能、加快数据加载与恢复速度,以及增强稳定性。本次更新包含多项功能改进和缺陷修复,可简化操作并优化资源使用。建议您升级或试用这一版本。一如既往,我们期待您的反馈,以帮助我们持续改进 Milvus!
改进
- 在 RESTful v2 中执行搜索时返回 topks (#39858)
- 如果组件停止进程超时,则转储 pprof 信息 (#39764)
- 支持配置 Compaction 间隔 (#39512)
- 为 QueryNode Segment 管理器添加二级索引以加快查询速度 (#38348)
- 在 Collection 级别并发读取元数据,以加快故障恢复速度 (#39756)
- 减少 DataCoord 中的加锁操作,以加快加载和插入操作 (#38230)
- 增大元数据列表的批处理大小,以加快恢复速度 (#39741)
- 如果未设置 Partition,则跳过生成 Partition 限制器 (#38912)
- 通过避免不必要的复制,提高从 RootCoord 获取 Collection 信息的速度 (#38903)
- 降低快速 Flush 指标的更新频率,以加快恢复速度 (#38776)
- 使用 WalkWithPrefix 代替 LoadWithPrefix,以加快 etcd 列表操作 (#38216)
- 加快 QueryCoord 中的任务生成、调度和执行,从而提升数据加载速度 (#38906)
- 移除 QueryNode 和 DataNode 中不必要的布隆过滤器,以减少内存使用量 (#38215)
- 在 C++ 中处理 Rust 错误 (#39501)
缺陷修复
- 修复了因行数为 0 而导致导入失败的问题 (#39903)。
- 修复了释放 Collection 后 Checkpoint 目标延迟指标可能泄漏的问题 (#39842)
- 修复了部分加载 Partition 可能超时的问题 (#39834)
- 修复了可能错误启用索引 mmap 的问题 (#39805)
- 修复了过滤搜索中 int64 取模运算失败的问题 (#39804)
- 修复了在 Compaction 或 GC 期间加载 Collection 时可能卡死的问题 (#39766)
- 修复了设置 rootShouldBindRole 后 root 仍可列出所有 Collection 的问题 (#39715)
- 修复了节点宕机导致的 Channel 不均衡问题 (#39738)
- 通过限制并发量,解决了消息队列消费者过多导致的卡死问题 (#38916)
- 修复了 Flowgraph 泄漏问题 (#39687)
- 修复了释放期间 Tantivy 索引偶尔无法删除索引文件的问题 (#39471)
- 修复了错误配置可能导致权限设置失效的问题 (#39493)
- 修复了 RESTful API V1 无法限流的问题 (#39554)
- 修复了另一个 Collection 繁忙时无法触发 L0 Compaction 的问题 (#39384)
v2.4.21
发布日期:2025 年 1 月 22 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.21 | 2.4.14 | 2.4.10 | 2.4.11 |
我们很高兴地宣布 Milvus 2.4.21 正式发布。该版本支持自定义 root 权限,优化了并发和锁机制,并提供了大量缺陷修复,以增强整体稳定性和可靠性。建议您升级或试用这一版本,并分享反馈,帮助我们持续改进 Milvus!
新功能
- 支持自定义 root 权限 (#39325)
关键缺陷修复
- 修复了重启 MixCoord 与并发执行 Flush 操作可能导致数据丢失的问题 (#39423)
缺陷修复
- 修复了别名问题,该问题可能导致迭代器遍历错误的数据库 (#39301)
- 解决了多列加载期间锁粒度过粗导致的查询缓慢问题 (#39290)
- 修复了修改数据库时资源组更新失败的问题 (#39357)
- 支持在批量导入期间跳过磁盘配额检查 (#39320)
- 支持基于多个 Segment 构建 Tantivy 索引 (#39127)
- 修复了小型 Segment 的内存估算不准确问题 (#38910)
- 修复了 RBAC 自定义组权限检查不生效的问题 (#39194)
- 解决了向 RestoreRBAC API 传递空参数导致服务器崩溃的问题 (#39142)
- 修复了自动 Flush 配置操作失败时的错误报告问题 (#39073)
- 修复了无法识别使用大写 AND 或 OR 的表达式的问题 (#38929)
- 解决了加载失败后删除 Partition 失败的问题 (#38871)
改进
- 使用 CStatus 处理 NewCollection CGO 调用,以统一风格 (#39306)
- 使用 CStatus 处理 NewCollection CGO 调用,以统一风格 (#39306)
- 重构了删除操作的 MVCC 函数 (#39258)
- 优化了 QueryNode 中的锁粒度 (#38908)
- 在 SearchResult 和 QueryResults 中添加了主键字段名称 (#39223)
- 引入了一个用于管理 proto 的新 Go 软件包 (#39129)
- 清理了 compactionhandler 中的 Compaction 任务 (#38848)
- 使用 SIMD 加快位集操作 (#39042)
- 优化了 QueryNode 对未加载 Collection 的错误处理 (#38920)
- 将默认 etcd 版本更新为 v3.5.16 (#38973)
v2.4.20
发布日期:2025 年 1 月 2 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.20 | 2.4.13 | 2.4.10 | 2.4.10 |
Milvus 2.4.20 解决了多项关键问题,包括修复稀疏索引的 mmap、解决修改 Collection 字段时无法解析正确数据库名称的问题,以及防止调度器中的多个 Compaction 任务发生死锁。此外,该版本还支持通过 YAML 文件中的配置项调整 varchar 最大长度的系统限制。强烈建议升级到此版本,以获得更出色的稳定性和可靠性。
改进
- 添加了用于调整 varchar 最大长度的参数 (#38890)
缺陷修复
- 为稀疏索引启用了 mmap (#38849)
- 修复了 altercollectionfield 拦截器中的 dbname 问题 (#38664)
- 在函数返回时释放 Compaction 任务锁 (#38857)
- 修复了 Reduce 期间堆上的 Retrieve Plan 释放后仍被使用的问题 (#38842)
v2.4.19
发布日期:2024 年 12 月 26 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.19 | 2.4.13 | 2.4.9 | 2.4.9 |
Milvus 2.4.19 重点修复了 RBAC、Balancer 和加载流程中的问题,同时还针对 PartitionKey 删除操作和混合搜索等方面进行了多项性能改进。强烈建议升级到此版本,以获得更出色的稳定性和可靠性。
改进
- 引入了表达式模板以加快混合搜索。(#38624)
- 提供了更多指标以改进删除操作监控。(#38746)
- 对于 partitionKey 删除操作,将 L0 文件生成限制在特定 Partition,以减少写放大。(#38232)
缺陷修复
- 通过在加载估算中添加内存系数,修复了 OOM 问题。(#38721)
- 修复了在 RootCoord 中列出策略时权限组展开的问题。(#38759)
- 修复了访问日志保留问题,并跳过空日志轮转。(#38661)
- 修复了 Balancer,避免反复使同一个 QueryNode 过载。(#38720)
- 修复了列出权限组和 Collection 时的问题。(#38698)
- 修复了加载配置更新未应用于正在加载的 Collection 的问题。(#38596)
- 修复了 QueryCoord 重启后意外触发均衡任务的问题。(#38714)
- 修复了数据导入期间读取计数为零的问题。(#38696)
- 修复了表达式中 JSON 键的 Unicode 解码问题。(#38652)
v2.4.18
发布日期:2024 年 12 月 20 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.18 | 2.4.11 | 2.4.9 | 2.4.9 |
Milvus 2.4.18 引入了可自定义的权限组和增强的 Grant/Revoke API,显著简化了权限管理。该版本还针对常见操作场景提供了一系列内置权限组,并带来了大量性能和稳定性改进,涵盖 CPU 优化、更快的 Collection 加载速度和更高效的索引构建。此外,关键缺陷修复解决了崩溃场景和同步失败等问题,使系统更具韧性。建议升级到 2.4.18,以充分利用这些关键改进并提升整体可靠性。
新功能
RBAC 增强:
- 引入可自定义的权限组,允许用户创建、删除、列出自定义组,并动态管理组内权限(添加/移除)。
- 针对常见操作场景提供一系列内置权限组:
- 集群级:ClusterReadOnly、ClusterReadWrite、ClusterAdmin
- 数据库级:DatabaseReadOnly、DatabaseReadWrite、DatabaseAdmin
- Collection 级:CollectionReadOnly、CollectionReadWrite、CollectionAdmin
- 提供新版 Grant/Revoke API,使用这些新接口时无需指定
ObjectType。
改进
- Partition 名称允许使用连字符 (#38474)
- 优化健康检查请求的 CPU 使用率 (#35595)
- RESTful API 支持表达式模板 (#38161)
- 移除每轮加载任务数量的限制 (#38497)
alterindex和altercollection现已支持修改属性 (#38361 #38111 #38421)alterdatabase支持删除属性 (#38450)- 添加资源组的详细副本数量 (#38315)
- Channel 策略支持基于分数的均衡 (#38378)
- 添加指标,用于统计稀疏搜索中的非零值/词元数量 (#38328)
- 在 standalone 或 mixed 模式下运行时移除 Coordinator 的 RPC 层 (#38207)
- 添加 mmap 文件使用量指标 (#38211)
- RESTful API 支持数据库请求 (#38188)
- 为 RESTful V1 启用限流 (#38190)
- 在搜索请求计数指标中添加 Collection ID (#38144)
- 优化 Clustering Compaction 日志 (#38102)
- 加快 Collection 加载流程 (#37841)
- 通过移除 ParamTable 查找来提升 Compaction 性能 (#37882)
- 支持在 topk 减小且结果不足时重试搜索 (#37093)
- 更新 Knowhere 版本 (#38277)
- 优化稀疏索引,性能提升约 10%
缺陷修复
- 修复了 growing-groupby 导致的崩溃 (#38553)
- 修复了
SyncSegmentsRPC 总是失败的问题 (#38032) - 修复了 DataNode 停止后同步任务仍在运行的问题 (#38441)
- 修复了常规计数不准确的问题 (#38525)
- 在倒排索引中执行搜索之前对前缀进行转义 (#38425)
- 修复了仍存在授权时也能删除角色的问题 (#38369)
- 修复了导入任务结果为空的问题 (#38317)
- 修复了 DataNode 进度可能停滞在写入器缓冲区内存检查的问题 (#38287)
- 修复了无法授予
manualcompactAPI 权限的问题 (#38168) - 修复了 Partition 数量指标不准确的问题 (#38073)
- 通过优化锁的使用来加快 Flush 速度 (#37897)
- 在 Compaction 队列已满时妥善处理错误 (#37990)
- 通过分离目标观察和 Collection 加载使用的任务池来优化加载速度 (#37735)
- 修复了从内存映射的 Growing Segment 中检索 varchar 数据导致的崩溃 (#37995)
- 修复了均衡后可能意外释放 Channel 的问题 (#37940)
v2.4.17
发布日期:2024 年 11 月 22 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.17 | 2.4.9 | 2.4.8 | 2.4.9 |
Milvus 2.4.17 是一个专注于关键稳定性增强的小版本。该版本修复了多项缺陷,并实施了性能优化,以提升系统可靠性。
改进
- 增强:[2.4] 防止生成“NULL”搜索参数 (#37811)。
- 增强:[2.4] 移除了分布信息中不必要的 Segment 克隆更新 (#37797) (#37833)。
- 增强:[2.4] 提供了用于筛选
leaderview的二级索引条件 (#37777) (#37802)。 - 使用批处理加快从 meta kv 中列出 Collection 的速度 (#37752)。
- 从健康检查中移除了 Collection 可查询性检查 (#37731)。
- [2.4] 从监控指标中移除了 Segment 级别的标签 (#37737)。
- [2.4] 移除了
setstate中不必要的克隆操作 (#37736)。 - 在 RESTful API 的搜索请求中添加了搜索参数 (#37673)。
- 提供了启用 AddressSanitizer (ASAN) 的 Milvus 镜像 (#37682)。
- [cp24] 整理了 Compaction 日志 (#37647)。
- [2.4] 在释放 Collection 时使 Collection 缓存失效 (#37628)。
- [2.4] 为加载/写入 API 添加了 CGO 调用指标 (#37627)。
- 在资源组中启用了节点分配策略 (#37588)。
- 优化了
describe collection和索引操作 (#37605)。 - [2.4] 处理了旧版 Proxy 加载字段请求 (#37569)。
- [2.4] 为 QueryCoord 可查询性检查添加了 Context Tracing (#37534)。
- [2.4] 改进了 RootCoord 任务调度策略 (#37523)。
- 重构了 RESTful API 中的
createindex(#37237)。 - [2.4] 对因上下文取消而中止的存储操作使用 cancel 标签 (#37491)。
- [2.4] 更新了模板表达式 proto,以提高传输效率 (#37485)。
缺陷修复
- RESTful API 支持
autoid=true的upsert,并修复了相关缺陷 (#37766)。 - 确保在 Channel 均衡期间将 L0 Segment 加载到 Worker (#37758)。
- 修复了 Delegator 卡在 unserviceable 状态的问题 (#37702)。
- [2.4] 返回
errkeynotfound时存储默认值 (#37705)。 - [cp24] 将内存检查从写锁改为读锁 (#37526)。
- 确保
getshardleaders仅在发生可重试错误时重试 (#37687)。 - [cp24] 修正了 varchar 主键大小计算 (#37619)。
- 修复了增加副本数量时 Channel 均衡可能卡住的问题 (#37642)。
- 解决了 QueryNode 恢复后搜索返回结果较少的问题 (#37610)。
- [2.4] 修复了从 L0 Segment 的错误字段中检索数据的问题 (#37599)。
- 在 QueryCoord 重启后恢复正在加载的 Collection 的
updateTS(#37580)。 - [2.4] 为
paramtable添加了 IP 地址验证 (#37500)。 - 修复了 Segment 未加载导致的搜索/查询失败 (#37544)。
- 解决了计时器重置使用不当导致的 Channel 监视问题 (#37542)。
- 修复了订阅泄漏问题 (#37541)。
- 解决了 Growing Segment 过度增长的问题 (#37540)。
- [cp24] 修正了已删除 Segment 的指标 (#37471)。
- 修复了 Milvus 和 Segcore 中重复的错误码 (#37449)。
- [cp24] 分离了 L0 和 mixed 触发间隔 (#37319)。
v2.4.15
发布日期:2024 年 11 月 5 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.15 | 2.4.9 | 2.4.8 | 2.4.9 |
Milvus 2.4.15 是一个关键缺陷修复版本,重点提升了系统稳定性、性能和兼容性。此版本解决了 QueryNode 崩溃期间可能发生的重大死锁问题,并更新了备份工具与数据库功能的兼容性。此外,Milvus 2.4.15 通过大幅优化 L0 处理,提高了删除操作的性能和稳定性。为获益于这些关键改进,强烈建议升级到 v2.4.15。
关键缺陷修复
缺陷修复
- 修复了某些表达式无法正确解析值的缺陷 (#37342)。
- 改进了 Proxy,使其能够在未加载的 Collection 上重试获取分片 Leader (#37326)。
- 修复了 L0 行数指标值始终为空的问题 (#37307)。
- 在 Mixed Compaction 和 L0 Compaction 场景中不再标记 Compaction 超时 (#37194)。
- 修正了 OffsetOrderedArray 的包含关系逻辑 (#37309)。
- 在加载增量日志时增加了资源检查 (#37263)。
改进
- 将 L0 逻辑移到增量锁之外,以提升性能 (#37340)。
- 如果已完成 Compaction 的 Growing Segment 出现在已丢弃列表中,则将其释放 (#37266)。
- 引入中间件来监控 RESTful V2 输入/输出 RPC 统计信息 (#37224, #37440)。
v2.4.14
发布日期:2024 年 10 月 31 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.14 | 2.4.9 | 2.4.7 | 2.4.9 |
Milvus 2.4.14 解决了 2.4.13 版本中的一个关键问题,该问题可能导致 snapshotKV 垃圾回收后丢失 Collection 信息。此版本还修复了几处资源泄漏。此外,本版本还包含多项增强,重点提升大规模删除操作的稳定性和 Compaction 性能。
新功能
改进
- 删除/Compaction 优化
- 支持并行执行 L0 Compaction (#36985)
- 使用直接转发时,批量转发删除操作 (#37107)
- 使用远程加载时,Delegator 跳过加载增量数据 (#37112)
- 直接转发增量数据,但不包括 L0 Segment (#36914)
- 为 DataCoord 中的 Compaction 任务增加优先级 (#36979)
- 跟踪复杂删除操作的速率 (#36958)
- 重构 RESTful API 中的 CreateCollection (#36885)
- 将多个 ‘and’ 和 ‘or’ 操作融合为单个操作 (#36973)
- 使跳过加载功能适用于所有分支 (#37161)
- 升级 MinIO 依赖,以支持 EKS Pod Identities (#37089)
- 整理导入选项 (#37078)
- 限制导入作业的最大数量 (#36892)
- 预分配数据切片,避免重新分配内存 (#37044)
- 阻止 DataNode 加载 bf (#37027)
- 避免重复限制 ddl 操作 (#37011)
- 支持动态调整配置项
datanode.import.maxconcurrenttasknum(#37103) - 使用
queryNode.mmap.growingMmapEnabled控制临时索引的行为 (#36391) - 填充 Growing Segment 的 segmentLoadInfo 中的
Level和StartPosition字段 (#36911) - 收到删除 Collection 的消息时,强制停止缓冲消息 (#36917)
- 增加 QueryNode 删除缓冲区信息指标 (#37097)
- 为部分指标增加 Collection 名称标签 (#37159)
- 使用中间件观测 RESTful v2 输入/输出 RPC 统计信息 (#37224)
- 更改 GPU 默认内存池大小 (#36969)
- 将 Knowhere 版本更新至 2.3.12 (#37132)
- 允许在磁盘配额耗尽时删除数据 (#37139)
缺陷修复
- 修复了所有快照均被垃圾回收后,重启时无法从 metakv 恢复 Collection 信息的问题 (#36950)
- 修正 RPC 错误码,避免客户端进行无效重试 (#37025)
- 在配额中心忽略数据库不存在错误 (#36850)
- 通过使用单例删除池修复 QueryNode 中的 goroutine 泄漏 (#37225)
- 修复 QueryNode 中的 Collection 泄漏 (#37079)
- 修复 Clustering Compaction 任务泄漏 (#36803)
- 禁止重命名已有别名的 Collection (#37208)
- 确保别名已缓存 (#36808)
- 修复了更新 Delegator 缓存期间搜索/查询可能失败的问题 (#37174)
- 执行聚类时排除 L0 Compaction (#37142)
- 在仅加载 L0 Segment 元数据时也引用 Collection 元数据 (#37179)
- 修复了 QueryCoord 重启后 Delegator 可能无法提供服务的问题 (#37100)
- 修复了动态释放 Partition 可能导致搜索/查询失败的问题 (#37099)
- 修正删除缓冲区行数配额值 (#37068)
- 启用部分加载时传递完整的字段列表 (#37063)
- 修复了向 Worker 发送 RPC 时 QueryNode 出现 panic 的问题 (#36988)
- 修复 DataCoord 卡在停止过程中的问题 (#36961)
- 修复 Growing Segment 的原始数据被临时索引替换时的越界访问问题 (#36938)
- 修复 RootCoord 卡在优雅停止过程中的问题 (#36881)
v2.4.13-hotfix
发布日期:2024 年 10 月 17 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.13-hotfix | 2.4.8 | 2.4.5 | 2.4.9 |
Milvus v2.4.13-hotfix 解决了 v2.4.13 特有的一个关键问题:如果所有 MetaKV 快照均被垃圾回收,Milvus 可能在重启后无法检索 Collection 信息 (#36933)。为避免服务可能受到影响,建议当前运行 v2.4.13 的用户尽快升级到 v2.4.13-hotfix。
关键修复
- 时间戳为 MaxTimestamp 时加载原始键 (#36935)
[已弃用] v2.4.13
发布日期:2024 年 10 月 12 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.13 | 2.4.8 | 2.4.5 | 2.4.9 |
Milvus 2.4.13 引入了动态副本加载,用户无需释放并重新加载 Collection 即可调整 Collection 的副本数量。此版本还解决了与批量导入、表达式解析、负载均衡和故障恢复相关的多个关键缺陷。此外,MMap 资源使用和导入性能也得到显著改进,从而提升了整体系统效率。强烈建议升级到此版本,以获得更佳的性能和稳定性。
新功能
缺陷修复
- 修复了 flush 性能问题 (#36741)
- 修复了 "[]" 中 JSON 表达式的缺陷 (#36722)
- 如果压缩目标未建立索引,则移除相邻项 (#36694)
- 改进了 Channel 已满时 Rocksmq 的性能 (#36618)
- 修复发生错误时未延迟执行解除固定操作的问题 (#36665)
- 解决了 Segment Manager 中已导入 Segment 的内存泄漏问题 (#36631)
- 跳过 Proxy 中针对 QueryNode 的不必要健康检查 (#36553)
- 修复了 term 表达式的溢出问题 (#36534)
- 在分配任务前记录节点 ID,防止任务分配错误 (#36493)
- 解决了 Clustering Compaction 中的数据竞争问题 (#36499)
- 在类型匹配后增加字符串数组最大长度检查 (#36497)
- 解决了混合模式或独立模式中的竞争条件 (#36459)
- 修复了重复加载和释放操作后 Segment 不均衡的问题 (#36543)
- 修正了无法从正在停止的节点移出 Segment 的边界情况 (#36475)
- 即使部分 Segment 缺失,也能正确更新 Segment 信息 (#36729)
- 防止 snapshot KV 中的 etcd 事务超过最大限制 (#36773)
改进
- 改进 MMap 资源估算:
- 改进 column.h 中与 MMap 相关的代码 (#36521)
- 优化加载 Collection 时的资源估算 (#36728)
- 性能增强:
- 通过将 Unicode 转换为 ASCII,提高表达式解析效率 (#36676)
- 支持为多个 topic 并行生成消息 (#36462)
- 降低计算索引文件大小时的 CPU 开销 (#36580)
- 从 header 中获取消息类型,尽量减少反序列化 (#36454)
- 优化基于工作负载的副本选择策略 (#36384)
- 拆分删除任务消息,使其符合最大消息大小限制 (#36574)
- 新增用于描述导入作业的 RESTful URL (#36754)
- 优化导入调度并增加耗时指标 (#36684)
- 为 Query Coordinator Balancer 增加均衡报告日志 (#36749)
- 改用通用 GC 配置 (#36670)
- 为 Delegator 增加流式转发策略开关 (#36712)
- 支持对没有索引的 Collection 执行手动 Compaction (#36581)
- 支持在内存容量不同的 QueryNode 之间进行负载均衡 (#36625)
- 使用 metrics.label 统一入站标签的大小写 (#36616)
- 使转移 Channel/Segment 的操作具备幂等性 (#36552)
- 增加用于监控导入吞吐量和已导入行数的指标 (#36588)
- 防止在 target 中创建多个计时器对象 (#36573)
- 更新表达式版本,并对表达式的 HTTP 响应进行格式化 (#36467)
- 改进 snapshot KV 中的垃圾回收 (#36793)
- 支持执行带有 context 参数的方法 (#36798)
v2.4.12
发布日期:2024 年 9 月 26 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.12 | 2.4.7 | 2.4.4 | 2.4.9 |
Milvus 2.4.12 引入了重要增强和关键缺陷修复。此版本解决了数据重复问题,并提升了故障恢复速度,尤其是在处理大量删除操作时。不过,在删除海量数据时,故障恢复仍可能较慢,这是一个已知问题。我们正在积极解决此问题。
改进
- 为 Flowgraph Manager 实现优雅停止 (#36358)
- 对未加载的向量字段禁用索引检查 (#36280)
- 在加载增量数据时过滤未命中的删除记录 (#36272)
- 改进对 std::stoi 异常的错误处理 (#36296)
- 禁止使用关键字作为字段名或动态字段名 (#36108)
- 增加 L0 Segment 中删除条目的指标 (#36227)
- 实现 L0 转发策略,以支持远程加载 (#36208)
- 在 Proxy 中增加 ANN 字段加载检查 (#36194)
- 支持空稀疏行 (#36061)
- 修复一个安全漏洞 (#36156)
- 实现用于请求/响应大小指标的统计处理程序 (#36118)
- 修正编码数组数据的大小估算 (#36379)
缺陷修复
- 解决了包含两个向量字段的 Collection 出现指标类型错误的问题 (#36473)
- 修复了长时间缓冲导致消息队列接收失败的问题 (#36425)
- 支持拆分后,正确返回所有 Compaction 目标 Segment (#36429)
- 解决了节点 ID 检查 goroutine 中的数据竞争问题 (#36377)
- 移除元素类型检查 (#36324)
- 修复 Growing Segment 和 Sealed Segment 的并发访问问题 (#36288)
- 实现 future 状态锁 (#36333)
- 修正 HybridSearch 中 offset 的用法 (#36287, #36253)
- 解决 QueryNode 上的脏 Segment/Channel 泄漏问题 (#36259)
- 修复主键重复的处理逻辑 (#36274)
- 强制在搜索请求中设置指标类型 (#36279)
- 修复 stored_index_files_size 指标的清除问题 (#36161)
- 修正 readwrite 权限组对全局 API 访问的行为 (#36145)
v2.4.11
发布日期:2024 年 9 月 11 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.11 | 2.4.6 | 2.4.3 | 2.4.8 |
Milvus 2.4.11 是一个缺陷修复版本,解决了与 MARISA Trie 索引、Compaction 和加载操作相关的多个关键问题。此版本引入了用于查看表达式和提高删除稳定性的新功能。建议所有 2.4.x 系列用户升级到此版本,以获得这些改进和修复。
新功能
缺陷修复
- 解决 Trie 索引对 GreaterThan 和 GreaterThanEqual 比较执行范围操作时的问题 (#36126)
- 修正 Trie 索引构建中
marisa_label_order的用法 (#36060) - 增强对
trie.predictive_search的值检查 (#35999) - 支持在倒排索引上使用二元算术表达式 (#36097)
- 修复 Skipindex 导致的段错误 (#35908)
- 解决 Proxy 元数据缓存中的内存泄漏 (#36076)
- 重命名 mmap 文件路径,以防止目录冲突 (#35975)
- 改进 Mixed Compaction 中失败/超时任务的日志记录和清理 (#35967)
- 解决 Delegator 在内存使用率较高时出现的逻辑死锁 (#36066)
- 在 Compaction 操作删除所有插入数据时创建空 Segment (#36045)
- 修正 2.4 中根据旧版本加载信息填充加载字段列表的逻辑 (#36018)
- 修复 2.4 中的 Tracing 配置更新逻辑 (#35998)
- 解决动态释放 Partition 期间搜索/查询请求失败的问题 (#36019)
- 防止覆盖回退参数 (#36006)
- 确保正确注册权限组以进行验证 (#35938)
- 防止误清理数据库限流器节点 (#35992)
- 解决故障恢复后副本不参与查询的问题 (#35925)
- 解决 Clustering Compaction 写入器中的数据竞争 (#35958)
- 修复移动操作后的变量引用 (#35904)
- 实现聚类键跳过加载行为检查 (#35899)
- 确保 2.4 中的 QueryCoord Observer 仅启动一次 (#35817)
改进
- 将 Milvus 和 proto 版本升级至 2.4.11 (#36069)
- 解决单元测试中的内存泄漏,并为单元测试构建启用 use_asan 选项 (#35857)
- 将 l0segmentsrowcount 限制调整为更合适的值 (#36015)
- 将 deltalog 内存估算系数修改为 1 (#36035)
- 实现 slicesetequal,以比较加载字段列表 (#36062)
- 降低删除操作的日志记录频率 (#35981)
- 将 etcd 版本升级至 3.5.14 (#35977)
- 优化预热后 mmap-rss 的缩减 (#35965)
- 移除读取请求限流器中的冷却期 (#35936)
- 增强对已加载 Collection 的加载字段检查 (#35910)
- 在 2.4 中支持删除与权限列表相关的角色 (#35863)
- 实现 depguard 规则,禁止使用已弃用的 proto 库 (#35818)
其他
- 更新 Knowhere 版本 (#36067)
v2.4.10
发布日期:2024 年 8 月 30 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.10 | 2.4.6 | 2.4.3 | 2.4.6 |
Milvus 2.4.10 在功能和稳定性方面引入了重要改进。主要功能包括支持在启用 AutoID 的 Collection 上执行 Upsert 操作、支持部分加载 Collection,以及提供多种内存映射(MMap)配置以优化内存使用。此版本还修复了多个会导致 panic、核心转储和资源泄漏的缺陷。建议升级,以充分利用这些改进。
新功能
- 使用 Auto ID 执行 Upsert:支持通过自动生成 ID 执行 Upsert 操作 (#34633)
- Collection 字段部分加载 [Beta 预览]:允许加载 Collection 的特定字段 (#35696)
- RBAC 增强:
- 增加对变更数据捕获 (CDC) 的 RBAC 消息支持 (#35562)
- 引入 readonly/readwrite/admin 权限组,以简化 RBAC 授权流程 (#35543)
- 新增用于备份和恢复 RBAC 配置的 API (#35513)
- 恢复 RBAC 元数据后刷新 Proxy 缓存 (#35636)
- 改进 MMap 配置:提供更通用的配置选项来控制 MMap 行为 (#35609)
- 数据库访问限制:新增用于限制数据库读取访问的属性 (#35754)
缺陷修复
- 修复 Arrow Go 客户端不返回错误的问题 (#35820)
- 修正不准确的限流 (#35700)
- 解决导入相关 API 失败后 Proxy 出现 panic 的问题 (#35559)
- 修复在 GC Channel checkpoint 期间可能发生的误删除 (#35708)
- 解决候选导入 Segment 为空时导致的 panic (#35674)
- 修正 mmap 内存释放 (#35726)
- 确保从 2.2 升级到 2.4 时正确监听 Channel (#35695)
- 修复 DataNode 取消监听 Channel 时使用的释放函数 (#35657)
- 修正 RootCoord 元数据中的 Partition 数量 (#35601)
- 解决某些参数的动态配置更新问题 (#35637)
改进
性能
滚动升级改进
其他
- 优化 Milvus Core 构建流程 (#35660)
- 更新至 protobuf-go v2 (#35555)
- 使用十六进制字符串编码 Trace ID 和 Span ID,以增强 Tracing (#35568)
- 为 Query Hook 增加命中 Segment 数量指标 (#35619)
- 提升加载参数配置功能与旧版 SDK 的兼容性 (#35573)
- 支持 HTTP v1/v2 限流 (#35504)
- 修复索引内存估算 (#35670)
- 支持在 Mix Compactor 中写入多个 Segment,以避免生成大型 Segment (#35648)
v2.4.9
发布日期:2024 年 8 月 20 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.9 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus v2.4.9 修复了一个关键问题,该问题在某些边缘情况下可能导致返回结果数少于 limit (topk),并包含多项关键改进,以提升平台的性能和易用性。
关键修复
- 从可读快照中排除了 L0 Segment (#35510)。
改进
- 移除了 Proxy 中重复创建的 Schema 辅助对象 (#35502)。
- 新增了在 Ubuntu 20.04 上编译 Milvus 的支持 (#35457)。
- 优化了锁的使用,并避免重复刷新聚类缓冲区写入器 (#35490)。
- 移除了无效日志 (#35473)。
- 新增了 Clustering Compaction 用户指南文档 (#35428)。
- Schema 辅助对象新增了对动态字段的支持 (#35469)。
- 在生成的 YAML 中新增了 msgchannel 部分 (#35466)。
v2.4.8
发布日期:2024 年 8 月 14 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.8 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus 2.4.8 对系统性能和稳定性进行了多项重大改进。最显著的新功能是 Clustering Compaction 机制,它会基于指定的聚类键重新分布大型 Collection 中的数据,减少扫描的数据量,从而提升搜索和查询效率。Compaction 也与分片 DataNode 解耦,使任意 DataNode 都能独立执行 Compaction,从而提升容错性、稳定性、性能和可扩展性。此外,Go 与 C++ 组件之间的接口已重构为使用异步 CGO 调用,解决会话超时等问题;同时还基于性能分析实施了多项其他性能优化。应用依赖也已更新,以修复已知安全漏洞。此外,此版本还包含大量性能优化和关键缺陷修复。
新功能
改进
- 在 CGO 中实现了异步搜索和检索能力。(#34200)
- 将压缩过程与 Shard DataNode 分离,以提高系统模块化程度。(#34157)
- Proxy/Delegator 内的 QueryNode 新增了客户端池支持,以提升性能。(#35195)
- 集成 Sonic,以最大限度地降低 Gin 和 RESTfulV1 处理程序中 JSON 序列化和反序列化的 CPU 开销。(#35018)
- 引入内存缓存,以优化身份验证结果的检索。(#35272)
- 修改了 autoindex 的默认度量类型。[#34277, #34479]
- 重构了可变列的运行时内存格式,从而降低内存使用量。[#34367, #35012, #35041]
- 重构了压缩流程,以支持数据持久化存储。(#34268)
- 为 Growing Segment 启用了内存映射文件支持,改进了内存管理。(#34110)
- 改进了访问日志,新增 RESTful API 支持、记录 Consistency Level,并区分系统错误和用户错误。[#34295, #34352, #34396]
- 使用 Knowhere 中新增的
range_search_k参数来加速范围搜索。(#34709) - 应用分块布隆过滤器,以加快过滤器构建和查询速度。[#34377, #34922]
- 内存使用改进:
- 为 DataNode 插入缓冲区预分配空间。(#34205)
- 为 Reduce 操作预分配
FieldData。(#34254) - 释放删除编解码器中的记录,以防止内存泄漏。(#34506)
- 控制文件加载期间磁盘文件管理器的并发级别。(#35282)
- 优化 Go 运行时垃圾回收逻辑,以及时释放内存。(#34950)
- 为 Growing Segment 实现新的封存策略。(#34779)
- DataCoord 增强:
- 降低 CPU 使用率。[#34231, #34309]
- 实现更快的垃圾回收退出逻辑。(#35051)
- 改进 Worker 节点调度算法。(#34382)
- 专门针对导入操作增强了 Segment 大小控制算法。(#35149)
- 负载均衡算法改进:
- 降低 Delegator 上的内存过载系数。(#35164)
- 为 Delegator 分配固定大小的内存。(#34600)
- 避免为新的 QueryNode 过度分配 Segment 和 Channel。(#34245)
- 减少 Query Coordinator 每个调度周期的任务数,同时提高调度频率。(#34987)
- 增强 DataNode 上的 Channel 均衡算法。(#35033)
- 扩展系统指标:在各组件中新增以下指标,用于监控具体方面,包括:
- 强制拒绝写入状态。(#34989)
- 队列延迟。(#34788)
- 磁盘配额。(#35306)
- 任务执行时间。(#35141)
- Binlog 大小。(#35235)
- 插入速率。(#35188)
- 内存高水位。(#35188)
- RESTful API 指标。(#35083)
- 搜索延迟。(#34783)
变更
-
对于开源用户,此版本将 AutoIndex 中
FloatVector和BinaryVector的度量类型分别更改为Cosine和Hamming。 -
固定第三方依赖版本:
-
此版本为部分第三方依赖库引入固定版本,显著增强了 Milvus 的软件供应链管理。
-
通过隔离上游变更对项目的影响,保护每日构建免受潜在干扰。
-
此更新仅在 JFrog Cloud 上托管经过验证的 C++ 第三方软件包,并使用 Conan Recipe Revisions (RREV),从而确保稳定性。
-
这种方式降低了 ConanCenter 更新引入破坏性变更的风险。
-
使用 Ubuntu 22.04 的开发者将立即受益于这些变更。不过,使用其他操作系统的开发者可能需要升级其
glibc版本,以避免兼容性问题。
关键缺陷修复
- 修复了 L0 Compaction 期间遗漏 Segment 而导致删除数据丢失的问题。[#33980, #34363]
- 修复了因数据范围处理不正确而导致删除消息无法转发的问题。(#35313)
- 解决了错误使用
mmap导致的 SIGBUS 异常。[#34455, #34530] - 修复了非法搜索表达式导致的崩溃。(#35307)
- 修复了监听上下文中的超时设置不正确而导致 DataNode 监听失败的问题。(#35017)
缺陷修复
- 通过升级部分依赖修复了安全漏洞。[#33927, #34693]
- 修复了表达式过长时触发的解析错误。(#34957)
- 解决了查询计划解析期间发生的内存泄漏。(#34932)
- 修复了动态修改日志级别不生效的问题。(#34777)
- 解决了因 Segment 偏移量未初始化而导致增长中数据的分组查询失败的问题。(#34750)
- 修正了使用 Knowhere 迭代器时的搜索参数设置。(#34732)
- 修订了检查 Partition 加载状态的逻辑。(#34305)
- 修复了未处理的请求错误导致权限缓存更新失败的问题。(#34697)
- 解决了 QueryCoord 重启后已加载 Collection 恢复失败的问题。(#35211)
- 通过移除不必要的索引参数验证,修复了加载幂等性问题。(#35179)
- 确保执行
compressBinlog,使 DataCoord 重启后reloadFromKV能够正确填充 Binlog 的logID。(#34062) - 修复了 DataCoord 中的 Collection 元数据在垃圾回收后未被移除的问题。(#34884)
- 通过移除导入产生的已 Flush 的 Segment,解决了 DataCoord 内 SegmentManager 的内存泄漏。(#34651)
- 修复了禁用 Compaction 并删除 Collection 时发生 panic 的问题。(#34206)
- 通过增强内存使用估算算法,修复了 DataNode 的内存不足问题。(#34203)
- 通过为分块缓存实现 singleflight,避免多个向量检索请求缓存未命中时内存用量突增。(#34283)
- 在配置的 CAS(比较并交换)操作期间捕获
ErrKeyNotFound。(#34489) - 修复了 CAS 操作中误用格式化后的值而导致配置更新失败的问题。(#34373)
其他
- 新增 OTLP HTTP 导出器支持,增强了可观测性和监控能力。[#35073, #35299]
- 引入了“max Collection”和“disk quota”等属性(现可动态修改),增强了数据库功能。[#34511, #34386]
- 为 DataNode 内的 L0 Compaction 流程新增 Tracing 能力,以改进诊断和监控。(#33898)
- 新增每个 Collection 的 L0 Segment 条目数配额配置,通过施加背压更好地控制删除速率。(#34837)
- 将插入操作的限流机制扩展到 upsert 操作,确保高负载下性能稳定。(#34616)
- 为 Proxy CGO 调用实现动态 CGO 池,优化了资源使用和性能。(#34842)
- 为 Ubuntu、Rocky 和 Amazon 操作系统启用 DiskAnn 编译选项,提升了这些平台上的兼容性和性能。(#34244)
- 将 Conan 升级到 1.64.1 版本,确保与最新功能和改进兼容。(#35216)
- 将 Knowhere 更新到 2.3.7 版本,引入性能增强和新功能。(#34709)
- 固定了特定第三方软件包的修订版本,以确保构建一致并降低意外变更的风险。(#35316)
v2.4.6
发布日期:2024 年 7 月 16 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.6 | 2.4.4 | 2.4.2 | 2.4.4 |
Milvus v2.4.6 是一个缺陷修复版本,解决了 panic、内存泄漏以及删除期间数据丢失等关键问题。它还引入多项优化,包括增强监控指标、将 Go 版本升级到 1.21,以及改善 RESTful count(*) 查询的用户体验。
改进
- 提升了 RESTful API 查询的易用性 (#34444)。
- 将 Go 版本从 1.20 升级到 1.21 (#33940)。
- 优化了直方图指标桶,使分桶粒度更细 (#34592)。
- 将 Pulsar 依赖版本从 2.8.2 升级到 2.9.5。自 Milvus 2.4.6 起,建议将 Pulsar 升级到 2.9.5。
缺陷修复
- 修复了 GetReplicas API 返回 nil 状态的问题 (#34019)。
- 修复了查询可能返回已删除记录的问题 (#34502)。
- 解决了生命周期控制不正确导致 IndexNode 在停止过程中卡住的问题 (#34559)。
- 修复了 Worker 离线时主键 Oracle 对象的内存泄漏 (#34020)。
- 修正了 ChannelManagerImplV2,使其通知正确的 Node,解决循环闭包中的参数捕获问题 (#34004)。
- 通过实现深拷贝,修复了 ImportTask segmentsInfo 中的读写数据竞争 (#34126)。
- 修正了“legacyVersionWithoutRPCWatch”配置选项的版本信息,以防止滚动升级期间出错 (#34185)。
- 修复了已加载 Partition 数量的指标 (#34195)。
- 设置 Segcore Tracing 时传递
otlpSecure配置 (#34210)。 - 修复了 DataCoord 属性被误覆盖的问题 (#34240)。
- 解决了错误合并两个新建消息流导致的数据丢失问题 (#34563)。
- 修复了 msgstream 尝试消费无效 pchannel 而导致的 panic (#34230)。
- 修复了导入可能生成孤立文件的问题 (#34071)。
- 修复了 Segment 中主键重复导致查询结果不完整的问题 (#34302)。
- 解决了 L0 Compaction 中缺少 Sealed Segment 的问题 (#34566)。
- 修复了垃圾回收后生成的 Channel-cp 元数据中存在脏数据的问题 (#34609)。
- 修正了 RootCoord 重启后 database_num 为 0 的指标问题 (#34010)。
- 通过移除导入产生的已 Flush 的 Segment,修复了 DataCoord 中 SegmentManager 的内存泄漏 (#34652)。
- 确保 DataCoord 重启后由 compressBinlog 填充 Binlog 的 logID,从而能够从 KV 正确重新加载 (#34064)。
v2.4.5
发布日期:2024 年 6 月 18 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.5 | 2.4.4 | 2.4.1 | 2.4.3 |
Milvus 2.4.5 引入了多项改进和缺陷修复,以增强性能、稳定性和功能。Milvus 2.4.5 通过自动索引简化了稀疏、float16 和 bfloat16 向量搜索,通过优化布隆过滤器加快搜索、删除和 Compaction,并通过缩短加载时间和支持导入 L0 Segment 来改进数据管理。它还引入稀疏 HNSW 索引,以高效搜索高维稀疏数据;为 RESTful API 新增稀疏浮点向量支持;并修复关键缺陷以提高稳定性。
新功能
- 为 describe/alter database API 新增 RBAC 支持 (#33804)
- 支持为稀疏向量构建 HNSW 索引 (#33653, #33662)
- 支持为二进制向量构建磁盘索引 (#33575)
- RESTful v2 支持稀疏向量类型 (#33555)
- 新增 /management/stop RESTful API,用于停止组件 (#33799)
改进
- 将 maxPartitionNum 的默认值设置为 1024 (#33950)
- 支持在出现 unavailable 错误时强制重置连接 (#33910)
- 启用了 Collection 级 flush 限流器 (#33864)
- 并行应用布隆过滤器,以加快 Segment 预测 (#33793)
- 使用 fastjson 库反序列化删除日志,以加快 json.Unmarshal(#33802)
- 使用 BatchPkExist 降低布隆过滤器函数调用开销 (#33752)
- 加快了小型 Collection 的加载速度 (#33746)
- 支持将删除数据导入 L0 Segment (#33712)
- 将已超时的 Compaction 任务标记为跳过,避免反复执行同一任务 (#33833)
- 在 numpy 批量插入中以与 BinaryVector 相同的方式处理 float16 和 bfloat16 向量 (#33788)
- 为 seek 方法新增 includeCurrentMsg 标志 (#33743)
- 在配置中新增 msgdispatcher 的 mergeInterval、targetBufSize 和 maxTolerantLagof (#33680)
- 改进了稀疏向量的 GetVectorByID (#33652)
- 移除 StringPrimarykey,以减少不必要的复制和函数调用开销 (#33649)
- 为二进制/稀疏数据类型新增 autoindex 映射 (#33625)
- 优化了部分缓存,以降低内存使用量 (#33560)
- 为 import/preimport 任务抽象了 execute 接口 (#33607)
- 在插入缓冲区中使用从 pk 到时间戳的映射,以降低布隆过滤器开销 (#33582)
- 避免了导入过程中的冗余元数据操作 (#33519)
- 改进日志:记录更完善的磁盘配额信息,新增 UseDefaultConsistency 标志,并移除不必要的日志 (#33597, #33644, #33670)
缺陷修复
- 修复了 queryHook 无法识别向量类型的缺陷 (#33911)
- 避免使用已捕获的迭代变量 partitionID (#33970)
- 修复了可能导致 Milvus 无法为二进制和稀疏向量创建 AutoIndex 的缺陷 (#33867)
- 修复了可能导致 IndexNode 因所有向量类型的无效索引参数而重试创建索引的缺陷(#33878)
- 修复了加载和释放并发发生时可能导致 Server 崩溃的缺陷(#33699)
- 改进了配置值的缓存一致性 (#33797)
- 防止删除期间可能发生的数据丢失 (#33821)
- 确保删除 Collection 后设置 DroppedAt 字段(可能是删除时间戳)(#33767)
- 修复了可能导致 Milvus 错误处理二进制向量数据大小的问题(#33751)
- 防止以明文形式记录敏感的 Kafka 凭据。(#33694, #33747)
- 确保 Milvus 能够正确导入包含多个向量字段的数据。(#33724)
- 通过在启动前检查导入任务是否存在,增强了导入可靠性。(#33673)
- 改进了稀疏 HNSW 索引的处理(内部功能)(#33714)
- 清理向量内存,以避免内存泄漏(#33708)
- 通过修复状态锁问题,确保异步预热更加顺畅。(#33687)
- 修复了可能导致查询迭代器缺少结果的缺陷。(#33506)
- 修复了可能导致导入 Segment 大小不均的问题 (#33634)
- 修复了 bf16、fp16 和二进制向量类型的数据大小处理错误 (#33488)
- 通过解决 L0 Compaction 器的潜在问题提高了稳定性(#33564)
- 确保动态配置更新正确反映在缓存中。(#33590)
- 提高了 RootCoordQuotaStates 指标的准确性 (#33601)
- 确保指标准确报告已加载实体的数量(#33522)
- 在异常日志中提供更完整的信息。(#33396)
- 通过移除不必要的分组检查器优化查询管道 (#33485)
- 使用本地存储路径,更准确地检查 IndexNode 上的磁盘容量。(#33505)
- 修复了命中数大于 limit 时 hasMoreResult 可能返回 false 的问题 (#33642)
- 在 Delegator 中延迟加载 bf,防止 Worker 内存不足时反复加载 bfs (#33650)- 修复了 queryHook 无法识别向量类型的缺陷 (#33911)
- 避免使用已捕获的迭代变量 partitionID (#33970)
- 修复了可能导致 Milvus 无法为二进制和稀疏向量创建 AutoIndex 的缺陷 (#33867)
- 修复了可能导致 IndexNode 因所有向量类型的无效索引参数而重试创建索引的缺陷(#33878)
- 修复了加载和释放并发发生时可能导致 Server 崩溃的缺陷(#33699)
- 改进了配置值的缓存一致性 (#33797)
- 防止删除期间可能发生的数据丢失 (#33821)
- 确保删除 Collection 后设置 DroppedAt 字段(可能是删除时间戳)(#33767)
- 修复了可能导致 Milvus 错误处理二进制向量数据大小的问题(#33751)
- 防止以明文形式记录敏感的 Kafka 凭据。(#33694, #33747)
- 确保 Milvus 能够正确导入包含多个向量字段的数据。(#33724)
- 通过在启动前检查导入任务是否存在,增强了导入可靠性。(#33673)
- 改进了稀疏 HNSW 索引的处理(内部功能)(#33714)
- 清理向量内存,以避免内存泄漏(#33708)
- 通过修复状态锁问题,确保异步预热更加顺畅。(#33687)
- 修复了可能导致查询迭代器缺少结果的缺陷。(#33506)
- 修复了可能导致导入 Segment 大小不均的问题 (#33634)
- 修复了 bf16、fp16 和二进制向量类型的数据大小处理错误 (#33488)
- 通过解决 L0 Compaction 器的潜在问题提高了稳定性(#33564)
- 确保动态配置更新正确反映在缓存中。(#33590)
- 提高了 RootCoordQuotaStates 指标的准确性 (#33601)
- 确保指标准确报告已加载实体的数量(#33522)
- 在异常日志中提供更完整的信息。(#33396)
- 通过移除不必要的分组检查器优化查询管道 (#33485)
- 使用本地存储路径,更准确地检查 IndexNode 上的磁盘容量。(#33505)
- 修复了命中数大于 limit 时 hasMoreResult 可能返回 false 的问题 (#33642)
- 在 Delegator 中延迟加载 bf,防止 Worker 内存不足时反复加载 bfs (#33650)
v2.4.4
发布日期:2024 年 5 月 31 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.4 | 2.4.3 | 2.4.1 | 2.4.2 |
Milvus v2.4.4 包含多项关键缺陷修复和改进,旨在提升性能和稳定性。特别是,我们 解决了批量插入统计日志被错误回收的关键问题,该问题可能影响数据完整性 。我们强烈建议所有 v2.4 用户升级到此版本,以获得这些修复。
如果您正在使用批量插入,请尽快升级到 v2.4.4,以确保数据完整性。
关键缺陷修复
- 填充统计日志 ID 并验证其正确性 (#33478)
改进
缺陷修复
v2.4.3
发布日期:2024 年 5 月 29 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.3 | 2.4.3 | 2.4.1 | 2.4.2 |
Milvus 2.4.3 引入了大量新功能、改进和缺陷修复,以提升性能与可靠性。重要增强包括支持稀疏浮点向量批量插入,以及优化布隆过滤器加速能力。改进涵盖动态配置更新、内存使用优化等多个方面。缺陷修复解决了 panic 场景等关键问题,确保系统运行更加顺畅。此版本再次体现了 Milvus 持续增强功能、优化性能并提供稳健用户体验的承诺。
新功能
- 支持针对 binlog/JSON/Parquet 的稀疏浮点向量批量插入 (#32649)
改进
- 基于 RPC 实现 DataCoord/节点的 Watch Channel (#32036)
- 优化布隆过滤器以加速删除过滤 (#32642, #33329, #33284)
- 当标量索引不包含原始数据时,通过 mmap 加载原始数据 (#33317)
- 将 Milvus 配置同步到 milvus.yaml (#33322, #32920, #32857, #32946)
- 更新 Knowhere 版本 (#33310, #32931, #33043)
- 支持动态更新 QueryCoord 中的均衡器策略 (#33272)
- 在写缓冲区中使用预构建的日志记录器,以尽量减少日志记录器分配 (#33304)
- 改进参数检查 (#32777, #33271, #33218)
- 新增参数,用于忽略检查点中的错误消息 ID (#33249)
- 新增配置,用于控制插件初始化失败的处理方式 (#32680)
- 为 Knowhere 新增分数计算一致性配置 (#32997)
- 引入配置选项,用于控制公共角色权限的初始化 (#33174)
- 优化读取字段时的内存使用 (#33196)
- 优化 Channel Manager v2 的实现 (#33172, #33121, #33014)
- 新增跟踪 binlog 内存数据大小的功能 (#33025)
- 新增 Segment 索引文件大小指标 (#32979, #33305)
- 使用 DeletePartialMatch 替代 Delete 来删除指标 (#33029)
- 根据 Segment 类型获取相关数据大小 (#33017)
- 清理 Meta storage 中的 Channel 节点信息 (#32988)
- 从 DataNode Broker 中移除 RootCoord (#32818)
- 支持批量上传 (#32788)
- 使用 Partition Key 时,将默认 Partition 数量改为 16 (#32950)
- 提升超大 top-k 查询的 Reduce 性能 (#32871)
- 利用 TestLocations 能力加速写入和 Compaction (#32948)
- 优化 Plan Parser 池,避免不必要的回收 (#32869)
- 提升加载速度 (#32898)
- RESTful v2 使用 Collection 的默认 Consistency Level (#32956)
- 为 REST API 新增耗时响应 (#32620)
- 支持 Channel 独占均衡策略 (#32911)
- 在 Proxy 中公开 DescribeDatabase API (#32732)
- 按 Collection 获取资源组时使用 coll2replica 映射 (#32892)
- 为 Search 和 Query 增加更多 Tracing (#32734)
- 支持 OpenTelemetry Trace 的动态配置 (#32169)
- 更新 LeaderView 时避免遍历 Channel 结果 (#32887)
- 优化 Parquet 的向量偏移处理 (#32822)
- 改进 DataCoord 结合 Collection 过滤 Segment 的能力 (#32831)
- 调整日志级别和频率 (#33042, #32838, #33337)
- 支持在均衡暂停后停止均衡 (#32812)
- Leader 位置变化时更新 Shard Leader 缓存 (#32470)
- 移除已弃用的 API 和字段 (#32808, #32704)
- 新增 metautil.Channel,将字符串比较转换为整数比较 (#32749)
- 在 Payload Writer 错误消息中新增类型信息,并在 QueryNode 发现新 Collection 时记录日志 (#32522)
- 使用 Partition Key 创建 Collection 时检查 Partition 数量 (#32670)
- Watch 失败时移除旧版 L0 Segment (#32725)
- 改进请求类型的打印方式 (#33319)
- 获取类型前检查数组字段数据是否为 nil (#33311)
- 启动时 Delete/AddNode 节点操作失败会返回错误 (#33258)
- 支持更新 DataNode 的服务器 ID (#31597)
- 在释放 Collection 时统一清理 QueryNode 指标 (#32805)
- 修正标量 AutoIndex 配置中的错误版本 (#32795)
- 优化创建/修改索引时的索引参数检查 (#32712)
- 移除冗余的 Replica 恢复 (#32985)
- 支持 Channel 元数据表写入超过 20 万个 Segment (#33300)
缺陷修复
- 修复限流拦截器中数据库不存在时发生 panic 的问题 (#33308)
- 修复参数不正确导致 QuotaCenter 指标采集失败的问题 (#33399)
- 修复 ProcessActiveStandby 返回错误时发生 panic 的问题 (#33372)
- 修复 RESTful v2 中 nq > 1 时搜索结果被截断的问题 (#33363)
- 为 RESTful v2 中的角色操作新增数据库名称字段 (#33291)
- 修复全局限流不生效的问题 (#33336)
- 修复索引构建失败导致 panic 的问题 (#33314)
- 在 Segcore 中新增稀疏向量校验,确保数据合法 (#33312)
- 任务完成后将其从 SyncMgr 中移除 (#33303)
- 修复数据导入期间 Partition Key 过滤失败的问题 (#33277)
- 修复使用 noop exporter 时无法生成 Trace ID 的问题 (#33208)
- 改进 Query 结果获取 (#33179)
- 将 Channel 检查点标记为已丢弃,以防止检查点延迟指标泄漏 (#33201)
- 修复 QueryNode 在停止过程中卡住的问题 (#33154)
- 修复 Flush 响应中缺少 Segment 的问题 (#33061)
- 使 Submit 操作具备幂等性 (#33053)
- 在流式读取器中为每个批次分配新的 Slice (#33360)
- 修复 QueryCoord 重启后清理资源组中离线节点的问题 (#33233)
- 从 completedCompactor 中移除 L0 Compactor (#33216)
- 初始化 Limiter 时重置配额值 (#33152)
- 修复超出 etcd 限制的问题 (#33041)
- 解决字段过多导致超出 etcd 事务限制的问题 (#33040)
- 移除 GetNumRowsOfPartition 中的 RLock 重入 (#33045)
- 在 SyncAll 之前启动 LeaderCacheObserver (#33035)
- 支持对已释放的备用 Channel 进行均衡 (#32986)
- 在服务器初始化前初始化访问日志记录器 (#32976)
- 支持 Compactor 清理空 Segment (#32821)
- 在 L0 Compaction 中填充 deltalog 条目数和时间范围 (#33004)
- 修复 Shard Leader 缓存数据竞争导致 Proxy 崩溃的问题 (#32971)
- 修正加载索引指标的时间单位 (#32935)
- 修复正在停止的 QueryNode 上的 Segment 无法成功释放的问题 (#32929)
- 修复索引资源估算问题 (#32842)
- 将 Channel 检查点设置为 Delta Position (#32878)
- 使 SyncMgr 在返回 Future 前锁定 Key (#32865)
- 确保倒排索引仅包含一个 Segment (#32858)
- 修复 Compaction 触发器选择两个相同 Segment 的问题 (#32800)
- 修复 binlog 导入时无法指定 Partition 名称的问题 (#32730, #33027)
- 使动态列在 Parquet 导入中成为可选项 (#32738)
- 插入数据时跳过 AutoID 检查 (#32775)
- 根据 Schema 校验插入字段数据的行数 (#32770)
- 为 CTraceContext ID 新增 Wrapper 和 Keepalive (#32746)
- 修复 DataCoord 元数据对象中找不到数据库名称的问题 (#33412)
- 为已删除的 Partition 同步已删除的 Segment (#33332)
- 修复参数不正确导致 QuotaCenter 指标采集失败的问题 (#33399)
v2.4.1
发布日期:2024 年 5 月 6 日
| Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Node.js SDK 版本 |
|---|---|---|---|
| 2.4.1 | 2.4.1 | 2.4.0 | 2.4.2 |
Milvus 2.4.1 带来了多项改进和缺陷修复,旨在提升软件的性能、可观测性和稳定性。这些改进包括声明式资源组 API、支持 Float16/BFloat16 向量数据类型的增强型批量插入功能、可减少 Object Storage List 操作的优化垃圾回收(GC)机制,以及其他性能优化相关变更。此外,缺陷修复解决了编译错误、换行符模糊匹配失败、RESTful 接口参数数据类型不正确,以及启用动态字段时 BulkInsert 处理 NumPy 文件报错等问题。
破坏性变更
- 不再支持使用空过滤表达式执行删除操作。(#32472)
新功能
改进
- 新增声明式资源组 API (#31930, #32297, #32536, #32666)
- 重写 QueryCoord 中的 Collection Observer,使其由任务驱动 (#32441)
- 重构 DataNode 的 SyncManager 所使用的数据结构,以减少内存使用并防止错误 (#32673)
- 修改垃圾回收实现,尽量减少与 Object Storage 相关的 List 操作 (#31740)
- 减少 Collection 数量较多时的 CPU 使用率 (#32245)
- 增强 milvus.yaml 管理能力,通过代码在 milvus.yaml 文件中自动生成相关配置项 (#31832, #32357)
- 在本地 Reduce 后获取数据,以提升 Query 性能 (#32346)
- 创建 etcd 客户端时新增 WithBlock 选项 (#32641)
- 如果客户端提供了 client_request_id,则将客户端指定的该值用作 Trace ID (#32264)
- 为删除和批量插入操作的指标新增 db 标签 (#32611)
- 新增逻辑,可通过配置跳过 AutoID 和 PartitionKey 列的校验 (#32592)
- 优化身份认证相关错误 (#32253)
- 优化 DataCoord 中 AllocSegmentID 的错误日志 (#32351, #32335)
- 移除重复指标 (#32380, #32308),并清理未使用的指标 (#32404, #32515)
- 新增配置选项,用于控制是否强制启用 PartitionKey 功能 (#32433)
- 新增配置选项,用于控制单个请求可插入的最大数据量 (#32433)
- 在 Segment 级别并行执行 applyDelete 操作,以加速 Delegator 处理 Delete 消息 (#32291)
- 使用索引 (#32232, #32505, #32533, #32595) 并新增缓存 (#32580),以加速 QueryCoord 中频繁执行的过滤操作。
- 重写数据结构 (#32273) 并重构代码 (#32389),以加速 DataCoord 中的常见操作。
- 从 Conan 中移除 OpenBLAS (#32002)
缺陷修复
- 修复在 Rocky Linux 8 上构建 Milvus 的问题 (#32619)
- 修复 ARM 上 SVE 的编译错误 (#32463, #32270)
- 修复基于 ARM 的 GPU 镜像崩溃问题 (#31980)
- 修复正则表达式查询无法处理包含换行符文本的问题 (#32569)
- 修复 GetShardLeaders 返回空节点列表导致搜索结果为空的问题 (#32685)
- 修复 NumPy 文件中存在动态字段时 BulkInsert 报错的问题 (#32596)
- 修复 RESTfulV2 接口相关缺陷,包括允许请求中的数值参数接受数值输入而非字符串类型这一重要修复 (#32485, #32355)
- 通过移除限流器中对配置事件的监听,修复 Proxy 内存泄漏问题 (#32313)
- 修复未指定 partitionName 时限流器错误报告找不到 Partition 的问题 (#32647)
- 在错误类型中新增检测,以区分 Collection 处于恢复状态和未加载两种情况。(#32447)
- 修正可查询实体数量指标为负数的问题 (#32361)
v2.4.0
发布日期:2024 年 4 月 17 日
| Milvus 版本 | Python SDK 版本 | Node.js SDK 版本 |
|---|---|---|
| 2.4.0 | 2.4.0 | 2.4.0 |
我们很高兴地宣布 Milvus 2.4.0 正式发布。在 2.4.0-rc.1 版本坚实基础之上,我们专注于解决用户报告的关键缺陷,同时保留现有功能。此外,Milvus 2.4.0 还引入了一系列优化,旨在提升系统性能、通过增加多项指标改善可观测性,并精简代码库以提高简洁性。
改进
- 支持 MinIO TLS 连接 (#31396, #31618)
- AutoIndex 支持标量字段 (#31593)
- 重构混合搜索,使其执行路径与常规搜索保持一致 (#31742, #32178)
- 通过重构 bitset 和 bitset_view 加速过滤 (#31592, #31754, #32139)
- Import 任务现可等待数据索引完成 (#31733)
- 增强 Import 兼容性 (#32121)、任务调度 (#31475),以及对导入文件大小和数量的限制 (#31542)
- 精简代码,包括统一类型检查接口 (#31945, #31857)、移除已弃用代码和指标 (#32079, #32134, #31535, #32211, #31935),以及规范常量名称 (#31515)
- 为 QueryCoord 当前目标 Channel 的检查点延迟新增指标 (#31420)
- 为通用指标新增 db 标签 (#32024)
- 新增已删除、已建立索引和已加载实体数量的相关指标,并包含 collectionName 和 dbName 等标签 (#31861)
- 改进向量类型不匹配时的错误处理 (#31766)
- 支持在无法构建索引时抛出错误,而非导致系统崩溃 (#31845)
- 支持删除数据库时使数据库元数据缓存失效 (#32092)
- 重构 Channel 分布接口 (#31814) 和 Leader View 管理接口 (#32127)
- 重构 Channel Dist Manager 接口 (#31814) 和 Leader View Manager 接口 (#32127)
- 通过批处理 (#31632)、新增映射信息 (#32234, #32249) 和避免使用锁 (#31787),加速频繁调用的操作
破坏性变更
缺陷修复
- 增强 Query 和 Insert 的数据类型与值检查,防止系统崩溃 (#31478, #31653, #31698, #31842, #32042, #32251, #32204)
- 修复 RESTful API 缺陷 (#32160)
- 改进倒排索引资源使用量的预测 (#31641)
- 解决启用授权时与 etcd 的连接问题 (#31668)
- 更新 NATS Server 安全性 (#32023)
- 将倒排索引文件存储到 QueryNode 的本地存储路径,而非 /tmp (#32210)
- 解决 DataCoord 中 collectionInfo 的内存泄漏问题 (#32243)
- 修复可能导致系统 panic 的 fp16/bf16 相关缺陷 (#31677, #31841, #32196)
- 解决分组搜索返回结果不足的问题 (#32151)
- 调整迭代器搜索,以便在 Reduce 阶段更有效地处理偏移,并确保启用 “reduceStopForBest” 时返回足够的结果 (#32088)
v2.4.0-rc.1
发布日期:2024 年 3 月 20 日
| Milvus 版本 | Python SDK 版本 |
|---|---|
| 2.4.0-rc.1 | 2.4.0 |
此版本引入了多项面向具体场景的功能:
-
全新 GPU 索引 - CAGRA:得益于 NVIDIA 的贡献,这种全新 GPU 索引可将性能提升 10 倍,尤其适用于批量搜索。详情请参阅 GPU 索引。
-
多向量 和 混合搜索:此功能支持存储来自多个模型的向量 Embedding,并执行混合搜索。详情请参阅 混合搜索。
-
稀疏向量:稀疏向量非常适合关键词解释和分析,现在可在 Collection 中处理稀疏向量。详情请参阅 稀疏向量。
-
分组搜索:分类聚合可增强检索增强生成(RAG)应用的文档级召回能力。详情请参阅 分组搜索。
新功能
GPU 索引 - CAGRA
衷心感谢 NVIDIA 团队为 CAGRA 作出的宝贵贡献。CAGRA 是一种可在线使用的先进(SoTA)GPU 图索引。
与以往的 GPU 索引不同,即使在传统上由 CPU 索引占优的小批量查询场景中,CAGRA 也展现出压倒性优势。此外,在 GPU 索引本就擅长的大批量查询和索引构建速度方面,CAGRA 的表现也无与伦比。
示例代码请参阅 example_gpu_cagra.py。
稀疏向量(Beta)
此版本引入了一种名为稀疏向量的新型向量字段。稀疏向量与稠密向量不同,其维度通常高出数个数量级,但只有少量维度为非零值。由于稀疏向量基于词项,因此可解释性更强,并且在某些领域可能更为有效。SPLADEv2/BGE-M3 等学习型稀疏模型已被证明非常适合常见的第一阶段排序任务。Milvus 中这一新功能的主要用例,是对 SPLADEv2/BGE-M3 等神经模型以及 BM25 算法等统计模型生成的稀疏向量执行高效的近似语义最近邻搜索。Milvus 现在支持以高性能方式存储、索引和搜索稀疏向量(MIPS,最大内积搜索)。
示例代码请参阅 hello_sparse.py。
多 Embedding 与混合搜索
对于需要多模型数据处理或混合使用稠密向量和稀疏向量的应用,多向量支持是其基石。借助多向量支持,您现在可以:
- 存储多个模型为非结构化文本、图像或音频样本生成的向量 Embedding。
- 执行包含每个实体多个向量的 ANN 搜索。
- 通过为不同 Embedding 模型分配权重来自定义搜索策略。
- 试用各种 Embedding 模型,以找到最佳模型组合。
多向量支持允许在一个 Collection 中存储、索引多个不同类型的向量字段(例如 FLOAT_VECTOR 和 SPARSE_FLOAT_VECTOR),并对其应用重排策略。目前提供两种重排策略:Reciprocal Rank Fusion(RRF)(RRF) 和 平均加权评分。这两种策略都会将不同向量字段的搜索结果合并为统一的结果集。第一种策略优先考虑在不同向量字段的搜索结果中持续出现的实体;另一种策略则为各向量字段的搜索结果分配权重,以确定其在最终结果集中的重要性。
示例代码请参阅 hybrid_search.py。
倒排索引和模糊匹配
在以前的 Milvus 版本中,标量字段索引使用基于内存的二分搜索索引和 Marisa Trie 索引。然而,这些方法会消耗大量内存。最新版本的 Milvus 现已采用基于 Tantivy 的倒排索引,可应用于所有数值和字符串数据类型。这种新索引显著提升了标量查询性能,使字符串关键词查询速度提升十倍。此外,得益于内部索引结构在数据压缩和内存映射存储(MMap)机制方面的进一步优化,倒排索引占用的内存也更少。
此版本还支持在标量过滤中使用前缀、中缀和后缀进行模糊匹配。
示例代码请参阅 inverted_index_example.py 和 fuzzy_match.py。
分组搜索
现在,您可以按特定标量字段的值聚合搜索结果。这有助于 RAG 应用实现文档级召回。假设一个 Collection 中存有多篇文档,每篇文档被拆分成多个段落。每个段落由一个向量 Embedding 表示,并归属于一篇文档。若要找到最相关的文档,而不是返回分散的段落,可以在 search() 操作中加入 group_by_field 参数,按文档 ID 对结果进行分组。
示例代码请参阅 example_group_by.py。
Float16 和 BFloat16 向量数据类型
机器学习和神经网络通常使用 Float16 和 BFloat16 等半精度数据类型。虽然这些数据类型可以提高查询效率并减少内存使用,但代价是精度有所降低。从此版本开始,Milvus 的向量字段支持这些数据类型。
示例代码请参阅 float16_example.py 和 bfloat16_example.py。
架构升级
L0 Segment
此版本新增了名为 L0 Segment 的 Segment,专用于记录已删除的数据。该 Segment 会定期对存储的删除记录执行 Compaction,并将其拆分至 Sealed Segment 中,从而减少小规模删除所需的数据 Flush 次数,并降低存储占用。借助此机制,Milvus 将数据 Compaction 与数据 Flush 完全分离,提升了 Delete 和 Upsert 操作的性能。
重构 BulkInsert
此版本还引入了改进的批量插入逻辑,允许您在单个批量插入请求中导入多个文件。重构后,批量插入的性能和稳定性均得到显著提升。用户体验也有所改善,例如更加精细的限流和更友好的错误消息。此外,您还可以通过 Milvus RESTful API 轻松访问批量插入端点。
内存映射存储
Milvus 使用内存映射存储(MMap)来优化内存使用。该机制不会将文件内容直接加载到内存,而是将文件内容映射到内存中。这种方式的代价是会带来一定的性能下降。在配备 2 个 CPU 和 8 GB RAM 的主机上,为使用 HNSW 索引的 Collection 启用 MMap,可以在性能下降不到 10% 的情况下加载 4 倍的数据。
此外,此版本还支持对 MMap 进行动态、细粒度的控制,无需重启 Milvus。
详情请参阅 MMap 存储。
其他
Milvus-CDC
Milvus-CDC 是一款易于使用的配套工具,用于在 Milvus 实例之间捕获并同步增量数据,从而轻松实现增量备份和灾难恢复。在此版本中,Milvus-CDC 的稳定性得到提升,其变更数据捕获(CDC)功能现已正式可用。
要了解有关 Milvus-CDC 的更多信息,请参阅 GitHub 仓库 和 Milvus-CDC 概述。
优化 MilvusClient API
MilvusClient 是 ORM 模块的一种易用替代方案。它采用纯函数式方法来简化与服务器的交互。每个 MilvusClient 都会与服务器建立一个 gRPC 连接,而不是维护连接池。MilvusClient 模块已实现 ORM 模块的大部分功能。要了解有关 MilvusClient 模块的更多信息,请访问 pymilvus 和 参考文档。