2017-05-31 65 views
0

在分布式容错系统中,冲突解决方案至关重要,因为同一日期的多个副本将被镜像,并且任何请求可在写入时同时前往任何节点。documentdb中的冲突解决方案

我之前使用过Riak和Cassandra。 Riak基于矢量时钟工作,我们可以决定系统自动执行还是用户必须处理它的冲突解决方案,通常在敏感日期用户不希望系统决定保留哪一次以及哪一次放弃。与Cassandra一样,它基于时间戳。

因此,根据cosomosdb的考虑,我们有从强到最终的各种一致性级别。基于一致性的选择,系统可能会生成兄弟姐妹。

Q1。所以我的第一个问题是兄弟姐妹处理以及冲突解决方案是如何发生的。有没有办法以编程方式处理来自用户方的兄弟姐妹,而不是由系统决定哪一方保留以及哪一方在兄弟姐妹情况下丢弃。 Q2302。第二个问题就像Riak和Cassandra中的矢量时钟和时间戳记documentdb中的机制是什么。

回答

2

Cosmos DB采用单主写入分区键范围。不管一致性级别如何,写入都保证没有冲突。写区域自动故障切换期间唯一发生冲突的可能性。这种情况在此处更详细地解释https://docs.microsoft.com/en-us/azure/cosmos-db/regional-failover

在写入区域故障转移的情况下,任何未复制的写入都将被注册为冲突。应用程序可以执行此记录的手动合并。以下是ConflictFeedAsync的详细信息https://msdn.microsoft.com/en-us/library/microsoft.azure.documents.client.documentclient.readconflictfeedasync.aspx

+1

我要补充的一件事是CosmoDB对eTags进行了乐观的并发。每次更新应包含上次读取的电子标签,如果电子标签不匹配,则意味着它在读取和更新之间再次更新。 –

+0

在这个笔记上,如果你想实现与eTags的乐观并发,这里是一个[扩展](https://github.com/ealsur/concurrentdocdb),如果你在.Net(Full framework或Core ) –

+0

有没有描述CosmosDB单主写入和相关主题的链接? – Mikhail