前段时间,我问了一个关于如何将大量 blob 从一个帐户复制到另一个帐户的问题。我发现的最佳解决方案是使用新的Copy Blob API,该 API 允许在帐户之间复制 blob 而无需下载它们。
从那以后,我测试了新的 API(它现在在 Azure SDK 中可用,至少在它的最新gitHub 版本中可用)并且我的基准测试显示了显着的改进 - 而复制一个 90MB 的 blob 需要 1.5 分钟“旧方式”(即下载,然后上传),通过 Copy Blob 复制只需 10 秒。这就是好消息。
现在,坏消息:复制 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++;
}
}