c# – Azure表存储 – 管理并发

我在线阅读了有关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将默认为最后一个作者win策略而不是?

最佳答案 是的,Azure存储表服务将接受针对
InsertOrReplace操作的每个最后编写者获胜策略的请求.

The Insert Or Replace Entity operation does not use the If-Match header and it must be called using the 2011-08-18 version or newer. These attributes distinguish this operation from the Update Entity operation.
If the Insert Or Replace Entity operation is used to replace an entity, any properties from the previous entity will be removed if the new entity does not define them. Properties with a null value will also be removed.

如果你想要Replace操作的最后一个作者获胜策略,将ETag设置为“*”.

To force an unconditional update operation, set the value of the If-Match header to the wildcard character (*) on the request. Passing this value to the operation will override the default optimistic concurrency and ignore any mismatch in ETag values.

点赞