我将一个实体存储在两个 Azure 存储表中。两个表中的数据是相同的,只是RowKey
和PartitionKey
不同(这是出于查询目的)。
问题
插入这些表时,我需要操作是事务性的——只有在两个插入都成功的情况下才必须提交数据。
CloudTable.ExecuteBatch(..)
仅当实体属于同一分区时才有效。
没有其他方法可以做到这一点吗?
我将一个实体存储在两个 Azure 存储表中。两个表中的数据是相同的,只是RowKey
和PartitionKey
不同(这是出于查询目的)。
问题
插入这些表时,我需要操作是事务性的——只有在两个插入都成功的情况下才必须提交数据。
CloudTable.ExecuteBatch(..)
仅当实体属于同一分区时才有效。
没有其他方法可以做到这一点吗?
简短的回答:
抱歉不行。实体批处理事务一次仅支持 1 个表和一些其他限制。
长答案:
我们也遇到过类似的问题,我们必须在多个表中插入数据。我们所做的一件事是我们试图实现某种eventual consistency
. 我们不是直接将数据写入表中,而是将数据写入队列并让后台工作人员角色处理该数据。一旦数据写入队列,我们假设数据最终会被持久化(还涉及一个缓存引擎,它也会在这里更新最新数据,以便应用程序可以获取最新数据)。后台工作者角色不断重试插入(使用InsertOrReplace
语义而不是仅仅Insert
语义),一旦所有数据都写入,我们只需从队列中删除消息。