文档DB - 具有会话一致性的ETag乐观并发

时间:2016-11-17 18:27:41

标签: azure azure-cosmosdb

如果我有一个具有会话一致性的DocumentDB数据库,那么使用etags对同一文档的并发写入有什么保证?例如,A和B在不同的会话中运行:

  • 阅读:A - etag:1
  • 阅读:B - etag:1
  • 写:A - etag:1(匹配,etag = 2)
  • 写:B - etag:1?

假设是:写入:B失败,因为etag是2,但我没有找到任何显式文档,以确保DocumentDB从服务器上读取etag值的位置是什么in,是否可以从etag仍为1的辅助副本中读取,让Write:B仍然通过

这个问题Session Guarantee on DocumentDB在评论中讨论了这个问题,但似乎没有得出结论。

网络文档

来自常见问题解答https://docs.microsoft.com/en-us/azure/documentdb/documentdb-faq enter image description here

从示例源(暗示,但未说明,这在所有一致性级别都适用?)https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/code-samples/DocumentManagement/Program.csenter image description here

1 个答案:

答案 0 :(得分:6)

DocumentDB团队成员。确认Larry的答复,即对所有一致性级别强制执行使用ETag的条件写入。写请求必须包括ETag(REST中的If-Match标头,.NET中的RequestOptions.AccessCondition)。