milvus-logo
LFAI
首页
  • 概念

一致性

本主题介绍 Milvus 的四种一致性级别及其最适合的应用场景。本主题还将介绍 Milvus 中确保一致性的机制。

概述

分布式数据库中的一致性是指确保每个节点或副本在给定时间写入或读取数据时具有相同数据视图的属性。

Milvus 支持四种一致性级别:强、有约束的僵化、会话和最终。Milvus 的默认一致性级别是有界滞后。 在进行单向量搜索混合搜索查询时,您可以轻松调整一致性级别,使其最适合您的应用。

一致性级别

根据PACELC定理的定义,分布式数据库必须在一致性、可用性和延迟之间进行权衡。高一致性意味着高准确性,但也意味着高搜索延迟,而低一致性则会导致快速搜索,但会损失一定的数据可见性。因此,不同级别的一致性适合不同的应用场景。

下面将解释 Milvus 支持的四种一致性级别的区别,以及它们各自适合的场景。

强是最高、最严格的一致性级别。它确保用户可以读取最新版本的数据。

Strong consistency 强一致性

根据 PACELC 定理,如果将一致性级别设置为强,延迟会增加。因此,我们建议在功能测试时选择强一致性,以确保测试结果的准确性。强一致性也最适合那些以牺牲搜索速度为代价、对数据一致性有严格要求的应用。处理订单付款和账单的在线财务系统就是一个例子。

有界滞后

有界僵化,顾名思义,允许数据在一定时间内不一致。不过,一般来说,在这段时间之外,数据始终是全局一致的。

Bounded staleness consistency 有界滞后一致性

有界滞后性适用于需要控制搜索延迟并能接受零星数据不可见的情况。例如,在视频推荐引擎等推荐系统中,数据不可见有时对总体召回率影响较小,但却能显著提升推荐系统的性能。

会话

会话确保所有数据写入都能在同一会话中立即被读取。换句话说,当你通过一个客户端写入数据时,新插入的数据可立即被搜索到。

Session consistency 会话一致性

我们建议在对同一会话中数据一致性要求较高的情况下选择会话作为一致性级别。例如,从图书馆系统中删除图书条目的数据,在确认删除并刷新页面(不同的会话)后,搜索结果中将不再显示该图书。

最终

读取和写入的顺序没有保证,如果不再进行写入操作,副本最终会趋同于相同的状态。在 "最终 "一致性下,副本会使用最新更新的值开始处理读取请求。最终一致性是四种一致性中最弱的一种。

Eventual consistency 最终一致性

然而,根据 PACELC 定理,牺牲一致性可以大大缩短搜索延迟。因此,最终一致性最适用于对数据一致性要求不高但需要极快搜索性能的情况。举个例子,使用最终一致级别检索亚马逊产品的评论和评分。

保证时间戳

Milvus 通过引入保证时间戳(GuaranteeTs)来实现不同的一致性级别。

GuaranteeTs 的作用是通知查询节点,在查询节点能看到 GuaranteeTs 之前的所有数据之前,不会执行搜索或查询请求。指定一致性级别时,一致性级别将映射到特定的 GuaranteeTs 值。不同的 GuaranteeTs 值对应不同的一致性级别:

  • :GuaranteeTs 设置为与最新的系统时间戳相同,查询节点要等到可以看到最新系统时间戳之前的所有数据后,才会处理搜索或查询请求。

  • 有界滞后:GuaranteeTs 设置为相对小于最新系统时间戳,查询节点在可容忍的、更新较少的数据视图上进行搜索。

  • 会话:客户端使用最新写入操作的时间戳作为 GuaranteeTs,这样每个客户端至少都能检索到同一客户端插入的数据。

  • 最终:将 GuaranteeTs 设为很小的值,以跳过一致性检查。查询节点会立即在现有数据视图上进行搜索。

有关确保 Milvus 不同级别一致性背后机制的更多信息,请参阅GuaranteeTs 如何工作

下一步

翻译自DeepLogo

反馈

此页对您是否有帮助?