什么"没有任何进一步的写入"在documentDb最终一致性模型中意味着什么?

时间:2017-04-21 20:29:50

标签: azure azure-cosmosdb

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

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

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

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

W(A,s1,t1),W(B,s1,t1),W(B,s2,t2),W(C,s1,t3)其中t1 <1。 t2&lt; t3,t3-t1 = 100毫秒(比如说)。

1)每个记录A,B,C的其他副本的变化是否独立开始?如果是这样,是否每个记录都有一个等待时间来检测给定记录的更新流?

2)每个记录A,B,C的变化传播是否仅在t3之后的某个时间(tn)之后开始(表示写入结束)?

3)假设我只有W(A,s1,t1)并且不再为任何记录写任何事件,通常传播记录A需要多长时间所有复制品? ( AWS Dynamodb声称这是一秒钟;我没有找到任何对documentDb 的索赔)

2 个答案:

答案 0 :(得分:2)

DocumentDB中的复制没有内置的内在延迟。在单区域配置中,实际上在副本之间最多只有几毫秒的延迟。在多区域设置中,它涉及网络(&#34;光速和#34;)区域之间的滞后加上一些计算开销。

文档说&#34;有些时间&#34;是因为这种延迟取决于您的拓扑和网络分区。在网络分区的情况下,最终的一致性有利于可用性而不是一致性(陈旧性),因此副本可能落后。

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

答案 1 :(得分:0)

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

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

当文档提到“没有任何进一步的写入”时,它只是说,如果你完成了一组文档的编写,并且暂时没有写任何其他内容,最终所有副本都会处于完全相同的状态。每个副本最终彼此一致。相反:如果你继续写作,并且从不停止写作,那么你的个人副本可能总是与你刚写的主人略有不同步(关于你刚写的最新文件)。

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