"absence of any further writes" 在 documentDb 最终一致性模型中意味着什么?

What does "absence of any further writes" mean in documentDb eventual consistency model?

documentDb 文档(位于 https://docs.microsoft.com/en-us/azure/documentdb/documentdb-consistency-levels)包含以下信息:

最终: 最终一致性保证在没有任何进一步写入的情况下,组内的副本最终会收敛。

没有任何进一步的写入是什么意思?

假设我将我的写操作表示为 W(x, s1, t1),其中 x 是 record/document,在时间 1 将其更新为状态 1。这是我的写事件序列:

W(A, s1, t1), W(B, s1, t1), W(B, s2, t2), W(C, s1, t3) where t1 < t2 < t3 with t3-t1 = 100 毫秒(比方说)。

1) 对每个记录 A、B、C 的更改传播到其他副本是否独立开始?如果是这样,每条记录是否有等待期来检测给定记录的更新流?

2) 每个记录 A、B、C 的更改传播到其他副本是否仅在 t3 之后的某个时间 (tn) 之后才开始(这表示写入结束)?

3) 假设我只有 W(A, s1, t1) 并且不再为任何记录写入任何事件,通常传播需要多长时间记录所有副本的更改? (AWS Dynamodb 声称这不到一秒;我没有发现任何针对 documentDb 的此类声明

这个想法是,当您写入一些数据时,会有一些时间延迟,直到所有副本都应用了相同的操作。

因此,对于您写入数据的任何给定时间点,可能会有一个或多个副本稍微不同步。

当文档提到“absence of any further writes”时,它只是在说,如果你完成了一组文档的编写,并且有一段时间没有写任何其他内容,最终所有副本都将处于完全相同的状态。每个副本最终彼此一致。相反:如果你一直在写,并且从未停止写,那么你的个人副本很可能总是与你刚刚写的主文件略有不同步(关于你刚刚写的最新文档)。

TL;DR 文档只是试图说明写入后数据如何保持一致。

DocumentDB 中的复制没有内置的内在延迟。在单区域配置中,实际上副本之间最多有几毫秒的延迟。在多区域设置中,它与区域之间的网络 ("speed of light") 滞后加上一些计算开销有关。

文档说 "some time" 的原因是因为这种滞后取决于您的拓扑和网络分区。在网络分区的情况下,最终一致性有利于可用性而不是一致性(陈旧性),因此副本可能会落后。

DocumentDB 的最终一致性实现保证了非常高的一致性读取概率(参见 http://pbs.cs.berkeley.edu/)。如果你想要更强的保证,你可以选择 Session、BoundedStaleness 或 Strong 等一致性级别。