【发布时间】:2016-10-06 11:40:10
【问题描述】:
我的目标是编写一个存储过程或触发器,让我可以读取替换文档,然后在一个事务中更新元数据文档。
现在我知道,如果我按顺序写入集合,这将按预期工作,但是如果我并行执行多个存储过程,我是否必须手动配置脚本来比较 etag,或者这是服务器的默认行为脚本?
在阅读了this article 中的一些示例后,我的印象是,如果 etag 在读取-替换操作过程中发生更改,事务将自动失败。 然而,在this example 中,作者将 etag 包含在 requestOptions 对象中并将其传递给 replaceDocument 方法,这与我在客户端使用 .NET SDK 所做的类似。
这些不一致让我感到困惑。所以我的问题是:对于服务器端脚本,是否有必要在 requestOptions 对象中包含 etag 以强制执行乐观并发,还是这是默认行为?
【问题讨论】:
-
这是个好问题。我一直在我的sprocs 中使用 etags (可能是防御性的),这与我的理解相冲突,即每个存储过程都是独立运行的,读写没有机会看到不一致的视图,这让我认为它不是必要的。
标签: stored-procedures azure-cosmosdb