我在线阅读了有关Microsoft Azure存储中并发性的文章,特别是表存储。 https://azure.microsoft.com/en-us/blog/managing-concurrency-in-microsoft-azure-storage-2/
它解释了Table Storage将默认为乐观并发策略。使用电子标签是实施该战略的关键。例如,Replace操作需要E-Tags的If-Match,并且将始终在服务响应中返回E-Tags。因此,如果我想使用Replace操作,我必须确保我发送的实体具有E-Tag值。这对设计有影响。例如,在从我的数据记录实体中抽象出我的应用程序域实体时,我必须要小心,因为层之间的映射将丢失E-Tag上下文,除非我将E-Tag的概念作为更多应用程序的相关id引入对我的域实体通用。所以这不是问题。问题是我在InsertOrReplace操作中的困惑。它不需要If-Match。当操作执行替换时,这怎么可能?此外,这如何影响并发管理?这是否意味着特定于InsertOrReplace操作,TableService将默认为最后一个作者获胜策略?
答案 0 :(得分:2)
是的,Azure存储表服务将接受InsertOrReplace操作的每个作者获胜策略的请求。
“插入或替换实体”操作不使用If-Match标头,必须使用2011-08-18版本或更高版本调用它。这些属性将此操作与更新实体操作区分开来。 如果使用“插入或替换实体”操作替换实体,则如果新实体未定义实体,则将删除先前实体中的任何属性。具有空值的属性也将被删除。
如果您希望最后一位作家赢得Replace操作的策略,请将ETag设置为“*”。
要强制进行无条件更新操作,请将If-Match标头的值设置为请求中的通配符(*)。将此值传递给操作将覆盖默认的乐观并发,并忽略ETag值中的任何不匹配。