DocumentDB上的并发

JVe*_*len 6 azure azure-cosmosdb

这是DocumentDB上的一个新问题.我们希望将DocumentDB用于我们的应用程序.我们有多个用户更改存储在DocumentDB中的数据.我们怎样才能确保一个用户不会覆盖另一个用户的更改?

Dav*_*gon 17

DocumentDB具有乐观的并发性,并且ETag每个文档都有一个.如果在执行写操作时ETag已更改,则写入失败(如果ETag更改,则表示其他人修改了文档).在这种情况下,您需要重新阅读并重新修改相关文档.

有关详细信息,请参阅此处的faq .

  • 具体来说,您可以使用request options和accessCondition属性来提供etag和IfMatch条件. (2认同)

小智 -6

DocumentDB 不防止并发。如果您在现有文档上发布新版本的文档,旧文档将被覆盖。如果可以防止并发写入,则必须使用文档的时间戳。documentDB 中的每个文档都有最后一个操作的时间戳。

每次更新时,您都可以检查要更新的文档的时间戳是否等于您检索的文档的时间戳,或者它是否已更改。如果已更改,则用户没有最新版本,您可以取消更新。

最好的办法是创建一个存储过程,这样您就可以将此逻辑放入存储过程中,并使您的应用程序与它无关。

  • 有一个内置的 ETag 机制专门处理这个问题。检查时间戳不会阻止服务器拒绝基于 ETag 的写入(两个写入器可以同时检查时间戳)。 (4认同)