少し前に、あるアカウントから別のアカウントに多数の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++;
}
}