批量查询异步复制Blob Azure API的状态

时间:2012-11-21 15:10:28

标签: azure azure-storage azure-storage-blobs

前段时间,我已经问过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++;
            }
        }

1 个答案:

答案 0 :(得分:1)

CloudBlobContainer.ListBlobs方法接受一个名为blobListingDetails的参数,该参数描述了列表中要包含的内容。如果指定BlobListingDetails.Copy,则列表还将包括复制属性。

有关详细信息,请参阅MSDN article