milvus-logo
LFAI
首页
  • 关于 Milvus

发布说明

了解 Milvus 的新功能!本页总结了每个版本的新功能、改进、已知问题和错误修复。您可以在本部分找到 v2.4.0 之后每个版本的发布说明。我们建议您定期访问此页面以了解更新信息。

v2.4.11

发布日期2024 年 9 月 11 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.112.4.62.4.32.4.8

Milvus 2.4.11 是一个错误修复版本,解决了与 MARISA 三角索引、压缩和加载操作有关的多个关键问题。该版本引入了查看表达式和提高删除稳定性的新功能。我们建议所有 2.4.x 系列的用户升级到此版本,以受益于这些改进和修复。

新功能

  • 为 2.4 版中的表达式添加了静态视图(#35954)
  • 实现了与删除缓冲区相关的配额逻辑(#35997)

错误修复

  • 解决了针对 GreaterThan 和 GreaterThanEqual 比较的 Trie 索引范围操作符问题(#36126)
  • 更正了marisa_label_order 在 Trie 索引构建中的用法(#36060)
  • 增强了trie.predictive_search 的值检查(#35999)
  • 在反转索引中启用二进制算术表达式支持(#36097)
  • 修复了由 Skipindex 引起的段故障(#35908)
  • 解决了代理元缓存中的内存泄漏问题(#36076)
  • 重命名了 mmap 文件路径以防止目录冲突(#35975)
  • 改进了混合压缩中失败/超时任务的日志记录和清理(#35967)
  • 解决了委托人高内存使用时的逻辑死锁问题(#36066)
  • 当压实删除所有插入时,实现了空段创建(#36045)
  • 更正了 2.4 中旧版本加载信息中的加载字段列表(#36018)
  • 修正了 2.4 中的跟踪配置更新逻辑(#35998)
  • 解决了动态分区发布期间搜索/查询请求失败的问题(#36019)
  • 防止覆盖回退参数(#36006)
  • 确保正确注册特权组以进行验证(#35938)
  • 防止错误清理数据库限制器节点(#35992)
  • 解决了故障恢复后副本不参与查询的问题(#35925)
  • 解决了聚类压缩写入器中的数据竞赛问题(#35958)
  • 修复了移动操作后的变量引用问题(#35904)
  • 实施了集群键跳过加载行为检查(#35899)
  • 确保在 2.4 中单次启动 querycoord 观察器(#35817)

改进

  • 将 Milvus 和 proto 版本升级到 2.4.11(#36069)
  • 解决了单元测试中的内存泄漏问题,并启用了单元测试构建中的 use_asan 选项(#35857)
  • 将 l0segmentsrowcount 限制调整为更合适的值(#36015)
  • 将 deltalog 内存估算系数修改为 1(#36035)
  • 为加载字段列表比较实施了片段验证(#36062)
  • 降低了删除操作的日志频率(#35981)
  • 将 etcd 版本升级至 3.5.14(#35977)
  • 优化了预热后的 mmap-rss 缩减(#35965)
  • 删除了读取请求速率限制器中的冷却期(#35936)
  • 增强了对先前加载过的 Collections 的加载字段检查(#35910)
  • 在 2.4 中添加了对放弃与特权列表相关的角色的支持(#35863)
  • 实施了 depguard 规则,禁止使用已废弃的 proto 库(#35818)

其他

  • 更新了 Knowhere 版本(#36067)

v2.4.10

发布日期: 2024 年 8 月 30 日2024 年 8 月 30 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.102.4.62.4.32.4.6

Milvus 2.4.10 在功能和稳定性方面都有显著改进。主要功能包括支持在启用 AutoID 的 Collections 上进行 upsert 操作、部分 Collections 加载功能以及各种内存映射 (MMAP) 配置,以优化内存使用。该版本还解决了导致恐慌、内核转储和资源泄漏的几个错误。我们建议升级以充分利用这些改进。

功能特性

  • 带自动 ID 的倒插操作:支持自动生成 ID 的倒插操作(#34633)
  • 字段部分加载 Collections[测试版预览]:允许加载 Collections 的特定字段(#35696)
  • RBAC 增强功能
    • 为变更数据捕获(CDC)添加了 RBAC 消息支持(#35562)
    • 引入只读/读写/管理员权限组以简化 RBAC 授权流程(#35543)
    • 用于备份和恢复 RBAC 配置的新 API(#35513)
    • 恢复 RBAC 元数据后刷新代理缓存(#35636)
  • 改进了 MMAP 配置:控制 MMAP 行为的更多通用配置选项(#35609)
  • 数据库访问限制:限制数据库读取访问的新属性(#35754)

错误修复

  • 修正了箭头围棋客户端不返回错误的问题(#35820)
  • 修正了不准确的速率限制(#35700)
  • 解决了导入相关 API 失败后代理恐慌的问题(#35559)
  • 修正了 GC 通道检查点期间可能出现的错误删除(#35708)
  • 解决了因候选导入段为空而导致的恐慌(#35674)
  • 修正了 mmap 内存分配(#35726)
  • 确保从 2.2 升级到 2.4 时正确观察通道(#35695)
  • 修正了数据节点解除观察通道释放功能(#35657)
  • 修正了 RootCoord 元数据中的分区计数(#35601)
  • 解决了某些参数的动态配置更新问题(#35637)

改进

性能

  • 优化了动态 Field 的检索(#35602)
  • 提高了 AVX512 的比特集性能(#35480)
  • once 初始化后重新读取值,以提高效率(#35643)

滚动升级改进

  • 将暂停后的查询节点标记为只读节点(#35586)
  • 防止旧协调器与新节点/代理共存(#35760)

其他

  • 优化了 Milvus 核心构建流程(#35660)
  • 更新至 protobuf-go v2(#35555)
  • 为 traceid 和 spanid 增强了使用十六进制字符串编码的追踪功能(#35568)
  • 为查询钩子添加了命中段数指标(#35619)
  • 改进了配置加载参数功能与旧 SDK 的兼容性(#35573)
  • 添加了对 HTTP v1/v2 节流的支持(#35504)
  • 修正了索引内存估算(#35670)
  • 能够在混合压缩器中写入多个片段,以避免生成大片段(#35648)

v2.4.9

发布日期2024 年 8 月 20 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.92.4.52.4.32.4.4

Milvus v2.4.9 解决了在某些角落情况下可能返回结果小于 limit (topk) 的关键问题,并包含几项关键改进,以提高平台的性能和可用性。

关键修复

  • 将 l0 段排除在可读快照之外(#35510)。

改进

  • 删除了代理中重复创建的 Schema 辅助程序(#35502)。
  • 添加了对在 Ubuntu 20.04 上编译 Milvus 的支持(#35457)。
  • 优化了锁的使用,避免了集群缓冲区写入器的双重刷新(#35490)。
  • 删除了无效日志(#35473)。
  • 添加了聚类压缩用户指南文档(#35428)。
  • 在 Schema 助手中添加了对动态字段的支持(#35469)。
  • 在生成的 YAML 中添加了 msgchannel 部分(#35466)。

v2.4.8

发布日期:2024 年 8 月 14 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.82.4.52.4.32.4.4

Milvus 2.4.8 对系统的性能和稳定性进行了多项重大改进。最显著的特点是实现了聚类压缩,这种机制可根据指定的聚类密钥重新分配大型 Collections 中的数据,减少扫描的数据量,从而提高搜索和查询效率。压缩还与分片数据节点解耦,允许任何数据节点独立执行压缩,从而提高了容错性、稳定性、性能和可扩展性。此外,还重构了 Go 和 C++ 组件之间的接口,使用异步 CGO 调用,解决了会话超时等问题,并根据剖析结果对其他性能进行了优化。此外,还更新了应用程序的依赖关系,以解决已知的安全漏洞。此外,该版本还包含大量性能优化和重要错误修复。

功能特性

  • 实现了聚类压缩,允许根据指定的聚类密钥重新分配数据,以提高查询效率(#34326),(#34363).

改进

  • 在 CGO 中实现了异步搜索和检索功能。(#34200)
  • 将压缩过程从碎片数据节点中分离出来,以提高系统模块化程度。(#34157)
  • 在代理/委托器中的 QueryNode 中添加了对客户端池的支持,以提高性能。(#35195)
  • 在 Gin 和 RestfulV1 处理器中集成了 Sonic,以尽量减少 JSON marshaling 和 unmarshaling 过程中的 CPU 开销。(#35018)
  • 引入内存缓存,优化验证结果检索。(#35272)
  • 修改了自动索引的默认度量类型。[#34277,#34479]
  • 重构了变量列的运行时内存格式,从而减少了内存使用。[#34367,#35012, #35041]
  • 重构了压缩过程,以启用持久数据存储。(#34268)
  • 为不断增长的段启用内存映射文件支持,改善内存管理。(#34110)
  • 通过添加 RESTful API 支持、记录一致性级别以及区分系统错误和用户错误,改进了访问日志。[#34295 , #34352, # 34396]
  • 在 Knowhere 中使用新的range_search_k 参数,加快范围搜索速度。(#34709)
  • 应用阻塞式 Bloom 过滤器,提高过滤器构建和查询的速度。[#34377,#34922]
  • 内存使用改进:
    • 为数据节点插入缓冲区预分配空间。(#34205)
    • 为还原操作预分配FieldData(#34254)
    • 在删除编解码器中释放记录以防止内存泄漏。(#34506)
    • 在文件加载过程中控制磁盘文件管理器的并发级别。(#35282)
    • 优化了 Go 运行时的垃圾 Collections 逻辑,以便及时释放内存。(#34950)
    • 为不断增长的分段实施了新的密封策略。(#34779)
  • 增强了 DataCoord:
    • 降低 CPU 占用率。[#34231,#34309]
    • 实现了更快的垃圾 Collections 退出逻辑。(#35051)
    • 改进了工作节点调度算法。(#34382)
    • 增强了专门针对导入操作的段大小控制算法。(#35149)
  • 负载平衡算法改进:
    • 降低了委托人的内存超载系数。(#35164)
    • 为委托人分配固定内存大小。(#34600)
    • 避免为新查询节点分配过多的段和通道。(#34245)
    • 减少查询协调器每个调度周期的任务数量,同时提高调度频率。(#34987)
    • 增强了数据节点上的通道平衡算法(#35033)
  • 扩展了系统指标:在各种组件中添加了新指标,以监控特定方面,包括

更改

  • 对于开源用户,该版本将自动索引中FloatVectorBinaryVector 的度量类型分别改为CosineHamming

  • 固定的第三方依赖版本

    • 该版本引入了某些第三方依赖库的固定版本,大大加强了 Milvus 的软件供应链管理。
    • 通过将项目与上游变更隔离开来,它可以保护日常构建免受潜在中断的影响。
    • 该更新通过在 JFrog Cloud 上独家托管经过验证的 C++ 第三方软件包和使用 Conan Recipe Revisions (RREV) 来确保稳定性。
    • 这种方法降低了因 ConanCenter 更新而产生破坏性变更的风险。
    • 使用 Ubuntu 22.04 的开发人员将立即受益于这些变更。不过,使用其他操作系统的开发人员可能需要升级他们的glibc 版本,以避免出现兼容性问题。

重要错误修复

  • 修正了在 L0 压缩过程中因遗漏数据段而导致删除数据丢失的问题。[#33980 , #34363]
  • 修正了因数据范围处理不当而导致删除信息无法转发的问题。(#35313)
  • 解决了由于不正确使用mmap 而导致的 SIGBUS 异常[#34455,#34530] 。
  • 修复了非法搜索表达式导致的崩溃。(#35307)
  • 修正了因监视上下文中的超时设置不正确而导致 DataNode 监视失败的问题。(#35017)

错误修复

  • 通过升级某些依赖项解决了安全漏洞。[#33927,#34693]
  • 修正了过长表达式引发的解析错误。(#34957)
  • 解决了查询计划解析过程中出现的内存泄漏问题。(#34932)
  • 修正了动态日志级别修改不生效的问题。(#34777)
  • 解决了因未初始化段偏移而导致对不断增长的数据进行分组查询失败的问题。(#34750)
  • 更正了使用 Knowhere 迭代器时搜索参数的设置。(#34732)
  • 修改了检查分区加载状态的逻辑。(#34305)
  • 修正了权限缓存更新因未处理请求错误而失败的问题。(#34697)
  • 解决了 QueryCoord 重启后加载的 Collections 恢复失败的问题。(#35211)
  • 通过移除不必要的索引参数验证,修正了加载幂等性问题。(#35179)
  • 确保在 DataCoord 重启后执行compressBinlog ,以使reloadFromKV 能够正确填充 binlog 的logID(#34062)
  • 修正了 DataCoord 垃圾收集后未删除 Collections 元数据的问题。(#34884)
  • 通过移除通过导入生成的刷新段,解决了 DataCoord 中 SegmentManager 的内存泄漏问题。(#34651)
  • 修复了当压缩被禁用而某个 Collection 被丢弃时的恐慌问题。(#34206)
  • 通过增强内存使用估算算法,修正了 DataNode 中的内存不足问题。(#34203)
  • 通过为大块缓存实施单飞(singleflight),防止了当多个向量检索请求命中缓存未命中时的突发内存使用。(#34283)
  • 在配置中捕获 CAS(比较和交换)操作期间的ErrKeyNotFound(#34489)
  • 修正了因在 CAS 操作中错误使用格式化值而导致配置更新失败的问题。(#34373)

杂项

  • 添加了对 OTLP HTTP 导出器的支持,从而增强了可观察性和监控能力。[#35073,#35299]
  • 通过引入 "最大 Collections "和 "磁盘配额 "等属性增强了数据库功能,这些属性现在可以动态修改。[#34511,#34386]
  • 为 DataNode 中的 L0 压缩进程添加了跟踪功能,以改进诊断和监控。(#33898)
  • 为每个 Collections 的 L0 段条目数量引入了配额配置,从而能够通过应用反向压力更好地控制删除率。(#34837)
  • 扩展了插入操作的速率限制机制,使其也适用于上插操作,从而确保在高负载情况下的性能一致性。(#34616)
  • 为代理 CGO 调用实施了动态 CGO 池,优化了资源使用和性能。(#34842)
  • 为 Ubuntu、Rocky 和 Amazon 操作系统启用了 DiskAnn 编译选项,提高了这些平台的兼容性和性能。(#34244)
  • 将柯南升级到 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.62.4.42.4.22.4.4

Milvus v2.4.6 是一个修复错误的版本,解决了删除过程中的恐慌、内存泄漏和数据丢失等关键问题。它还引入了多项优化,包括增强监控指标、将 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,使其能通知正确的节点,解决了在循环闭合时的参数捕获问题(#34004)。
  • 通过实现深度复制,修正了 ImportTask segmentsInfo 中的读写数据竞赛问题(#34126)。
  • 更正了 "legacyVersionWithoutRPCWatch "配置选项的版本信息,以防止滚动升级时出错(#34185)。
  • 修正了加载分区数量的度量(#34195)。
  • 在设置 segcore 跟踪时传递了otlpSecure 配置(#34210)。
  • 修正了 DataCoord 属性被错误覆盖的问题(#34240)。
  • 解决了因错误合并两个新创建的消息流而导致的数据丢失问题(#34563)。
  • 修正了因 msgstream 尝试使用无效 pchannel 而导致的恐慌(#34230)。
  • 解决了导入可能生成孤儿文件的问题(#34071)。
  • 修正了因段中主键重复而导致查询结果不完整的问题(#34302)。
  • 解决了在 L0 压缩中丢失密封段的问题(#34566)。
  • 修正了垃圾收集后生成的 channel-cp meta 中的脏数据问题(#34609)。
  • 修正了重启 RootCoord 后数据库数为 0 的指标(#34010)。
  • 通过移除通过导入生成的已刷新片段,修正了 DataCoord 中片段管理器的内存泄漏问题(#34652)。
  • 确保在 DataCoord 重新启动后,compressBinlog 能够填充 binlogs 的 logID,从而确保从 KV 适当地重新加载(#34064)。

v2.4.5

发布日期:2024 年 6 月 18 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.52.4.42.4.12.4.3

Milvus 2.4.5 的发布引入了多项改进和错误修复,以增强性能、稳定性和功能。Milvus 2.4.5 通过自动索引简化了稀疏、float16 和 bfloat16 向量搜索,通过 Bloom 过滤器优化加快了搜索、删除和压缩速度,并通过更快的加载时间和导入 L0 段支持解决了数据管理问题。它还引入了用于高效高维稀疏数据搜索的稀疏 HNSW 索引,增强了支持稀疏浮点型向量的 RESTful API,并修复了关键错误以提高稳定性。

新功能

  • 为 describe/alter 数据库应用程序添加了 rbac 支持(#33804)
  • 支持为稀疏向量构建 HNSW 索引(#33653,#33662)
  • 支持为二进制向量构建磁盘索引(#33575)
  • 在 RESTful v2 上支持稀疏向量类型(#33555)
  • 添加 /management/stop RESTful api 以停止组件(#33799)

改进

  • 将 maxPartitionNum 默认值设为 1024(#33950)
  • 启用不可用错误时强制重置连接(#33910)
  • 启用收集级别的刷新率限制器(#33864)
  • 并行执行 Bloom 过滤器应用,以加快分段预测(#33793)
  • 使用 fastjson lib 来清除删除日志,以加快 json.Unmarshal 的速度(#33802)
  • 使用 BatchPkExist 减少 bloom filter func 调用成本(#33752)
  • 加快了小型集合的加载速度(#33746)
  • 支持向 L0 段导入删除数据(#33712)
  • 跳过标记压缩任务进行超时,避免重复执行同一任务(#33833)
  • 在 numpy 批量插入中将 float16 和 bfloat16 向量处理为与 BinaryVector 相同(#33788)
  • 为寻道方法添加了 includeCurrentMsg 标志(#33743)
  • 为 msgdispatcher 的配置添加了 mergeInterval、targetBufSize 和 maxTolerantLag(#33680)
  • 改进了稀疏向量的 GetVectorByID(#33652)
  • 移除了 StringPrimarykey 以减少不必要的复制和函数调用成本(#33649)
  • 为二进制/稀疏数据类型添加了自动索引映射(#33625)
  • 优化了部分缓存以减少内存使用(#33560)
  • 抽象了导入/预导入任务的执行接口(#33607)
  • 在缓冲区插入中使用 map pk 到时间戳,以减少 bf 原因(#33582)
  • 避免对导入进行多余的元操作符(#33519)
  • 通过记录更好的磁盘配额信息、添加 UseDefaultConsistency 标志、删除不必要的日志来改进日志(#33597#33644#33670)

错误修正

  • 修正了查询钩无法识别向量类型的错误(#33911)
  • 防止使用捕获的迭代变量 partitionID(#33970)
  • 修正了一个可能导致 Milvus 无法在二进制和稀疏向量上创建 AutoIndex 的错误(#33867)
  • 修正了一个 Bug,该 Bug 可能导致 indexnode 在所有向量的无效索引参数上重试创建索引(#33878)
  • 修正了加载和发布同时进行时可能导致服务器崩溃的错误(#33699)
  • 改进了配置值的缓存一致性(#33797)
  • 防止删除过程中可能出现的数据丢失(#33821)
  • 确保在删除 Collections 后设置 DroppedAt 字段(可能的删除时间戳)(#33767)
  • 修正了一个可能导致 Milvus 错误处理二进制向量数据大小的问题(#33751)
  • 防止以纯文本记录敏感的 Kafka 凭据(#33694, #33747)
  • 确保 Milvus 能够正确导入包含多个向量字段的数据(#33724)。
  • 通过在启动前检查导入任务是否存在,提高了导入的可靠性。(#33673)
  • 改进了稀疏 HNSW 索引的处理(内部功能)(#33714)
  • 清理向量内存以避免内存泄漏(#33708)
  • 通过修复状态锁问题,确保异步预热更加顺畅(#33687)
  • 解决了一个可能导致查询迭代器丢失结果的 bug。(#33506)
  • 修正了一个可能导致导入段大小不均的错误(#33634)
  • 修正了对 bf16、fp16 和二进制向量类型的不正确数据大小处理(#33488)
  • 通过解决 L0 压缩器的潜在问题提高了稳定性(#33564)
  • 确保动态配置更新在缓存中得到正确反映。(#33590)
  • 提高了 RootCoordQuotaStates 指标的准确性 (#33601)
  • 确保在指标中准确报告已加载实体的数量(#33522)
  • 在异常日志中提供了更完整的信息。 (#33396)
  • 通过移除不必要的组检查器,优化了查询管道(#33485)
  • 在索引节点上使用本地存储路径进行更准确的磁盘容量检查。(#33505)
  • 更正了当命中数大于限制时 hasMoreResult 可能返回 false 的问题(#33642)
  • 延迟在委派器中加载 bf,以防止在 Worker 没有更多内存时重复加载 bf(#33650)- 修复了一个 Bug,即 queryHook 无法识别向量类型(#33911)
  • 防止使用捕获的迭代变量 partitionID(#33970)
  • 修正了一个可能导致 Milvus 无法在二进制和稀疏向量上创建自动索引的错误(#33867)
  • 修正了一个 Bug,该 Bug 可能导致 indexnode 在所有向量的无效索引参数上重试创建索引(#33878)
  • 修正了加载和发布同时进行时可能导致服务器崩溃的错误(#33699)
  • 改进了配置值的缓存一致性(#33797)
  • 防止删除过程中可能出现的数据丢失(#33821)
  • 确保在删除 Collections 后设置 DroppedAt 字段(可能的删除时间戳)(#33767)
  • 修正了一个可能导致 Milvus 错误处理二进制向量数据大小的问题(#33751)
  • 防止以纯文本记录敏感的 Kafka 凭据(#33694, #33747)
  • 确保 Milvus 能够正确导入包含多个向量字段的数据(#33724)。
  • 通过在启动前检查导入任务是否存在,提高了导入的可靠性。(#33673)
  • 改进了稀疏 HNSW 索引的处理(内部功能)(#33714)
  • 清理向量内存以避免内存泄漏(#33708)
  • 通过修复状态锁问题,确保异步预热更加顺畅(#33687)
  • 解决了一个可能导致查询迭代器丢失结果的 bug。(#33506)
  • 修正了一个可能导致导入段大小不均的错误(#33634)
  • 修正了对 bf16、fp16 和二进制向量类型的不正确数据大小处理(#33488)
  • 通过解决 L0 压缩器的潜在问题提高了稳定性(#33564)
  • 确保动态配置更新在缓存中得到正确反映。(#33590)
  • 提高了 RootCoordQuotaStates 指标的准确性 (#33601)
  • 确保在指标中准确报告已加载实体的数量(#33522)
  • 在异常日志中提供了更完整的信息。 (#33396)
  • 通过移除不必要的组检查器,优化了查询管道(#33485)
  • 在索引节点上使用本地存储路径进行更准确的磁盘容量检查。(#33505)
  • 更正了当命中数大于限制时 hasMoreResult 可能返回 false 的问题(#33642)
  • 延迟在委派器中加载 bf,以防止在工作程序没有更多内存时重复加载 bfs(#33650)

v2.4.4

发布日期:2024 年 5 月 31 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.42.4.32.4.12.4.2

Milvus v2.4.4 包含多个关键错误修复和改进,旨在提高性能和稳定性。值得注意的是我们解决了一个关键问题,即批量插入统计日志被错误地垃圾收集,从而可能影响数据完整性。我们强烈建议所有 v2.4 用户升级到该版本,以受益于这些修复。

如果您正在使用批量插入功能,请尽早升级到 v2.4.4,以确保数据完整性。

重要错误修复

  • 填写统计日志 ID 并验证其正确性(#33478)

改进

  • 升级了 ARM SVE 的比特集(#33440)
  • 启用 Milvus 与 GCC-13 的编译(#33441)

错误修正

  • 授予所有权限时显示空的 Collections(#33454)
  • 确保 CMake 下载并安装到当前平台,而非 x86_64(#33439)

v2.4.3

发布日期:2024 年 5 月 29 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.32.4.32.4.12.4.2

Milvus 2.4.3 版引入了大量功能、改进和错误修复,以提高性能和可靠性。值得注意的改进包括支持稀疏浮点向量批量插入和优化的 Bloom 过滤器加速。改进涵盖了从动态配置更新到内存使用优化等多个领域。错误修复解决了恐慌情景等关键问题,确保系统操作更加流畅。该版本强调了 Milvus 对增强功能、优化性能和提供强大用户体验的持续承诺。

功能特性

  • 支持 binlog/json/parquet 的稀疏浮点向量批量插入(#32649)

改进

错误修复

  • 修复了速率限制拦截器中数据库不存在时的恐慌(#33308)
  • 修正了因参数不正确而导致的 quotacenter 指标收集失败(#33399)
  • 修正了当 processactivestandby 返回错误时的恐慌(#33372)
  • 修复了 nq > 1 时 restful v2 中搜索结果截断的问题(#33363)
  • 为 restful v2 中的角色操作添加了数据库名称字段(#33291)
  • 修复了全局速率限制不起作用的问题(#33336)
  • 修复了因建立索引失败而导致的恐慌(#33314)
  • 在 segcore 中添加了稀疏向量验证,以确保合法性(#33312)
  • 任务完成后从同步管理中移除任务(#33303)
  • 修复了数据导入时 Partition Key 过滤失败的问题(#33277)
  • 修复了使用 noop 输出程序时无法生成 traceID 的问题(#33208)
  • 改进了查询结果检索(#33179)
  • 标记通道检查点已放弃,以防止检查点滞后指标泄漏(#33201)
  • 修复了查询节点在停止过程中卡住的问题(#33154)
  • 修复了刷新响应中缺失的片段(#33061)
  • 使提交操作符合empotent条件(#33053)
  • 为流式阅读器中的每个批次分配新片段(#33360)
  • 在 QueryCoord 重启后从资源组中清理离线节点(#33233)
  • 移除 completedCompactor 中的 l0 压缩器(#33216)
  • 初始化限制器时重置配额值(#33152)
  • 修复了超出 etcd 限制的问题(#33041)
  • 解决了因字段过多而超出 etcd 事务限制的问题(#33040)
  • 删除了 GetNumRowsOfPartition 中的 RLock 重入(#33045)
  • 在 SyncAll 之前启动 LeaderCacheObserver(#33035)
  • 启用已释放备用通道的平衡(#32986)
  • 在服务器初始化之前初始化访问记录器(#32976)
  • 使压缩器能够清除空片段(#32821)
  • 在 l0 压缩中填入 deltalog 条目编号和时间范围(#33004)
  • 修复了因分片领导者缓存数据竞赛而导致的代理崩溃问题(#32971)
  • 修正了负载索引度量的时间单位(#32935)
  • 修正了停止查询节点上的分段无法成功释放的问题(#32929)
  • 修正了索引资源估算(#32842)
  • 将通道检查点设置为 delta 位置(#32878)
  • 使 syncmgr 在返回未来之前锁定关键字(#32865)
  • 确保反转索引只有一个分段(#32858)
  • 修复了选择两个相同段的压缩触发器(#32800)
  • 修复了 binlog 导入时无法指定分区名称的问题(#32730#33027)
  • 在镶嵌导入中使动态列成为可选项(#32738)
  • 插入数据时跳过自动 ID 检查(#32775)
  • 根据 Schema 验证插入字段数据的行数(#32770)
  • 为 CTraceContext ID 添加了封装器和保持器(#32746)
  • 修复了在 datacoord 元对象中找不到数据库名称的问题(#33412)
  • 同步了已删除分区的已删除段(#33332)
  • 修复了因参数不正确而导致的 quotaCenter 指标收集失败的问题(#33399)

v2.4.1

发布日期:2024 年 5 月 6 日

Milvus 版本Python SDK 版本Java SDK 版本Node.js SDK 版本
2.4.12.4.12.4.02.4.2

Milvus 2.4.1 版带来了大量改进和错误修复,旨在提高软件的性能、可观测性和稳定性。这些改进包括声明式资源组 API、支持 Float16/BFloat16 向量数据类型的增强型批量插入功能、可减少对象存储的列表操作的改进型垃圾 Collection (GC) 机制,以及其他与性能优化相关的更改。此外,错误修复还解决了编译错误、换行符模糊匹配失败、RESTful 接口参数数据类型不正确以及启用动态字段时 BulkInsert 在 numpy 文件上引发错误等问题。

破坏性更改

  • 不再支持使用空筛选表达式删除。(#32472)

新增功能

  • 在批量插入中添加了对 Float16/BFloat16 向量数据类型的支持(#32157)
  • 增强了稀疏浮点型向量,以支持暴力迭代器搜索和范围搜索(#32635)

改进

  • 添加了声明式资源组 api(#31930#32297 32536#32666)
  • 重写了 QueryCoord 中的 Collections 观察器,使其任务驱动(#32441)
  • 重构了 DataNode 的 SyncManager 中使用的数据结构,以减少内存使用并防止错误(#32673)
  • 修改了垃圾收集的实现,以尽量减少与对象存储相关的列表操作(#31740)
  • 降低了高收集数时的 CPU 占用率(#32245)
  • 通过代码自动生成 milvus.yaml 文件中的相关配置项,从而加强了对 milvus.yaml 的管理(#31832#32357)
  • 通过在执行本地缩减后检索数据,增强了查询的性能(#32346)
  • 为创建 etcd 客户端添加了 WithBlock 选项(#32641)
  • 如果客户端提供,则使用客户端指定的 client_request_id 作为 TraceID(#32264)
  • 为删除和批量插入操作的指标添加了数据库标签(#32611)
  • 添加了通过配置跳过 AutoID 和 PartitionKey 列验证的逻辑(#32592)
  • 改进了与身份验证有关的错误(#32253)
  • 改进了 DataCoord 中 AllocSegmentID 的错误日志(#32351#32335)
  • 删除了重复的度量(#32380#32308),并清理了未使用的度量(#32404#32515)
  • 添加了配置选项,以控制是否强制激活 partitionKey 功能(#32433)
  • 添加了配置选项,以控制单次请求中可插入的最大数据量(#32433)
  • 在段级别对 applyDelete 操作进行并行化,以加快 Delegator 对 Delete 消息的处理(#32291)
  • 使用索引(#32232# 32505#32533# 32595)和添加缓存(#32580)来加速 QueryCoord 中频繁的过滤操作。
  • 重写数据结构(#32273) 和重构代码(#32389) 以加速 DataCoord 中的常见操作。
  • 从 Conan 中移除 openblas(#32002)

错误修复

  • 修正了在 rockylinux8 中构建 milvus(#32619)
  • 修正了 ARM 上 SVE 的编译错误(#32463,#32270)
  • 修正了基于 ARM 的 GPU 图像的崩溃问题(#31980)
  • 修正了 regex 查询无法处理带换行的文本(#32569)
  • 修正了因 GetShardLeaders 返回空节点列表而导致搜索结果为空的问题(#32685)
  • 修正了 BulkInsert 在遇到 numpy 文件中的 Dynamic Field 时引发错误的问题(#32596)
  • 修正了与 RESTFulV2 接口相关的错误,包括允许请求中的数字参数接受数字输入而非字符串类型的重要修正(#32485,#32355)
  • 通过移除速率限制器中的观察配置事件,修复了代理中的内存泄漏问题(#32313)
  • 修正了当未指定 partitionName 时,速率限制器会错误地报告无法找到分区的问题(#32647)
  • 在错误类型中添加了对 Collections 处于恢复状态和未加载两种情况的检测。(#32447)
  • 更正了可查询的负数实体度量(#32361)

v2.4.0

发布日期:2024 年 4 月 17 日

Milvus 版本Python SDK 版本Node.js SDK 版本
2.4.02.4.02.4.0

我们很高兴地宣布 Milvus 2.4.0 正式发布--在 2.4.0-rc.1 版本的坚实基础上,我们重点解决了用户报告的关键 Bug,同时保留了现有功能。此外,Milvus 2.4.0 还引入了一系列优化措施,旨在提高系统性能,通过纳入各种指标来提高可观察性,并精简代码库以提高简洁性。

改进

破坏性更改

  • 停止二进制向量的分组搜索(#31735)
  • 停止使用混合搜索进行分组搜索(#31812)
  • 停止二进制向量的 HNSW 索引(#31883)

错误修复

  • 增强了查询和插入的数据类型和值检查,以防止崩溃(#31478 31653 31698 31842#32042#32251 32204)
  • 修复了 RESTful API 的错误(#32160)
  • 改进了对倒排索引资源使用情况的预测(#31641)
  • 解决启用授权时与 etcd 的连接问题(#31668)
  • nats 服务器的安全更新(#32023)
  • 将倒排索引文件存储到查询节点的本地存储路径,而不是 /tmp(#32210)
  • 解决了 collectionInfo 的数据线内存泄漏问题(#32243)
  • 修复了与 fp16/bf16 相关的、可能导致系统崩溃的错误(#31677 31841#32196)
  • 解决了分组搜索返回结果不足的问题(#32151)
  • 调整了使用迭代器的搜索,以更有效地处理还原步骤中的偏移,并确保在启用 "reduceStopForBest "的情况下获得足够的结果(#32088)

版本 2.4.0-rc.1

发布日期:2024 年 3 月 20 日

Milvus 版本Python SDK 版本
2.4.0-rc.12.4.0

此版本引入了多个基于场景的功能:

  • 新 GPU 索引 - CAGRA:得益于英伟达™(NVIDIA®)的贡献,新 GPU 索引的性能提升了 10 倍,尤其是在批量搜索时。有关详情,请参阅GPU 索引

  • 多向量混合搜索:该功能可以存储多个模型的向量嵌入,并进行混合搜索。详情请参阅混合搜索

  • 稀疏向量:稀疏向量是关键词解释和分析的理想选择,现在支持在 Collections 中进行处理。有关详情,请参阅稀疏向量

  • 分组搜索:分类聚合提高了检索增强生成 (RAG) 应用程序的文档级召回率。详情请参阅分组搜索

  • 反向索引模糊匹配:这些功能提高了标量字段的关键词检索能力。有关详情,请参阅索引标量字段过滤搜索

新功能

GPU 索引 - CAGRA

我们衷心感谢英伟达™(NVIDIA®)团队为 CAGRA 做出的宝贵贡献,CAGRA 是基于 GPU 的最先进(SoTA)图索引,可在线使用。

与以往的 GPU 索引不同,CAGRA 甚至在小批量查询方面也表现出了压倒性的优势,而这正是 CPU 索引传统上最擅长的领域。此外,CAGRA 在大型批量查询和索引构建速度方面的性能也是无与伦比的,而这正是 GPU 索引大显身手的领域。

示例代码见example_gpu_cagra.py

稀疏向量(测试版)

在此版本中,我们引入了一种新的向量场类型,称为稀疏向量。稀疏向量不同于稠密向量,因为稀疏向量的维数比稠密向量高出数倍,只有少数维数为非零。由于其基于项的性质,这一特征具有更好的可解释性,在某些领域可能更有效。事实证明,SPLADEv2/BGE-M3 等学习的稀疏模型对于常见的第一阶段排序任务非常有用。Milvus 这一新功能的主要用例是允许对 SPLADEv2/BGE-M3 等神经模型和 BM25 算法等统计模型生成的稀疏向量进行高效的近似语义近邻搜索。Milvus 现在支持稀疏向量的高效和高性能存储、索引和搜索(MIPS,最大内积搜索)。

示例代码请参见hello_sparse.py

多向量支持是需要多模型数据处理或混合使用密集向量和稀疏向量的应用的基石。有了多向量支持,您现在可以

  • 存储多个模型为非结构化文本、图像或音频样本生成的向量 Embeddings。
  • 进行包含每个实体的多个向量的 ANN 搜索。
  • 通过为不同的 Embeddings 模型分配权重来定制搜索策略。
  • 尝试使用各种嵌入模型,以找到最佳模型组合。

多向量支持允许在一个 Collections 中对不同类型的多个向量场(如 FLOAT_VECTOR 和 SPARSE_FLOAT_VECTOR)进行存储、索引和应用重排策略。目前,有两种 Rerankers 策略可供选择:互易排名融合(RRF)平均加权评分(Average Weighted Scoring)。这两种策略都是将不同向量场的搜索结果合并成一个统一的结果集。第一种策略优先处理在不同向量领域搜索结果中持续出现的实体,而其他策略则为每个向量领域的搜索结果分配权重,以确定它们在最终结果集中的重要性。

示例代码见hybrid_search.py

反向索引和模糊匹配

在 Milvus 以前的版本中,标量字段索引使用了基于内存的二进制搜索索引和 Marisa Trie 索引。不过,这些方法需要消耗大量内存。现在,Milvus 的最新版本采用了基于 Tantivy 的倒排索引,可应用于所有数字和字符串数据类型。这种新索引大大提高了标量查询性能,将字符串中关键字的查询量减少了十倍。此外,由于对数据压缩和内部索引结构的内存映射存储(MMap)机制进行了额外优化,倒置索引消耗的内存更少。

该版本还支持在标量过滤中使用前缀、后缀和后缀进行模糊匹配。

示例代码可在inverted_index_example.pyfuzzy_match.py 中找到。

现在,您可以根据特定标量字段中的值对搜索结果进行聚合。这有助于 RAG 应用程序实现文档级召回。考虑一个文档 Collections,每个文档分成不同的段落。每个段落由一个向量 Embeddings 表示,属于一个文档。为了找到最相关的文档而不是分散的段落,可以在 search() 操作中加入 group_by_field 参数,根据文档 ID 对结果进行分组。

示例代码见example_group_by.py

Float16 和 BFloat- 向量数据类型

机器学习和神经网络经常使用半精度数据类型,如 Float16 和 BFloat--虽然这些数据类型可以提高查询效率并减少内存使用量,但同时也会降低精度。在此版本中,Milvus 现在支持向量字段的这些数据类型。

示例代码可在float16_example.pybfloat16_example.py 中找到。

升级后的架构

L0 段

此版本包含一个名为 L0 段的新网段,用于记录删除的数据。该分段会定期压缩已存储的删除记录,并将其分割成密封分段,从而减少小规模删除所需的数据刷新次数,并留下少量存储空间。通过这种机制,Milvus 将数据压缩与数据刷新完全分离,提高了删除和上载操作的性能。

重构的批量插入

此版本还引入了改进的批量插入逻辑。这样就可以在单个批量插入请求中导入多个文件。通过重构版本,批量插入的性能和稳定性都有了显著提高。用户体验也得到了增强,例如对速率限制进行了微调,错误信息也更加友好。此外,你还可以通过 Milvus 的 RESTful API 轻松访问批量插入端点。

内存映射存储

Milvus 使用内存映射存储(MMap)来优化内存使用。这种机制不是将文件内容直接加载到内存中,而是将文件内容映射到内存中。这种方法会导致性能下降。 在拥有 2 个 CPU 和 8 GB 内存的主机上,通过为 HNSW 索引 Collections 启用 MMap,可以多加载 4 倍的数据,而性能下降不到 10%。

此外,该版本还允许对 MMap 进行动态和细粒度控制,而无需重启 Milvus。

有关详情,请参阅MMap 存储

其他

Milvus-CDC

Milvus CDC 是一个易于使用的配套工具,用于捕获和同步 Milvus 实例之间的增量数据,从而轻松实现增量备份和灾难恢复。在此版本中,Milvus-CDC 的稳定性得到了提高,其变更数据捕获 (CDC) 功能现已全面可用。

要了解有关 Milvus-CDC 的更多信息,请参阅GitHub 存储库Milvus-CDC 概述

改进的 MilvusClient 界面

MilvusClient 是 ORM 模块的易用替代品。它采用纯功能方法来简化与服务器的交互。每个 MilvusClient 都会与服务器建立 gRPC 连接,而不是维护一个连接池。 MilvusClient 模块实现了 ORM 模块的大部分功能。 要了解有关 MilvusClient 模块的更多信息,请访问pymilvus参考文档

翻译自DeepLogo

反馈

此页对您是否有帮助?