Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure CosmosDB with documents如何避免同时编辑单个文档?_Azure_Azure Cosmosdb - Fatal编程技术网

Azure CosmosDB with documents如何避免同时编辑单个文档?

Azure CosmosDB with documents如何避免同时编辑单个文档?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我有一个Azure Cosmos数据库,其中包含多个用户文档的UserData集合 文档通过azure函数进行编辑,azure函数获取文档,将json解析为类,根据需要编辑类,并将其设置回用户文档 那么,如果另一个azure函数在执行时被称为从azure Cosmos DB抓取文档,并在第一个函数完成之前进行其他更改,该怎么办?即使它在文档中完全改变了单独的字段,其他字段仍然保持不变,Azure也没有明显的方法知道要覆盖哪些字段以及要保留哪些字段 处理这种情况的唯一方法是,如果文档的请求一直等到

我有一个Azure Cosmos数据库,其中包含多个用户文档的UserData集合

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

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


处理这种情况的唯一方法是,如果文档的请求一直等到请求它的函数完成请求,但我不知道Azure如何解决这个问题。

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

本质上,您将要做的是,无论何时发送文档更新请求,您都会随请求一起发送文档的etag。如果etag与服务器上文档的etag值匹配,则更新请求将成功,否则将失败(应为419状态代码,但文档未提及)。如果失败,您可以获取最新文档(及其etag),对其进行更新,然后再次发送更新后的文档

来自REST API文档(请参阅请求头部分):

如果匹配

用于使操作具有乐观并发条件的字符串。 i、 e.仅当指定的etag与 数据库中的当前版本。该值应设置为etag 资源的价值


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

本质上,您将要做的是,无论何时发送文档更新请求,您都会随请求一起发送文档的etag。如果etag与服务器上文档的etag值匹配,则更新请求将成功,否则将失败(应为419状态代码,但文档未提及)。如果失败,您可以获取最新文档(及其etag),对其进行更新,然后再次发送更新后的文档

来自REST API文档(请参阅请求头部分):

如果匹配

用于使操作具有乐观并发条件的字符串。 i、 e.仅当指定的etag与 数据库中的当前版本。该值应设置为etag 资源的价值