2016-05-17 26 views
1

背景: ファイルのメタデータを保持するデータベースと、ファイルを保持するAzure Blobストレージを使用するシステムがあります。データベースとAzure Blob Storageは、Webサービスを介して連携します。Azure BLOBストレージ内のすべてのファイルを削除する方法

システムのすべての部分が動作することを確認するために、ファイルをダウンロード、アップロード、および削除するWebサービスに対してユニットテストを作成しました。テストの後、データベースとAzure BLOBストレージは大量のデータを保持しており、それらをすべて削除する必要があります。データベースからすべてのデータを削除するスクリプトがあります(Drop all the tables, stored procedures, triggers, constraints and all the dependencies in one sql statement)。

Azure Blobストレージからすべてのファイルを削除するには、sctipt(電源シェル)またはコード(C#)を書く必要がありますが、コンテナ内のファイルのみを削除しません。

私の質問: これらの方法(パワーシェルまたはС#)のどれがベストですか? C#とタスク(System.Threading.Tasks)を使用してファイルを削除すると高速になりますか?

+0

コンテナを削除したくない理由はありますか? IMHOでは、コンテナを取り出して少し時間をかけて再作成するほうがはるかに高速で安価です。 –

+0

コンテナを削除して数秒で再作成しようとすると、通常は例外が発生します。そのコンテナが存在するため、ファイルのみを削除します。 –

+1

「最良の」方法はありません。しかし、やはり、あなたのテストの範囲についての情報はほとんどありません(100の数百万?)。そして、@ GauravMantriが質問したように、なぜ**あなたのコンテナを削除しないのですか?コンテナは後で再作成するのが簡単です(削除することで、後で新しいコンテナを作成するときにクリーンなテスト設定から始めることがほとんど保証されます)。 –

答えて

1

コンテナのタイトルを保存する場合、コンテナのタイトルを保存して数秒で再作成してください(エラーが発生した場合は、もう一度お試しください)、削除する必要がある場合あなたがそれを使用できるファイルのみ:

CloudStorageAccount storageAccount; 
CloudBlobClient cloudBlobClient; 

//connection is kept in app.config 
storageAccount = 
    CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
cloudBlobClient = storageAccount.CreateCloudBlobClient(); 

Parallel.ForEach(cloudBlobClient.ListContainers(), x => 
    { 
     Parallel.ForEach(x.ListBlobs(),y=> 
      { 
       ((CloudBlockBlob)y).DeleteIfExists(); 
      }); 
    }); 
関連する問題