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

Document DB - ETag Optimistic Concurrency with Session Consistency

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

假设 Write:B 失败,因为 etag 是 2,但我没有找到任何 explicit 文档来说明 DocumentDB 读取 etag 的地方有什么保证来自服务器上的值,例如,它能否从 etag 仍为 1 的辅助副本读取,并让 Write:B 仍然通过 ?

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


网络文档

来自常见问题 https://docs.microsoft.com/en-us/azure/documentdb/documentdb-faq

来自示例来源(暗示但未声明这在所有一致性级别都适用?)https://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/code-samples/DocumentManagement/Program.cs

这里是 DocumentDB 团队成员。确认 Larry 的回复,即所有一致性级别都将强制执行带有 ETag 的条件写入。写入请求必须包含 ETag(REST 中的 If-Match header,.NET 中的 RequestOptions.AccessCondition)。

编辑于 2019 年 7 月 29 日,帐户配置为 multi-region 写入,无法保证 ETag 与 multi-region 作者,并且您有通过冲突解决程序解决并发写入。 ETag 验证仍然适用于 single-region 写入帐户,和以前一样。