前段时间,我已经问过question如何将大量blob从一个帐户复制到另一个帐户。我找到的最佳解决方案是使用新的Copy Blob API,允许在帐户之间复制blob而不下载它们。
此后我测试了新的API(现在可以在Azure SDK中使用,至少在最新的gitHub version中),我的基准测试显示出了显着的改进 - 复制需要1.5分钟一个90MB blob的“旧方式”(即下载,然后上传),只需10秒即可通过Copy Blob进行复制。这是个好消息。
现在,坏消息:Copy Blob API是异步的,这意味着它立即返回,我需要轮询目标blob的属性以找出复制完成的时间。原则上这很好,但是当我有数以千计的blob要复制时效率非常低。
所以我的问题是:使用Copy Blob API将数千个(在我的情况下,超过600,000个)blob从一个存储帐户复制到另一个存储帐户时,找出复制何时完成的有效方法是什么?
以下是一些超慢的代码,可以找出已完成的百分比:
foreach (ICloudBlob blob in cloudBlobContainer.ListBlobs())
{
totalCount++;
// TOO SLOW!
ICloudBlob blobDetails = cloudBlobContainer.GetBlobReferenceFromServer(blob.Name);
if (blobDetails.CopyState.Status == CopyStatus.Success)
{
successCount++;
}
}
答案 0 :(得分:1)
CloudBlobContainer.ListBlobs方法接受一个名为blobListingDetails的参数,该参数描述了列表中要包含的内容。如果指定BlobListingDetails.Copy,则列表还将包括复制属性。
有关详细信息,请参阅MSDN article。