我最近开始阅读 Cosmos DB 的一些内容,发现它们有 5 种一致性设置,从强一致到最终一致以及介于两者之间的所有内容。
假设我选择了一个高度一致的设置。现在,如果我更新社会安全号码为 123-45-6789 的人的地址,然后我立即尝试阅读它,它会阻止我,直到它更新大部分副本?或者它只会给我旧数据,直到所有所需的副本数量都更新完毕?
作为一个后续问题,如果它没有阻止我,是什么让强一致性数据库的延迟上升?
我最近开始阅读 Cosmos DB 的一些内容,发现它们有 5 种一致性设置,从强一致到最终一致以及介于两者之间的所有内容。
假设我选择了一个高度一致的设置。现在,如果我更新社会安全号码为 123-45-6789 的人的地址,然后我立即尝试阅读它,它会阻止我,直到它更新大部分副本?或者它只会给我旧数据,直到所有所需的副本数量都更新完毕?
作为一个后续问题,如果它没有阻止我,是什么让强一致性数据库的延迟上升?
在更新所有所需数量的副本之前,它会只给我旧数据吗?
根据cosmos db 一致性文档中的说明:
强一致性提供了线性化保证。保证读取返回项目的最新提交版本。客户端永远不会看到未提交或部分写入。始终保证用户阅读最新提交的写入。
所以,我认为根据 CAP 定理,延迟是可以预测的。毕竟强一致性是以延迟为代价的,保证了高度的数据一致性。
如果您的场景可以接受,以上链接建议的会话一致性级别更平衡。它提供与最终一致性相当的写入延迟、可用性和读取吞吐量,但也提供适合编写运行的应用程序需求的一致性保证在用户的上下文中。