【问题标题】:Bulk querying the status of the async Copy Blob Azure API批量查询异步复制 Blob Azure API 的状态
【发布时间】:2012-11-09 21:01:51
【问题描述】:

不久前,我向question 询问了如何将大量 blob 从一个帐户复制到另一个帐户。我发现的最佳解决方案是使用新的Copy Blob API,它允许在帐户之间复制 blob 而无需下载它们。

从那以后我测试了新的 API(现在可以在 Azure SDK 中使用,至少在最新的gitHub version 中)并且我的基准测试显示了显着的改进 - 而复制 90MB 需要 1.5 分钟blob “旧方式”(即下载,然后上传),只需 10 秒即可通过 Copy Blob 进行复制。这是个好消息。

现在,坏消息:复制 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++;
            }
        }

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

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

    更多信息请参考MSDN article。

    【讨论】:

    • 完美!我只用了 16 分钟(以及半个 gig 的数据传输)来处理包含超过 600,000 个 blob 的容器。
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多