Milvus 于 2019 年开源,主要用于存储、索引和管理通过深度神经网络和机器学习模型产生的海量向量数据。
Milvus 向量数据库专为向量查询与检索设计,能够为万亿级向量数据建立索引。与传统关系型数据库不同,Milvus 主要用于自下而上地处理非结构化数据向量。非结构化数据没有统一的预定义模型,因此可以转化为向量。
随着互联网不断发展,电子邮件、论文、物联网传感数据、社交媒体照片、蛋白质分子结构等非结构化数据已经变得越来越普遍。如果想要使用计算机来处理这些数据,需要使用 embedding 技术将这些数据转化为向量。随后,Milvus 会存储这些向量,并为其建立索引。Milvus 能够根据两个向量之间的距离来分析他们的相关性。如果两个向量十分相似,这说明向量所代表的源数据也十分相似。
版本兼容
Milvus 版本 | Python SDK 版本 | Java SDK 版本 | Go SDK 版本 | Node SDK 版本 |
2.0.0-RC8 | 2.0.0rc8 | 即将上线 | 即将上线 | 1.0.18 |
Milvus 2.0.0-RC8 是 2.0.0-GA 的最后一个预览版本。在该版本中,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 设定默认 gracefulTime
为 0
。
#9860 将 liveChn
隐藏至 sessionutil
并修复存活初始化顺序。
#7115 使用 etcd 监听 data node。
#7606 使 knowhere
独立编译。
新增功能
问题修复
当内存资源不足时 collection 加载行为错误:
- #10796 修复获取 container 内存使用问题。
- #10800 在
GetContainerMemUsed
中使用 TotalInactiveFile
。
- #10603 为
EstimateMemorySize
接口增加兼容。
- #10363 添加
cgroups
以获取 container 内存并检查 segment loader 中的索引内存。
- #10294 使用 proto 大小计算请求大小。
- #9688 使用 descriptor event 估算内存大小。
- #9681 修复 binlog 存储原始内存大小的方式问题。
- #9628 在 extra information 中存储 binlog 原始内存大小。
etcd 相关请求过大:
#10909 修复当存储 segmentInfo
时 txn
操作过多问题。
#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 移至最终删除之前。
#10751 当 indexFilePathInfo
收到空列表时 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 空检索结果处理错误。
相关链接: