Azure Storage Tables Transactions

Learn how to perform transactions on Azure Table Storage entities.

Introduction

Azure Table Storage offers robust support for transactional operations, enabling you to perform multiple data modifications as a single, atomic unit. This ensures data consistency and simplifies complex data manipulation scenarios.

Transactional Operations

Transactions in Azure Table Storage can be categorized into two main types:

  • Batch Operations: Allow you to group multiple independent operations (insert, update, delete) into a single request.
  • Entity Group Transactions (EGTs): Guarantee atomicity for operations performed on entities within the same partition.

Batch Operations

Batch operations allow you to combine multiple data operations into a single HTTP request. This significantly reduces the network overhead and improves the overall efficiency of your application.

Batch Creation

You can insert multiple entities in a single batch request. If any single insert operation within the batch fails, the entire batch operation is considered a failure, and no entities are inserted.


// Example using Azure SDK (conceptual)
var batch = new TableBatchOperation();
batch.Insert(entity1);
batch.Insert(entity2);

await table.ExecuteBatchAsync(batch);
                

Batch Update

Similarly, you can update multiple existing entities in a single batch. Each update operation can specify its own concurrency control (ETag).


// Example using Azure SDK (conceptual)
const batch = [];
batch.push({ type: 'update', entity: entity3, etag: '*' });
batch.push({ type: 'update', entity: entity4, etag: 'some_etag' });

await table.executeBatch(batch);
                

Batch Deletion

Delete multiple entities by including delete operations in your batch.


# Example using Azure SDK (conceptual)
batch = []
batch.append({'type': 'delete', 'entity': entity5})
batch.append({'type': 'delete', 'entity': entity6})

table.execute_batch(batch)
                

Batch Composition

A single batch operation can contain a mix of insert, update, and delete operations. However, all operations within a batch must be applied to entities within the same table.

Batch Limits

  • A batch operation can contain a maximum of 100 individual operations.
  • All entities in a batch operation must belong to the same table.

Upsert Operations

Upsert (update or insert) operations provide a convenient way to save an entity, creating it if it doesn't exist or updating it if it does. Table Storage supports two types of upsert operations:

Insert or Replace

This operation attempts to insert the entity. If an entity with the same PartitionKey and RowKey already exists, it replaces the entire existing entity with the new entity. All properties are replaced, except for Timestamp.


// Example using Azure SDK (conceptual)
await table.ExecuteAsync(TableOperation.InsertOrReplace(entity));
                

Insert or Merge

This operation attempts to insert the entity. If an entity with the same PartitionKey and RowKey already exists, it merges the new entity's properties with the existing entity. Properties not present in the new entity are retained in the existing entity.


// Example using Azure SDK (conceptual)
await table.execute(TableOperation.InsertOrMerge(entity));
                

Entity Group Transactions (EGTs)

Entity Group Transactions (EGTs) guarantee atomicity for operations on entities that share the same PartitionKey. All operations within an EGT are treated as a single, atomic unit. If any operation fails, all operations are rolled back.

Note: EGTs are only supported for operations within the same partition. You cannot include entities from different partitions in a single EGT.

EGTs are implicitly handled when you perform multiple operations on entities with the same PartitionKey using certain SDK methods or when constructing a batch operation that respects partition boundaries.

Best Practices

  • Use Batch Operations: Whenever possible, group multiple operations into batches to reduce latency and improve throughput.
  • Leverage Upserts: Use InsertOrReplace or InsertOrMerge for idempotent operations, simplifying your update logic.
  • Understand EGTs: Design your partition keys carefully to take advantage of EGTs for critical data consistency.
  • Handle Concurrency: Use ETags effectively in your update and delete operations to prevent unintended data overwrites.
  • Monitor Performance: Keep track of the number of operations per batch and the size of your transactions to stay within service limits.