id: release_notes.md

发版说明

v2.0.2

Release date: 2022-04-02

Compatibility

Milvus version Python SDK version Java SDK version Go SDK version Node.js SDK version
2.0.2 2.0.2 2.0.4 2.0.0 2.0.2

Milvus 2.0.2 is a minor bug-fix version of Milvus 2.0. We fixed multiple critical issues of collection load failure and server crash. We’ve also greatly boosted the query by ID performance by utilizing primary key index. The Prometheus metrics is redesigned in this version and we highly recommend you to deploy the monitoring system in production environment.

Bug fixes

  • #16338 Data coord uses VChannel when when unsubscribing to data node.
  • #16178 #15725 Query node crashes.
  • #16035 #16063 #16066 Collection load error.
  • #15932 Compaction runtime error.
  • #15823 DescribeCollection RPC fails in data node failover.
  • #15783 Recall drops after compaction.
  • #15790 Shallow copy of typeutil.AppendFieldData.
  • #15728 Query coord sets wrong watchDmchannelInfo when one partition is empty.
  • #15712 DEPLOY_MODE is got or used before set.
  • #15702 Data coord panics if message queue service quits before it.
  • #15707 Compaction generates empty segment.

Performance

Improvements

Features

v2.0.1

Release date: 2022-02-23

Compatibility

Milvus version Python SDK version Java SDK version Go SDK version Node.js SDK version
2.0.1 2.0.1 2.0.4 2.0.0 2.0.1

Milvus 2.0.1 is a minor bug-fix version of Milvus 2.0. The key progress of Milvus 2.0.1 includes that, first, the execution engine of Milvus knowhere was separated from the Milvus repository and moved to a new one - milvus-io/knowhere, and, second, supports were enabled for Milvus to be compiled across multiple platforms. We fixed a few critical issues that cause query node crash, index building failure, and server hang. The default dependency of Golang is upgraded to solve memory usage issues. We also upgrade the default dependency of Pulsar to solve the log4j security issue.

Improvements

  • #15491 Supports compiling and running Milvus on Mac.
  • #15453 Adds log when removing keys in garbage collector.
  • #15551 Avoids copying while converting C bytes to Go bytes.
  • #15377 Adds collectionID to the return of SearchResults and QueryResults.

Features

  • #14418 Implements automatic item expiration on compaction.
  • #15542 Implements mixed compaction logic.

Bug fixes

  • #15702 Data coord panics if message queue service quits before it closes.
  • #15663 Query node crashes on concurrent search.
  • #15580 Data node panics when compacting empty segment.
  • #15626 Failed to create index when segment size is set to large than 2GB.
  • #15497 SessionWatcher quits if not re-watch logic is provided when meeting ErrCompacted.
  • #15530 Segments under Flushing status are not treated as Flushed segment.
  • #15436 Watch DML channel failed because of no collection meta, causing load collection failure.
  • #15455 SegmentIDs is not respected when querynode.GetSegmentInfo is called.
  • #15482 EntriesNum of delta logs is not recorded correctly in segment meta.

Dependency Upgrade

  • #11393 Upgrades Golang from 1.15.2 to 1.16.9.
  • #15603 Upgrades Knowhere to 1.0.1.
  • #15580 Upgrades Pulsar from 2.7.3 to 2.8.2.

v2.0.0

Release date: 2022-01-25

Compatibility

Milvus version Python SDK version Java SDK version Go SDK version Node.js SDK version
2.0.0 2.0.0 2.0.2 2.0.0 2.0.0

We are excited to announce the general release of Milvus 2.0 and it is now considered as production ready. Without changing the existing functionality released in the PreGA release, we fixed several critical bugs reported by users. We sincerely encourage all users to upgrade your Milvus to 2.0.0 release for better stability and performance.

Improvements

  • Changes the default consistency level to Bounded Staleness:

    1. If consistency level Strong is adopted during a search, Milvus waits until data is synchronized before the search, thus spending longer even on a small dataset. Under the the default consistency level of Bounded Staleness, newly inserted data remain invisible for a could of seconds before they can be retrieved. For more information, see [Guarantee Timestamp in Search Requests](https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md).
  • #15223 Makes query nodes send search or query results by RPC.

Bug fixes

  • Writing blocked by message storage quota exceed exception:

    • #15221 Unsubscribes channel when closing Pulsar consumer.
    • #15230 Unsubscribes channel after query node is down.
    • #15284 Adds retry logic when pulsar consumer unsubscribes channel.
    • #15353 Unsubscribes topic in data coord.
  • Resource leakage:

    • #15303 Cleans flow graph if failed to watchChannel.
    • #15237 Calls for releasing memory in case that error occurs.
    • #15013 Closes payload writer when error occurs.
    • #14630 Checks leakage of index CGO object.
    • #14543 Fixes that Pulsar reader is not close.
    • #15068 Fixes that file is not close when ReadAll returns error in local chunk manager.
    • #15305 Fixes query node search exceptions will cause memory leak.
  • High memory usage:

    • #15196 Releases memory to OS after index is built.
    • #15180 Refactors flush manager injection to reduce goroutine number.
    • #15100 Fixes storage memory leak caused by runtime.SetFinalizer.
  • Cluster hang:

    • #15181 Stops handoff if the segment has been compacted.
    • #15189 Retains nodeInfo when query coord panic at loadBalanceTask.
    • #15250 Fixes collectResultLoop hang after search timeout.
    • #15102 Adds flow graph manager and event manager.
    • #15161 Panic when recover query node failed.
    • #15347 Makes index node panic when failed to save meta to MetaKV.
    • #15343 Fixes Pulsar client bug.
    • #15370 Releases collection first when drop collection.
  • Incorrect returned data:

    • #15177 Removes global sealed segments in historical.
    • #14758 Fixes that deleted data returned when handoff is done for the segment.

Known issues

  • #14077 Core dump happens under certain workload and it is still under reproducing. Solution: The system will be recovered automatically.
  • #15283 Cluster fails to recover because Pulsar’s failure to create consumer Pulsar #13920. Solution: Restart pulsar cluster.
  • The default dependency Pulsar use old log4j2 version and contains security vulnerability. Solution: Upgrade pulsar dependency to 2.8.2. We will soon release a minor version to upgrade Pulsar to newer releases.
  • #15371 Data coord may fail to cleanup channel subscription if balance and node crash happens at same time. Solution: Remove the channel subscription with Pulsar admin.

v2.0.0-PreGA

发布时间: 2021-12-31

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本 Node.js SDK 版本
2.0.0-PreGA 2.0.0rc9 2.0.0 即将上线 1.0.20

Milvus 2.0.0-PreGA 是 2.0 的预览版。它现在支持通过 primary key 删除 entity 和数据 Compaction 来清除已删除的数据。我们还在 Milvus 中引入了 Loadbalance 机制,以便均匀地分配每个 query node 的内存使用。在这个版本中我们修复了一些关键问题,包括被删除的 collection 数据清理,Jaccard 距离计算错误,以及一些导致系统卡死和内存泄漏的 bug。 请注意,由于数据编码格式和 RocksMQ 数据格式的一些变化, Milvus 2.0.0-PreGA 与其他 Milvus 2.0 前期预览版本不兼容。

新增功能

  • 删除 entity:Milvus 现在支持通过 primary key 删除 entity。由于 Milvus 依赖于仅追加存储,导致其只支持逻辑删除,也就是说,Milvus 为被删除的 entity 插入删除标记以覆盖实际数据,令搜索或查询不返回被标记的 entity。请注意,过度删除可能会导致搜索性能下降和存储使用量激增。参见删除数据获取更多信息。

  • Compaction 机制:通过 Compaction 机制,清理 binlog 中删除或过期的 entity,节省存储空间。该机制为 data coord 触发,data node 执行的后台任务。

  • 自动 Loadbalance #9481:Loadbalance 机制将 segment 均匀地分布在 query node 上,以平衡集群的内存使用。它可以自动触发,也可以由用户触发。

  • Handoff #9481:Handoff 机制是指当一个 growing segment 转化为 sealed segment 时,query node 等待至该 segment 被 index node 构建索引后,将该 segment 加载到内存中进行搜索或查询。

主要改进

  • #12199 在 segment 之间并行执行,以提高搜索性能。
  • #11373 允许在 RocksMQ 内部循环中批量消费消息,以提高系统效率。
  • #11665 延迟 Handoff 的执行,直到索引创建完成。

问题修复

  • 删除 collection 时,etcd、Pulsar 和 MinIO 上的数据没有被清除:

    • #12191 清除 etcd 上被删除 segment 的元数据。
    • #11554 为 data coord 增加 garbage collector。
    • #11552 在 data node 中完成删除 collection 的过程。
    • #12227 删除 collection 时删除所有索引。
    • #11436 修改 retentionSizeInMB 默认值为8192 (8GB)。
  • #11901 不同度量类型的属性导致的距离计算错误。

  • #12511 不同度量类型的属性导致的相似相关性错误。
  • #12225 重复搜索时 RocksMQ 会卡死。
  • #12255 RocksMQ 服务器在 Milvus 单机版退出时不会关闭。
  • #12281 删除别名时的错误。
  • #11769 错误更新 serviceableTime
  • #11325 合并搜索结果时崩溃。
  • #11248 参数 guarantee_timestamp 不起作用。

其他增强

  • #12351 更改代理默认的 RPC 传输限制。
  • #12055 减少从 MinIO 加载时的内存成本。
  • #12248 支持更多的部署指标。
  • #11247 为集群增加 getNodeInfoByIDgetSegmentInfoByNode 函数。

  • #11181 重构 query coord 上的 segment 分配策略。

v2.0.0-RC8

发布时间:2021-11-5

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本 Node.js SDK 版本
2.0.0-RC8 2.0.0rc8 即将上线 即将上线 1.0.18

Milvus 2.0.0-RC8 是 2.0 的最后一个预览版本。在该版本中,Milvus 支持 Handoff 任务,Primary Key 去重,以及 Time Travel 搜索功能。随着 Timetick 机制的增强,系统的平均修复时间 (mean time to recovery, MTTR)也大幅减少。在针对该版本的千万级数据集的压力测试中,单机版与分布式版 Milvus 都运行超过 84 小时。

目前,Primary Key(pk)去重功能无法保证插入新数据会覆盖与其 pk 相同的旧数据。因此,当前版本中基于相同 pk 的结构化匹配的返回结果为未知行为。该限制将在未来版本中修复。

主要改进

  • 故障恢复速度:

    • #10737 实现 Proxy Session Checker。
    • #10723 修复寻求 queryChannel 错误。
    • #10907 修复 LatestPosition 选项与最早补丁冲突的问题。
    • #10616 删除 Common YAML 文件。
    • #10771 将 channel 查找起始位置更改为所有 segment 的最早先的检查点。
    • #10651 修复 query coord 设置查找位置错误。
    • #9543 初始化 global sealed segment 并在AddQueryChannel时寻找查询通道。
    • #9684 Data coord 重启时,避免重复消耗 timetick MsgStream。
  • 重构 meta 快照:

    • #10288 减少存储在 SnapshotMeta 中的信息。
    • #10703 修复因兼容问题导致创建 meta table 失败。
    • #9778 简化 meta_snapshot 接口。
  • #10563 修改默认平衡策略。

  • #10730 获取查询 segment 信息时返回 segment 状态。

  • #10534 支持从环境变量中读取 MinIO 配置。

  • #10114 设定默认 gracefulTime0

  • #9860liveChn 隐藏至 sessionutil 并修复存活初始化顺序。

  • #7115 使用 etcd 监听 data node。

  • #7606 使 knowhere 独立编译。

新增功能

  • Handoff:

    • #10330 添加 handoffTask
    • #10084queryChannel 发布 sealedSegmentChangeInfo
    • #10619 修复当 query node 收到 segmentChangeInfo 时删除 segment。
    • #10045 监听 query node 中的 changeInfo
    • #10011 当收到 changeInfo 时,更新被排除的 segment 信息。
    • #9606AddQueryChannelRequest 添加初始化信息。
  • Primary Key 去重:
    • #10834 在 query node 中删除 primary key 重复的查询结果。
    • #10355 #10967 在 proxy 中删除 primary key 重复的查询结果。
    • #10117 在 segcore reduce 中删除 primary key 重复的查询结果。
    • #10949 仅使用 primary key 检测重复的查询结果。
  • Auto-flush:
    • #10659flushManager 接口添加 injectFlush 方法。
    • #10580FlushManager 添加 injection 逻辑。
    • #10550 为同一 ID 的 segment 合并自动和手动 flush。
    • #10539 允许已 flush 的 segment 触发 flush 流程。
    • #10197 添加定时 flush 触发机制。
    • #10142 在 data node 中应用 flush manager 逻辑。
    • #10075 使用单信号 channel 提示 flush。
    • #9986 添加 flush manager 结构。
  • #10173 添加 binlog 迭代器。
  • #10193 更改 bloom filter 使用 primary key。
  • #9782 为 data node allocator 添加 allocIDBatch

问题修复

  • 当内存资源不足时 collection 加载行为错误:

    • #10796 修复获取 container 内存使用问题。
    • #10800GetContainerMemUsed 中使用 TotalInactiveFile
    • #10603EstimateMemorySize 接口增加兼容。
    • #10363 添加 cgroups 以获取 container 内存并检查 segment loader 中的索引内存。
    • #10294 使用 proto 大小计算请求大小。
    • #9688 使用 descriptor event 估算内存大小。
    • #9681 修复 binlog 存储原始内存大小的方式问题。
    • #9628 在 extra information 中存储 binlog 原始内存大小。
  • etcd 相关请求过大:

    • #10909 修复当存储 segmentInfotxn 操作过多问题。
    • #10812 修复当加载 segment 时请求过大问题。
    • #10768 修复当加载 collection 时请求过大问题。
    • #10655 拆分监听操作。
    • #10587 精简 multiSegmentChangeInfo 为单条信息。
    • #10425 针对使用 VChaninfo 调整 segmentinfo binlog 。
    • #10340 修复 etcd multiSave childTask 失败。
    • #10310 修复分配加载 segment 请求错误。
    • #10125 拆分大型 loadSegmentReq 为多个小型请求。
  • 系统崩溃:

    • #10832 添加查询 mutex 修复崩溃问题。
    • #10821 调整 index node 在 index coord 修改 meta 前完成任务。
    • #10182 修复当 flush segment 时系统崩溃。
    • #10681 修复当更新 querychannelInfo 时 query coord 崩溃。
  • RocksMQ 相关问题:

    • #10367 优雅关闭 retention。
    • #9828 修复 retention 时的数据竞争。
    • #9933 修改 retention ticker time 为 10 分钟。
    • #9694 在删除 RocksMQ metadata 前删除信息。
    • #11029 修复 RocksMQ SeekToLatest 问题。
    • #11057 修复 SeekToLatest 内存泄漏并删除冗余逻辑。
    • #11081 修复 RocksMQ retention 未设定 ts。
    • #11083 为 RocksMQ Seek 添加 topic。
    • #11076 在 retention 过期清理中将 topic lock 移至最终删除之前。
  • #10751indexFilePathInfo 收到空列表时 loadIndex 不断重试。

  • #10583 ParseHybridTs 返回数据类型问题。

  • #10599 删除信息哈希错误。

  • #10314 索引构建任务因 index coord 错误被取消。

  • #9701 CreateAlias/DropAlias/AlterAlias 实现错误。

  • #9573 Data coord 储存 binlog 超时。

  • #9788 监听 channel 因网络问题被取消。

  • #10994 Index node 无法平衡负载。

  • #11152 当使用 Time Travel 搜索时不传过滤条件并调用 num_entities 搜索出错。

  • #11249 #11277 Query node 死锁。

  • #11222 空检索结果处理错误。

v2.0.0-RC7

发布时间:2021-10-11

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本 Node.js SDK 版本
2.0.0-RC7 2.0.0rc7 即将上线 即将上线 {{var.milvus_node_sdk_version}}

Milvus 2.0.0-RC7 是 2.0 的预览版本。该版本支持 collection 别名,PChannel 共享 msgstream,将默认 MinIO 与 Pulsar 依赖更改为分布式版本,并修复了一系列资源泄露、死锁等问题。

由于对存储格式进行了一些更改,Milvus 2.0.0-RC7 与早先的 RC 版本不兼容。

主要改进

  • #8215 为 query coord 中 interTask 添加最大重试次数。

  • #9459 实现 collection 起始位置。

  • #8721 为日志名称添加节点 ID。

  • #8940 将流式 segment 内存添加到 checkLoadMemory 中的已用内存。

  • #8542 使用 proto.Marshal 替换 proto.MarshalTextString

  • #8770 重构 flowgraph 以及相关调用。

  • #8666 更改 CMake 版本。

  • #8653 更新 getCompareOpType

  • #8697 #8682 #8657 开启 segment 时实现 collection 起始位置。

  • #8608 更改 segment 副本结构。

  • #8565 重构缓存大小计算。

  • #8262 添加 segcore 日志记录器。

  • #8138insertBufferNode 中添加 BufferData

  • #7738 实现通过 msgstream 池为创建 collection 分配 msgstream

  • #8054 优化 insertBufferNode 代码。

  • #7909 升级 pulsar-client-go 至 0.6.0 版本。

  • #7913 转移 segcore rows_per_chunk 配置项至 query_node.yaml。

  • #7792LongTermChecker 中删除 ctx

  • #9269 优化表达式写法。

  • #8159 修改 FlushSegments 为异步。

  • #8278 重构 rocksmq 关闭逻辑并优化代码覆盖率。

  • #7797 标注代码参数类型。

新增功能

  • #9579getSystemInfoMetrics 中添加副本缓存大小以及 cacheSize

  • #9556 添加 ProduceMark 接口以返回 message ID。

  • #9554 添加 LoadPartial 接口以支持 DataKV。

  • #9471 支持通过 collection ID 调用 DescribeCollection

  • #9451 将 index 参数存储至 descriptor event。

  • #8574 为搜索功能添加 round_decimal 参数以控制精度。

  • #8947 Rocksmq 支持 SubscriptionPositionLatest

  • #8919 索引文件过大时,拆分为多行字符串。

  • #8914 Binlog 解析器工具支持索引文件。

  • #8514 重构索引文件格式。

  • #8765 添加 cacheSize 以防止 query node 内存资源不足。

  • #8673 #8420 #8212 #8272 #8166 支持多个 Milvus 集群共享 Pulsar 以及 MinIO。

  • #8654Msgstream 添加 BroadcastMark 以返回 Message ID。

  • #8586 将 message ID 返回值添加至 producer 中。

  • #8408 #8363 #8454 #8064 #8480 添加 session 存活检测。

  • #8264 添加 description event 附加内容。

  • #8341 在 root coord 中使用 Marshal 替代 MarshalTextString

  • #8228 支持 healthz 检测 API。

  • #8276 初始化 index node 时初始化 SIMD 类型。

  • #7967 添加 knowhere.yaml 以支持配置 knowhere。

  • #7974 支持设定任务队列最大任务数。

  • #7948 #7975 添加 suffixSnapshot 以实现 SnapshotKV。

  • #7942 支持配置 SIMD 类型。

  • #7814 在搜索以及结构化匹配中支持布尔值过滤器。

  • #7635 支持通过配置文件设定 segcore rows_per_chunk。

问题修复

  • #9572 调用 DeleteRange 后 Rocksdb 不删除 end key。

  • #8735 Acked 信息占用内存资源。

  • #9454 Query service 发生数据竞争。

  • #8850 使用别名删除 collection 时,SDK 报错。

  • #8930 由于从 insertBuf 中即时删除缓冲,导致当 SaveBinlogPath 调用失败时,flush 偶尔会卡住。

  • #8868 跟踪日志捕获错误的文件名和行号。

  • #8844 SearchTask 返回结果为空。

  • #8835 应 pulsar-client-go 存在 bug 导致 Root coord 崩溃。

  • #8780 #8268 #7255 集合别名相关问题。

  • #8744 Rocksdb_kv 错误进程。

  • #8752 mqconsumer 中发生数据竞争。

  • #8686 Auto-flush 之后 flush 无法完成。

  • #8564 #8405 #8743 #8798 #9509 #8884 Rocksdb 内存泄漏。

  • #8671 调用删除之后对象没有被从 MinIO 中删除。

  • #8050 #8545 #8567 #8582 #8562 tsafe 相关问题。

  • #8137 因为 TSO 没有加载最新时间戳导致时间倒退。

  • #8461 Data coord 中可能发生数据竞争。

  • #8386 为 data node 分配 dm channel 的逻辑不完整。

  • #8206 Proxy 搜索任务中结果合并算法错误。

  • #8120 Root coord 中可能发生数据竞争。

  • #8068 当查询结果为空且 retrieve_ret_ 未被初始化时,query node 崩溃。

  • #8060 查询任务崩溃。

  • #8091 Proxy gRPC 客户端发生数据竞争。

  • #8078 Root coord gRPC 客户端发生数据竞争。

  • #7730 CloseRocksMQ 后 topic 和 ConsumerGroup 仍然存在。

  • #8188 释放 collection 逻辑错误。

v2.0.0-RC6

发布时间:2021-09-10

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本 Node.js SDK 版本
2.0.0-RC6 2.0.0rc6 即将上线 即将上线 {{var.milvus_node_sdk_version}}

Milvus 2.0.0-RC6 是 2.0 的预览版本。该版本支持创建 collection 时设定 shard 数量,以及通过表达式进行结构性匹配。 RC5 通过 API 进一步暴露分布式版指标。 在该版本我们增加单元测试覆盖率至 80%,并修复了一系列资源泄露、系统错误等问题。

主要改进

  • 增加单元测试覆盖率至 80%。

新增功能

  • #7482 支持创建 collection 时设定 shard 数量。
  • #7386 支持通过表达式进行结构性匹配。
  • 通过 API 暴露系统指标
    • #7400 Proxy 指标与其他 coordinator 集成。
    • #7177 暴露 data node 以及 data coord 指标。
    • #7228 暴露 root coord 指标。
    • #7472 暴露更多详细指标信息。
    • #7436 支持缓存系统信息指标。

问题修复

  • #7434 加载超过内存上限的 collection 导致 Query node 内存不足。
  • #7678 从现有存储中恢复导致单机版 Milvus 内存不足。
  • #7636 向已关闭的 channel 发送消息导致单机版 Milvus 发生错误。
  • #7631 关闭 flowgraph 导致 Milvus 发生错误。
  • #7605 运行每日 CI 测试时 Milvus 报错崩溃。
  • #7596 Root coord 与 etcd 断联导致每日测试失败。
  • #7557 表达式中内容顺序错误导致系统返回错误结果。
  • #7536 MqMsgStream 查找逻辑错误。
  • #7527 搜索时 knowhere 中数据集内存泄漏。
  • #7444 Channels time ticker 死锁。
  • #7428 MqMsgStream 广播失败时可能出现死锁。
  • #7715 结构性匹配请求被同一 slice 上并发操作覆盖。

v2.0.0-RC5

发布时间:2021-08-30

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本 Nodejs SDK 版本
2.0.0-RC5 2.0.0rc5 即将上线 即将上线 {{var.milvus_node_sdk_version}}

Milvus 2.0.0-RC5 是 2.0 的预览版本。该版本支持 message queue 数据保留机制和 etcd 数据清理,通过 API 暴露分布式版指标,并为后续支持删除操作做准备。 RC5 在系统稳定性方面也取得了很大的进步。 该版本修复了一系列资源泄露、操作卡死、 以及 Milvus 集群下单机 Pulsar 的配置错误等问题。

主要改进

  • #7226 重构 data coord allocator。
  • #6867 添加 connection manager。
  • #7172 添加 seal 策略以限制 segment 的生命周期。
  • #7163 增加创建索引时 gRPC 连接的超时时间。
  • #6996 添加 segment flush 的最小间隔。
  • #6590SegmentInfo 中保存 binlog 路径。
  • #6848 移除 RetrieveRequestRetrieveTask
  • #7102 支持搜索输出向量 field。
  • #7075 重构 NewEtcdKV API.
  • #6965 为 data node 添加 channel 以监听 etcd。
  • #7066 优化搜索聚合逻辑。
  • #6993 针对解析 gRPC 收发参数增强日志系统。
  • #7331 修改 context 至正确的 package。
  • #7278 每 1000 次修订后启用 etcd 自动压缩。
  • #7355 从 util/flowgraph 中清除 fmt.Println

新增功能

  • #7112 #7174 引入嵌入式 etcdKV(第一阶段完成)。
  • #7231 添加 segment filter 接口。
  • #7157 暴露 index coord 和 index nodes 的 metrics 信息。
  • #7137 #7157 通过 proxy 暴露系统拓扑信息。
  • #7113 #7157 暴露 query coord 和 query nodes 的指标信息。
  • #7134 允许用户仅使用内存执行向量搜索。
  • #6617 为 Rocksmq 添加 log 保留策略。
  • #7303 添加 query node segment filter。
  • #7304 在 proto 中添加 delete API。
  • #7261 添加 delete node。
  • #7268 插入数据时搭建 Bloom filter。

问题修复

  • #7272 #7352 #7335 若已创建索引,则无法使用现有 volume 启动新的 Docker 容器:proxy 不健康。
  • #7243 旧版本插入的数据在新版本 Milvus 中创建索引失败。
  • #7253 释放不同的 partition 后,搜索结果为空。
  • #7244 #7227 收到空搜索结果时 proxy 崩溃。
  • #7203 gRPC 服务器关闭时连接卡住。
  • #7188 单元测试逻辑不完整。
  • #7175 未加载的情况下使用 collection ID 计算距离时返回的错误消息不明确。
  • #7151 由于缺少 DropCollection 导致 data node flowgraph 不关闭。
  • #7167 无法加载 IVF_FLAT 索引。
  • #7123 “Timestamp go back” 问题。
  • #7140 使用谷本距离计算相似度时,calc_distance 会返回错误的二元向量结果。
  • #7143 KV 操作失败时,内存和 etcd 的状态不一致。
  • #7141 #7136 当 index node pod 频繁重启时,索引构建会卡住。
  • #7119 当使用相同的 topic 和 sub name 订阅时,Pulsar msgStream 可能会卡住。
  • #6971 使用 HNSW 索引搜索时发生异常。
  • #7104 如果 query node 只加载 sealed segment 而未监听 insert channel,搜索会卡住。
  • #7085 Segment 无法自动 flush。
  • #7074 Index node 等待至 index coord 启动后完成操作。
  • #7061 如果 data coord 没有收到来自 data node 的 timetick 消息,则 segment allocation 不会过期。
  • #7059 Query nodes 发生 producer 泄漏。
  • #7005loadSegmentInternal 失败时,query node 不会向 query coord 返回错误。
  • #7054topk 大于 row_num. 时,query node 返回错误的 ID。
  • #7053 Allocation 逻辑不完整。
  • #7044 在检索本地存储中的向量之前,未对内存中未建索引向量的检查。
  • #6862 Data node 的 flush cache 内存泄露。
  • #7346 重启分布式版 Milvus 后 query coord 容器在一分钟内退出。
  • #7339 表达式边界问题。
  • #7311 添加 queryCollection 时 collection 为空。
  • #7266 Flowgraph 内存释放错误。
  • #7310 释放和加载 partition 后搜索时 timeout 过长。
  • #7320 嵌入式 etcd 和外部 etcd 之间的端口冲突。
  • #7336 Data node 边界情况。

v2.0.0-RC4

发布时间:2021-08-13

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本
2.0.0-RC4 2.0.0rc4 即将上线 即将上线

Milvus 2.0.0-RC4 是 2.0 的预览版本。该版本主要修复了稳定性问题,并新增从对象存储中检索向量数据以及通过通配符匹配指定输出 field 的功能。

主要改进

  • #6984 #6772 #6704 #6652 #6536 #6522 优化单元测试。

  • #6859 提升 gRPC 客户端 MaxCallRecvMsgSizeMaxCallSendMsgSize 的上限。

  • #6796 修复 MsgStream 指数重试策略。

  • #6897 #6899 #6681 #6766 #6768 #6597 #6501 #6477 #6478 #6935 #6871 #6671 #6682 优化日志系统。

  • #6440 重构 segment manager。

  • #6421 创建索引时将原始向量拆分为几个较小的 binlog 文件。

  • #6466 区分 query 和 search 的概念和使用。

  • #6505 将 RetrieveRequest 中 output_fields 修改为 out_fields_id

  • #6427 重构 index coord 的任务分配逻辑。

  • #6529 #6599 重构时间戳统计的快照。

  • #6692 #6343 创建 collection/partition 记录时间信息。

  • #6629 为 etcdKV 添加 WatchWithVersion 接口。

  • #6666 重构 expression executor 以使用单个 bitset。

  • #6664 当分配的行数超过每个 segment 的最大行数时,自动创建新 segment。

  • #6786 重构 RangeExprCompareExpr.

  • #6497 放宽二元向量 field 搜索时的维度下限。

新增功能

  • #6706 支持从磁盘读取向量。

  • #6299 #6598 支持查询向量 field。

  • #5210 扩展布尔表达式的语法。

  • #6411 #6650 搜索/查询输出 field 支持通配符和通配符匹配。

  • #6464 添加向量 chunk manager 以支持向量文件本地存储。

  • #6701 为通过 Docker Compose 部署的 Milvus 添加数据持久化支持。

  • #6767 为 Milvus 添加 Grafana 仪表盘 .json 文件。

问题修复

  • #5443 从 collection 中获取向量时,CalcDistance 返回错误的结果。

  • #7004 Pulsar 消费者导致 goroutine 泄漏。

  • #6946 当 Flow Graph 在 start() 之后立即 close() 时,会发生数据竞争。

  • #6903 在 query coord 中使用 proto marshal 以替代 marshalTextString 来避免由未知 field 名称崩溃触发的崩溃。

  • #6374 #6849 加载 collection 失败。

  • #6977 删除 partition/collection 后,搜索返回错误限制。

  • #6515 #6567 #6552 #6483 Data node BackGroundGC 不运作并导致内存泄漏。

  • #6943 MinIOKV GetObject 方法不会关闭客户端并导致每次调用产生 goroutine 泄漏。

  • #6370 因加载 partition 提供的错误语义导致搜索卡住。

  • #6831 Data node 在元服务中崩溃。

  • #6469 当限制(topK)大于插入 entity 的数量时,使用汉明距离搜索二进制结果错误。

  • #6693 因超时引起的 segment 竞争情况。

  • #6097 短时间内频繁重启 query node 后导致加载卡住。

  • #6464 处理 Data sorter 边界情况。

  • #6419 Milvus 在插入空向量时崩溃。

  • #6477 不同的组件在 MinIO 中重复创建桶。

  • #6377 在部署了多个 query node 的情况下,由于从 etcd 获取的 globalSealedSegment 信息不正确导致 Milvus 集群查询结果返回不完整。

  • #6499 TSO 分配错误的时间戳。

  • #6501 Data node 崩溃后 channel 丢失。

  • #6527 无法从 etcd 中删除 watchQueryChannels 的任务信息。

  • #6576 #6526 检索 entity 时会添加重复的 primary field ID。

  • #6627 #6569 当新记录的距离为 NaN 时,std::sort 无法正常过滤搜索结果。

  • #6655 调用检索任务时 proxy 崩溃。

  • #6762 Collection/partition 的创建时间戳不正确。

  • #6644 Data node 自动重启失败。

  • #6641 与 etcd 断开连接时无法停止 data coord。

  • #6621 在插入的数据大小大于 segment 时,Milvus 抛出异常。

  • #6436 #6573 #6507 时间同步处理不正确。

  • #6732 创建 IVF-PQ 索引失败。

v2.0.0-RC2

发布时间: 2021-07-13

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本
2.0.0-RC2 2.0.0rc2 即将上线 即将上线

Milvus 2.0.0-RC2 是 2.0 的预览版本。该版本修复了 RC1 版本的稳定性和性能问题,并针对节点和存储管理进行了代码重构。

主要改进

  • #6356 Data coordinator 集群代码重构。
  • #6300 Data coordinator 元数据管理代码重构。
  • #6289 SegmentIndexInfo 新增 collectionIDpartitionID 信息。
  • #6258 调用 releaseCollection() 方法时清除 proxy 中对应的 searchMsgStream
  • #6227 合并 query node 召回和查询的相关代码。
  • #6196 Data coordinator 新增候选管理,用于维护管理 data node 集群。
  • #6188 新增“使用 Docker Compose 安装”的相关技术文档。

新增功能

  • #6386 支持调用 fget_object() 方法从 MinIO 加载文件到本地设备。
  • #6253 支持在 data coordinator 调用 GetFlushedSegments() 方法。
  • #6213 新增 GetIndexStates() 方法。

问题修复

  • #6184 数据集规模增加导致查询准确性下降。
  • #6308 NSG 索引的 KNNG 参数未达到满值会导致服务器崩溃。
  • #6212 Query node 重启后查询操作宕机。
  • #6265 服务器检测到节点在线后不检查节点状态。
  • #6359 #6334 在 CentOS 系统上编译 Milvus 出现编译错误。

v2.0.0-RC1

发布时间:2021-06-28

版本兼容

Milvus 版本 Python SDK 版本 Java SDK 版本 Go SDK 版本
2.0.0-RC1 2.0.0rc1 即将上线 即将上线

Milvus 2.0.0-RC1 是 2.0 的预览版本。 该版本引入 Go 语言搭建分布式系统,并采用了新的云原生分布式设计。 后者大大提高了系统扩展性和系统弹性。

系统架构

Milvus 2.0 是一款云原生向量数据库,采用存储与计算分离的架构设计。该重构版本的所有组件均为无状态组件,极大地增强了系统弹性和灵活性。

整个系统分为四个层面:

  • 接入层(Access Layer)
  • 协调服务(Coordinator Service)
  • 执行节点(Worker Node)
  • 存储服务 (Storage)

接入层Access Layer:系统的门面,包含了一组对等的 proxy 节点。接入层是暴露给用户的统一 endpoint,负责转发请求并收集执行结果。

协调服务(Coordinator Service):系统的大脑,负责分配任务给执行节点。总共有四类协调者角色,分别为 root 协调者、data 协调者、query 协调者和 index 协调者。

执行节点(Worker Node): 系统的四肢。执行节点只负责被动执行协调服务发起的读写请求。目前有三类执行节点,即 data 节点、query 节点和 index 节点。

存储服务(Storage): 系统的骨骼,是所有其他功能实现的基础。Milvus 依赖三类存储:元数据存储、消息存储(Log Broker)和对象存储。

更多系统原理的相关内容详见 Milvus 2.0 架构

新增功能

SDK

  • PyMilvus

    PyMilvus API 直接在 collection、partion 和 index 对象上进行操作。用户可专注于搭建业务数据模型,而不必担心具体实现。

核心功能

  • 标量和向量数据混合查询

    Milvus 2.0 支持存储标量数据。支持使用大于、小于、等于、NOT、IN、AND、OR 等运算符在向量搜索之前进行标量过滤。 当前支持的数据类型包括 bool、int8、int16、int32、int64、float 和 double。 后期版本将逐步支持字符串和 VARBINARY 数据类型。

  • 匹配查询(Match Query)

    与返回相似结果的搜索操作不同,匹配查询操作返回完全匹配表达式的对象,可用于按 primary key 或按搜索条件查询向量。

  • 多一致性

  • 分布式数据库需在一致性与可用性以及一致性与延迟之间进行权衡。 Milvus 提供四种一致性级别,从强到弱分别为:强一致性(Strong)、有界一致性(Bounded Staleness)、会话一致性(Session) 、前缀一致性(Consistent Prefix)。 用户可以通过指定时间戳自定义读取一致性。 一般情况下,一致性级别越弱,可用性越高,性能也越好。

  • 时间旅行(Time Travel)

    通过时间旅行可以访问指定时间段内任意时刻的历史数据。用户可使用该功能查询、恢复和备份历史数据。

其他

  • 支持基于 helm 和 docker-compose 一键部署 Milvus 2.0。

  • 使用 Prometheus 和 Grafana 实现数据监测和报警功能。

  • Milvus Insight

    Milvus Insight 是 Milvus 图形化管理工具,包含了集群状态可视化、元数据管理、数据查询等实用功能。Milvus Insight 源码未来也会作为独立项目开源。

不兼容改动

Milvus 2.0 使用的编程语言、数据格式以及分布式架构都与之前的版本完全不同,这意味着不能从之前的 Milvus 版本升级到 2.x 版本。不过,Milvus 1.x 是长期支持版本(LTS),相关的数据迁移工具将尽快上线。

具体改动如下:

  • 暂不支持 JAVA、Go 和 C++ SDK。

  • 暂不支持删除和更新操作。

  • PyMilvus 不支持 force flush。

  • 数据格式与之前版本不兼容。

  • 废弃 Mishards —— Milvus 2.0 为分布式架构,无需分片中间件。

  • 暂不支持本地文件存储和分布式系统存储。