Azure批处理操作删除几个blob和表

Azure批处理操作删除几个blob和表,azure,Azure,我有一个函数,可以删除属于受影响用户的每个表和blob CloudTable uploadTable = CloudStorageServices.GetCloudUploadsTable(); TableQuery<UploadEntity> uploadQuery = uploadTable.CreateQuery<UploadEntity>(); List<UploadEntity> uploadEntit

我有一个函数,可以删除属于受影响用户的每个表和blob

        CloudTable uploadTable = CloudStorageServices.GetCloudUploadsTable();
        TableQuery<UploadEntity> uploadQuery = uploadTable.CreateQuery<UploadEntity>();
        List<UploadEntity> uploadEntity = (from e in uploadTable.ExecuteQuery(uploadQuery)
                                          where e.PartitionKey == "uploads" && e.UserName == User.Idendity.Name
                                          select e).ToList();

        foreach (UploadEntity uploadTableItem in uploadEntity)
        {
            //Delete table
            TableOperation retrieveOperationUploads = TableOperation.Retrieve<UploadEntity>("uploads", uploadTableItem.RowKey);
            TableResult retrievedResultUploads = uploadTable.Execute(retrieveOperationUploads);
            UploadEntity deleteEntityUploads = (UploadEntity)retrievedResultUploads.Result;
            TableOperation deleteOperationUploads = TableOperation.Delete(deleteEntityUploads);
            uploadTable.Execute(deleteOperationUploads);

            //Delete blob
            CloudBlobContainer blobContainer = CloudStorageServices.GetCloudBlobsContainer();
            CloudBlockBlob blob = blobContainer.GetBlockBlobReference(uploadTableItem.BlobName);
            blob.Delete();
        }
CloudTable uploadTable=CloudStorageServices.GetCloudUploadsTable();
TableQuery uploadQuery=uploadTable.CreateQuery();
List uploadEntity=(来自uploadTable.ExecuteQuery(uploadQuery)中的e)
其中e.PartitionKey==“uploads”&&e.UserName==User.Idendity.Name
选择e.ToList();
foreach(UploadEntity中的UploadEntity uploadTableItem)
{
//删除表
TableOperation retrieveOperationUploads=TableOperation.Retrieve(“uploads”,uploadTableItem.RowKey);
TableResult retrievedResultUploads=uploadTable.Execute(retrieveOperationUploads);
UploadEntity deleteEntityUploads=(UploadEntity)retrievedResultUploads.Result;
TableOperation deleteOperationUploads=TableOperation.Delete(deleteEntityUploads);
uploadTable.Execute(deleteOperationUploads);
//删除blob
CloudBlobContainer blobContainer=CloudStorageServices.GetCloudBlobContainer();
CloudBlockBlob blob=blobContainer.getblockblobbreference(uploadTableItem.BlobName);
blob.Delete();
}
每个表都有自己的blob,因此如果列表包含3个UploadEntity,则3个表和3个blob将被删除

我听说您可以使用表批处理操作来降低成本和负载。我试过了,但失败了。有人愿意帮助我吗

我猜tablebatch操作只适用于表,所以它不适用于BLOB,对吗

如何为此代码添加tablebatchoperations?你认为还有其他可以改进的地方吗


谢谢

我想使用批处理操作,但不知道如何使用。不管怎么说,我经过一些测试后发现了

用于删除多个实体的改进代码:

        CloudTable uploadTable = CloudStorageServices.GetCloudUploadTable();
        TableQuery<UserUploadEntity> uploadQuery = uploadTable.CreateQuery<UserUploadEntity>();
        List<UserUploadEntity> uploadEntity = (from e in uploadTable.ExecuteQuery(uploadQuery)
                                               where e.PartitionKey == "useruploads" && e.MapName == currentUser
                                               select e).ToList();

        var batchOperation = new TableBatchOperation();

        foreach (UserUploadEntity uploadTableItem in uploadEntity)
        {
            //Delete upload entities
            batchOperation.Delete(uploadTableItem);

            //Delete blobs
            CloudBlobContainer blobContainer = CloudStorageServices.GetCloudBlobContainer();
            CloudBlockBlob blob = blobContainer.GetBlockBlobReference(uploadTableItem.BlobName);
            blob.Delete();
        }

        uploadTable.ExecuteBatch(batchOperation);
CloudTable uploadTable=CloudStorageServices.GetCloudUploadTable();
TableQuery uploadQuery=uploadTable.CreateQuery();
List uploadEntity=(来自uploadTable.ExecuteQuery(uploadQuery)中的e)
其中e.PartitionKey==“useruploads”&&e.MapName==currentUser
选择e.ToList();
var batchOperation=new TableBatchOperation();
foreach(uploadEntity中的UserUploadEntity uploadTableItem)
{
//删除上载实体
batchOperation.Delete(uploadTableItem);
//删除斑点
CloudBlobContainer blobContainer=CloudStorageServices.GetCloudBlobContainer();
CloudBlockBlob blob=blobContainer.getblockblobbreference(uploadTableItem.BlobName);
blob.Delete();
}
uploadTable.ExecuteBatch(批处理操作);

我知道batchoperations限制为100,但在我的情况下,这没什么好担心的。

从代码中不太清楚您要做什么。你能解释一下你想完成什么吗。另外,请解释以下内容1)
每个表都有自己的blob
。2)
我听说您可以使用表批处理操作来降低成本和负载。我试过了,但失败了。
。你要求的是。。。什么?关于代码改进的指导?添加批处理操作的指南?这些问题太宽泛(而且寻求意见)。关于表批处理操作:正如@Gaurav所问:你所说的“惨败”到底是什么意思?你试了什么?批处理操作是针对表而不是blob的,这是正确的;它们仅限于单个分区内的操作,最多100个实体(如上所述)。