了解 Milvus 向量数据库中的一致性级别(第二部分)

了解 Milvus 向量数据库中的一致性级别(第二部分)

剖析 Milvus 矢量数据库中可调一致性级别背后的机制。

Cover_image

本文由 Jiquan Long 并由 安吉拉妮 .

在里面 以前的博客 关于一致性,我们讲解了分布式向量数据库中一致性的内涵,涵盖了 Milvus 向量数据库中的强、有界陈旧、会话、最终支持四个级别的一致性,并说明了最适合的应用场景。每个一致性级别。

在这篇博文中,我们将继续探究 Milvus 矢量数据库用户能够灵活选择适合各种应用场景的理想一致性级别的背后机制。我们还将提供有关如何在 Milvus 矢量数据库中调整一致性级别的基础教程。

跳到:

∘ 底层时间刻度机制
∘ 保证时间戳
∘ 一致性级别
∘ 如何在 Milvus 中调整一致性级别?

底层时间刻度机制

Milvus 在进行向量搜索或查询时使用时间刻度机制来确保不同级别的一致性。 Time Tick 是 Milvus 的水印,在 Milvus 中就像一个时钟,表示 Milvus 系统在哪个时间点。每当有数据操作语言(DML)请求发送到 Milvus 矢量数据库时,它都会为 Milvus 分配一个时间戳。请求。如下图所示,比如在消息队列中插入新数据时,Milvus 不仅会在这些插入的数据上打上时间戳,还会每隔一段时间插入时间滴答。

timetick

让我们来 同步Ts1 以上图中为例。当下游消费者喜欢查询节点看到 同步Ts1 ,消费者组件明白所有插入的数据早于 同步Ts1 已被消耗。也就是说,时间戳值小于的数据插入请求 同步Ts1 将不再出现在消息队列中。

保证时间戳

如上一节所述,查询节点等下游消费者组件不断地从消息队列中获取数据插入请求和时间滴答的消息。每消耗一个时间滴答,查询节点会将这个消耗的时间滴答标记为可服务时间—— 服务时间 以及之前插入的所有数据 服务时间 对查询节点可见。

此外 服务时间 , Milvus 还采用了一种时间戳——保证时间戳( 保证TS ) 以满足不同用户对不同级别的一致性和可用性的需求。这意味着 Milvus 矢量数据库的用户可以指定 保证 为了通知查询节点之前的所有数据 保证 在进行搜索或查询时,应该是可见的并参与其中。

查询节点在 Milvus 矢量数据库中执行搜索请求时,通常有两种场景。

场景一:立即执行搜索请求

如下图所示,如果 保证 小于 服务时间 ,查询节点可以立即执行搜索请求。

execute_immediately

场景2:等到“ServiceTime > GuaranteeTs”

如果 保证 大于 服务时间 ,查询节点必须继续从消息队列中消耗时间tick。搜索请求无法执行,直到 服务时间 大于 保证 .

wait_search

一致性级别

因此, 保证 可在搜索请求中进行配置,以达到您指定的一致性级别。一个 保证 具有较大的价值确保 强一致性 以高搜索延迟为代价。还有一个 保证 较小的值会减少搜索延迟,但会损害数据可见性。

保证 在 Milvus 中是一种混合时间戳格式。并且用户不知道 技术支持办公室 在 Milvus 内部。因此,指定的值 保证 对用户来说是一项过于复杂的任务。为了给用户省去麻烦,提供最佳的用户体验,Milvus 只需要用户选择具体的一致性级别,Milvus 矢量数据库会自动处理 保证 对用户的价值。也就是说,Milvus 用户只需要从四个一致性级别中进行选择: 强的 , 有界 , 会议 , 和 最终 .并且每一个一致性级别对应于一定的 保证 价值。

下图说明了 保证 对于 Milvus 矢量数据库中的四个一致性级别中的每一个。

guarantee_ts

Milvus 矢量数据库支持四个级别的一致性:

  • 一致性_STRONG 保证 设置为与最新的系统时间戳相同的值,查询节点等到服务时间前进到最新的系统时间戳才处理搜索或查询请求。
  • CONSISTENCY_EVENTUALLY 保证 设置为比最新的系统时间戳略小的值,以跳过一致性检查。查询节点立即搜索现有数据视图。
  • CONSISTENCY_BOUNDED 保证 被设置为一个相对小于最新系统时间戳的值,并且查询节点在可容忍的更新数据视图上搜索。
  • 一致性_会话 :客户端使用最后一次写操作的时间戳作为 保证 这样每个客户端至少可以检索到自己插入的数据。

如何在 Milvus 中调整一致性级别?

Milvus 支持在以下情况下调整一致性级别 创建一个集合 或进行 搜索 或者 询问 .

进行向量相似性搜索

要以所需的一致性级别进行向量相似性搜索,只需设置参数的值 一致性级别 作为 强的 , 有界 , 会议 , 或者 最终 .如果不设置参数的值 一致性级别 , 一致性水平为 有界 默认。该示例使用以下方法进行向量相似性搜索 强的 一致性。

 结果=集合.搜索(  
 数据=[[0.1, 0.2]],  
 anns_field="book_intro",  
 参数=搜索参数,  
 限制=10,  
 expr=无,  
 一致性级别=“强”  
 )

进行矢量查询

与进行向量相似度搜索类似,您可以指定参数的值 一致性级别 在进行向量查询时。该示例使用以下方式进行向量查询 强的 一致性。

 资源=集合.查询(  
 expr = "[2,4,6,8] 中的 book_id",  
 output_fields = ["book_id", "book_intro"],  
 一致性级别=“强”  
 )

下一步是什么

随着 Milvus 2.1 的正式发布,我们准备了一系列介绍新特性的博客。在此博客系列中阅读更多内容:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/35152/20001400

posted @ 2022-09-14 00:20  哈哈哈来了啊啊啊  阅读(670)  评论(0编辑  收藏  举报