twe*_*ypi 2 azure azure-cosmosdb
我有一个带有 UserData 集合的 Azure Cosmos DB,其中包含多个用户文档。
这些文档通过 azure 函数进行编辑,该函数获取文档,将 json 解析为类,根据需要编辑类,然后将其设置回用户文档。
那么,如果在执行该操作时调用另一个 azure 函数,从 Azure Cosmos DB 抓取文档并在第一个函数完成之前进行其他更改,会怎么样?即使它更改了文档中完全独立的字段,其他字段仍然保持不变,并且 Azure 没有明显的方法来知道要覆盖哪些字段以及要保留哪些字段。
处理此问题的唯一方法是,对文档的请求要等到首先请求它的函数完成请求后,但我又不知道 Azure 如何解决这个问题。
默认情况下,Cosmos DB 不会阻止此行为,但您可以通过实施optimistic concurrency using etag.
本质上,您要做的就是每当发送文档更新请求时,都将文档的 etag 与请求一起发送。如果 etag 与服务器上文档的 etag 值匹配,则更新请求将成功,否则将失败(应该带有 419 状态代码,但文档没有提到这一点)。如果出现故障,您可以获取最新文档(及其 etag)、更新它并再次发送更新后的文档。
来自Replace a DocumentREST API 文档(请参阅请求标头部分):
如果匹配
字符串 用于为乐观并发设置操作条件。即,仅当指定的 etag 与数据库中的当前版本匹配时,文档才会更新。该值应设置为资源的 etag 值。
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |