shi*_*va8 5 c# concurrency azure azure-storage azure-table-storage
我阅读了有关Microsoft Azure存储(尤其是表存储)中的并发性的在线文章。 https://azure.microsoft.com/zh-CN/blog/managing-concurrency-in-microsoft-azure-storage-2/
它说明了表存储将默认为乐观并发策略。使用电子标签是实施该策略的关键。例如,替换操作需要电子标签的If-Match,并且将始终在服务响应中返回电子标签。因此,如果要使用“替换”操作,则必须确保要发送的实体具有E-Tag值。这对设计有影响。例如,从数据记录实体中提取应用程序域实体时,我必须小心,因为各层之间的映射将丢失E-Tag上下文,除非我将E-Tag的概念作为关联ID引入,否则它在整个应用程序范围内我的领域实体通用。因此,这不是问题。问题是我对InsertOrReplace操作感到困惑。它不需要If-Match。操作执行替换时怎么办?另外,这对并发管理有何影响?这是否意味着特定于InsertOrReplace操作的TableService将默认使用最后写入者获胜策略?
是的,Azure 存储表服务将接受针对InsertOrReplace操作的最后写入者获胜策略的请求。
插入或替换实体操作不使用 If-Match 标头,必须使用 2011-08-18 版本或更高版本调用。这些属性将此操作与更新实体操作区分开来。如果使用“插入或替换实体”操作来替换实体,则如果新实体未定义前一个实体中的任何属性,则这些属性都将被删除。具有空值的属性也将被删除。
如果您也希望替换操作的最后写入者获胜策略,请将 ETag 设置为“*”。
要强制执行无条件更新操作,请将 If-Match 标头的值设置为请求上的通配符 (*)。将此值传递给操作将覆盖默认乐观并发并忽略 ETag 值中的任何不匹配。