Azure Table 存储 SDK - 清空 table
Azure Table Storage SDK - Empty a table
这似乎是一个微不足道的问题,但我很难弄明白。
我只需要使用 .NET SDK 清空 Azure 存储 Table。
我唯一找到的是以下内容:
TableOperation deleteOperation = TableOperation.Delete(entity);
TableResult result = await table.ExecuteAsync(entity);
这将需要查询整个table并对结果进行迭代,这在性能方面是不合理的。有什么方法可以清空整个 table?
谢谢
您可以删除 table 并重新创建它。但是请记住,删除 table 是存储端的异步操作,可能需要至少 30 秒或更长时间(取决于数据)。在删除 table 期间,您无法重新创建它。
另一种方法是使用 Entity Batch 事务并一次删除 100 个实体。这将比删除单个实体更快。
您可以像这样删除整个 table:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
tableClient.DeleteTableIfExist("mytable");
正如 Gaurav 指出的那样,这是异步完成的,因此如果您想重新创建 table,您将需要使用 while 循环并继续尝试每 5 秒直到创建成功。
CloudTableClient
上的 DeleteTableIfExists
方法似乎已停用并移至 Microsoft.WindowsAzure.Storage.Table.CloudTable
。
我写了一个扩展方法 EnsureTableIsEmpty
,它使用 Polly 删除并重新创建 table 以提供基本的重试策略。代码下方:
public static async Task<CloudTable> EnsureTableIsEmpty(this CloudTable table)
{
await table.DeleteIfExistsAsync();
await Policy
.Handle<StorageException>((exc) => { return exc.Message == "Conflict"; })
.WaitAndRetryAsync(
5,
retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
(exception, timeSpan, retryCount, context) =>
{
//Logging stuff
})
.ExecuteAsync(() => table.CreateIfNotExistsAsync());
return table;
}
它运行良好。任何建议或改进都会很好。
这似乎是一个微不足道的问题,但我很难弄明白。 我只需要使用 .NET SDK 清空 Azure 存储 Table。
我唯一找到的是以下内容:
TableOperation deleteOperation = TableOperation.Delete(entity);
TableResult result = await table.ExecuteAsync(entity);
这将需要查询整个table并对结果进行迭代,这在性能方面是不合理的。有什么方法可以清空整个 table?
谢谢
您可以删除 table 并重新创建它。但是请记住,删除 table 是存储端的异步操作,可能需要至少 30 秒或更长时间(取决于数据)。在删除 table 期间,您无法重新创建它。
另一种方法是使用 Entity Batch 事务并一次删除 100 个实体。这将比删除单个实体更快。
您可以像这样删除整个 table:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
tableClient.DeleteTableIfExist("mytable");
正如 Gaurav 指出的那样,这是异步完成的,因此如果您想重新创建 table,您将需要使用 while 循环并继续尝试每 5 秒直到创建成功。
CloudTableClient
上的 DeleteTableIfExists
方法似乎已停用并移至 Microsoft.WindowsAzure.Storage.Table.CloudTable
。
我写了一个扩展方法 EnsureTableIsEmpty
,它使用 Polly 删除并重新创建 table 以提供基本的重试策略。代码下方:
public static async Task<CloudTable> EnsureTableIsEmpty(this CloudTable table)
{
await table.DeleteIfExistsAsync();
await Policy
.Handle<StorageException>((exc) => { return exc.Message == "Conflict"; })
.WaitAndRetryAsync(
5,
retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
(exception, timeSpan, retryCount, context) =>
{
//Logging stuff
})
.ExecuteAsync(() => table.CreateIfNotExistsAsync());
return table;
}
它运行良好。任何建议或改进都会很好。