usr*_*usr 5 azure azure-cosmosdb
如何在Azure DocumentDB中以原子方式递增文档中的整数?
在并发写入器存在的情况下,增量操作必须是原子的.不允许丢失增量(在初始读 - 修改 - 写算法中它们是可能的).
从文档:
DocumentDB如何提供并发性?
DocumentDB通过HTTP实体标签或ETag支持乐观并发控制(OCC).每个DocumentDB资源都有一个ETag,而DocumentDB客户端在写入请求中包含其最新的读取版本.如果ETag是最新的,则提交更改.如果该值已在外部更改,则服务器将使用"HTTP 412 Precondition failure"响应代码拒绝写入.客户端必须读取最新版本的资源并重试该请求.
可以使用此属性来实现CAS循环:
while (true) {
var existingDoc = ReadDoc();
existingDoc.Int++;
try {
WriteDoc(existingDoc);
break;
}
catch { //Concurrency violation
continue;
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,Azure DocumentDB中的事务在数据快照(快照隔离)上运行.
顺便说一句:如果你想做一些更自动化的事情(当有人修改文档时自动增加)你可以使用触发器和分隔集合来获取整数的当前值.触发器在同一事务中执行,因此它将是一致且自动化的.
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |