我将实体存储在两个Azure存储表中。两个表中的数据相同,只是RowKey
和PartitionKey
不同(这是出于查询目的)。
问题
当插入这些表时,我需要操作是事务性的 - 只有两个插入成功时才能提交数据。
CloudTable.ExecuteBatch(..)
仅在实体属于同一分区时才有效。
没有别的办法吗?
答案 0 :(得分:2)
简短回答:
不幸的是没有。实体批处理事务一次仅支持1个表和some other restrictions。
答案很长:
我们也遇到了类似的问题,我们不得不在多个表中插入数据。我们做的一件事是我们试图实现某种eventual consistency
。我们不是将数据直接写入表中,而是将这些数据写入队列,并具有后台工作者角色处理数据。一旦数据写入队列,我们就会假设数据最终会被持久化(还涉及一个缓存引擎,这里也会使用最新数据进行更新,以便应用程序可以获取最新数据)。后台工作者角色继续重试插入(使用InsertOrReplace
语义而不仅仅是Insert
语义),一旦写完所有数据,我们只需从队列中删除该消息。