azure - 带有文档的 Azure CosmosDB 如何避免同时编辑单个文档?

标签 azure azure-cosmosdb

我有一个 Azure Cosmos DB,其中包含一个 UserData 集合,其中包含多个用户文档。

通过 azure 函数编辑文档,该函数获取文档,将 json 解析为类,根据需要编辑类,然后将其设置回用户文档。

那么,如果在执行该操作时调用另一个 azure 函数,从 Azure Cosmos DB 抓取文档并在第一个函数完成之前进行其他更改,会怎么样?即使它更改了文档中完全独立的字段,其他字段仍然保持不变,并且 Azure 没有明显的方法来知道要覆盖哪些字段以及要保留哪些字段。

处理此问题的唯一方法是,对文档的请求要等到首先请求它的函数完成请求后,但我又不知道 Azure 如何解决这个问题。

最佳答案

默认情况下,Cosmos DB 不会阻止此行为,但您可以通过使用 etag 实现乐观并发来控制这种行为。

本质上,您要做的就是每当发送文档更新请求时,都将文档的 etag 与请求一起发送。如果 etag 与服务器上文档的 etag 值匹配,则更新请求将成功,否则将失败(应该带有 419 状态代码,但文档没有提到这一点)。如果失败,您可以获取最新的文档(及其 etag),更新它并再次发送更新的文档。

来自Replace a Document REST API 文档(请参阅请求 header 部分):

If-Match

String Used to make operation conditional for optimistic concurrency. i.e. the document is updated only if the specified etag matches the current version in the database. The value should be set to the etag value of the resource.

关于azure - 带有文档的 Azure CosmosDB 如何避免同时编辑单个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49376834/

相关文章:

azure - 当出站 TCP 端口耗尽时,消费计划中的 Azure Functions 会如何表现?端口限制是多少?

Azure B2C - 使用非英语电子邮件地址登录

azure - 在云服务中部署/配置多个虚拟机

asp.net-core - 在 Microsoft.Azure.Cosmos.Client 上启用跨分区查询

Windows Azure 应用程序 - 黑客尝试?

azure - 一个 Cosmos DB 查询中的 TOP 和 DISTINCT

database - Azure Cosmos DB 中的行级安全性

java - 在云被阻止的环境中使用 azure cosmos db 模拟器进行开发

nosql - 宇宙数据库 : collection & atomic counter

c# - Azure Key Vault API 的有效 WebKeyType 列表是什么