2

少し前に、あるアカウントから別のアカウントに多数のBLOBをコピーする方法について質問しました。私が見つけた最善の解決策は、アカウント間でBLOBをダウンロードせずにコピーできる新しいCopyBlobAPIを使用することでした。

それ以来、新しいAPI(Azure SDKで利用可能になりました。少なくとも最新のgitHubバージョンで利用可能です)をテストしましたが、ベンチマークで大幅な改善が見られました。90MBのBLOBをコピーするのに1.5分かかりました。方法」(つまり、ダウンロードしてからアップロード)、CopyBlobを介してコピーするのに10秒しかかかりませんでした。それは良いニュースです。

悪いニュースです。CopyBlobAPIは非同期です。つまり、すぐに返されます。コピーがいつ終了したかを確認するには、宛先Blobのプロパティをポーリングする必要があります。これは原則として素晴らしいことですが、コピーするブロブが何千もある場合は非常に非効率的です。

だから私の質問は、Copy Blob APIを使用して1つのストレージアカウントから別のストレージアカウントに数千(私の場合は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++;
            }
        }
4

1 に答える 1

1

CloudBlobContainer.ListBlobsメソッドは、リストに何を含めるかを説明するblobListingDetailsという名前の引数を取ります。BlobListingDetails.Copyを指定すると、リストにはコピープロパティも含まれます。

詳細については、 MSDNの記事を参照してください。

于 2012-11-21T21:39:24.937 に答える