我有一个将批处理事务提交到表存储的方法(Nuget:Azure.Data.Tables-12.6.1(。
下面的代码:
private static async Task BatchManipulateEntities<T>(TableClient tableClient, IEnumerable<T> entities, TableTransactionActionType tableTransactionActionType, int batchSize) where T : class, ITableEntity, new()
{
var groups = entities.GroupBy(x => new { x.PartitionKey });
foreach (var group in groups)
{
var items = group.AsEnumerable();
while (items.Any())
{
var batch = items.Take(batchSize);
items = items.Skip(batchSize);
var actions = batch.Select(e => new TableTransactionAction(tableTransactionActionType, e)).ToList();
await tableClient.SubmitTransactionAsync(actions); // <-- Will this count as one batch write operation?
}
}
}
这将调用具有多达一百个TableTransactionActions的SubmitTransactionAsync。但是所提交的批处理事务是否会算作一个"事务";幕后的批处理写入操作,还是实际上是100种不同的操作?
批量写入操作的成本是正常写入操作的三倍,但如果在幕后将一百个实体作为一个批量写入操作上传,那么我是一个快乐的人;(
Azure表存储定价
如果有更聪明的人能澄清这一点,我将不胜感激!
您可以从文档页面了解更多关于它的信息。https://learn.microsoft.com/en-us/rest/api/storageservices/performing-entity-group-transactions
来自文档:
更改集中的操作以原子方式处理;也就是说,变更集中的所有操作要么成功,要么失败。操作按照更改集中指定的顺序进行处理。
因为一次只能更新一个分区,我假设他们做了一些事情,使其少于100个不同的操作,但他们没有指定如何在后端实现。重要的是,你可以将其视为一次操作,并知道所有操作要么成功,要么失败;您最终不会得到部分应用的事务。