选择适当的一致性级别

已完成

每个一致性模型都可用于特定的实际场景。 每个模型都提供精确的可用性和性能权衡,并享受全面的 SLA 支持。 以下简单的注意事项将有助于你在许多常见方案中做出正确的选择。

配置默认一致性级别

随时都可在 Azure Cosmos DB 帐户中配置默认的一致性级别。 在帐户中配置的默认一致性级别适用于该帐户下的所有 Azure Cosmos DB 数据库和容器。 针对某个容器或数据库发出的所有读取和查询默认使用指定的一致性级别。

读取一致性适用于逻辑分区范围内的单个读取操作。 读取操作可能由远程客户端或存储过程发出。

与一致性级别关联的保证

Azure Cosmos DB 可保证 100% 的读取请求满足所选一致性级别的一致性保证。 azure-cosmos-tla GitHub 存储库中提供了 Azure Cosmos DB 中使用 TLA+ 规范语言精确定义的五个一致性级别。

非常一致性

非常一致性提供可线性化保证。 可线性化是指并发处理请求。 保证读取操作返回项的最新提交版本。 客户端永远不会看到未提交或不完整的写入。 始终保证用户读取最新确认的写入。

有限过期一致性

在有限过期一致性中,任何两个区域之间的数据延迟始终小于指定量。 数量可以是“K”个项版本(即“更新”)或“T”时间间隔,以先达到者为准。 换言之,如果选择有限过期,则可以通过两种方式配置任何区域中数据的最大“过期”值:

  • 项的版本数 (K)
  • 时间间隔 (T) 读取操作可以滞后于写入操作

有限过期主要有利于具有两个或更多区域的单区域写入帐户。 如果某个区域中的数据延迟(按物理分区确定)超过了配置的过期值,将会限制该分区的写入,直到过期值重新处于配置的上限范围内。

对于单区域帐户,有限过期提供与会话和最终一致性相同的写入一致性保证。 使用有限过期,数据会复制到单区域中的本地多数副本(包含四个副本的副本集中的三个副本)。

会话一致性

在会话一致性的单个客户端会话中,可以保证读取遵守“读取你的写入内容”和“读取后写入”。 这保证采用单个“写入器”会话,或者多个写入器共享会话令牌。

与所有弱于非常一致性的级别一样,写入内容将复制到本地区域中的至少三个副本(在包含四个副本的集中),并异步复制到所有其他区域。

一致前缀一致性

在一致的前缀中,作为单个文档写入进行的更新将实现最终一致性。 对于在事务中作为批处理进行的更新,返回时将与提交它们的事务一致。 多文档事务中的写入操作始终一起可见。

假设在事务 T1 和 T2 中对文档 Doc1 和 Doc2 执行两个写入操作。 当客户端在任何副本中执行读取操作时,用户将看到“Doc1 v1 和 Doc2 v1”或“Doc1 v2 和 Doc2 v2”,但在同一个读取或查询操作中绝不会看到“Doc1 v1 和 Doc2 v2”或“Doc1 v2 和 Doc2 v1”。

最终一致性

对于最终一致性,不保证读取的顺序。 如果缺少任何进一步的写入,则副本最终会收敛。

最终一致性是最弱的一致性形式,因为客户端可能会读取比之前读取的值还要旧的值。 最终一致性非常适合于应用程序不需要任何顺序保证的情况。 示例包括转推、点赞或无回复评论的计数