8

現在、同じ Azure コンテナーの下に数千のファイルを含むブロブ ストレージがあります。私たちのファイル命名規則は次のようなものです:

ストレージ名\チーム\サブチーム\ファイル名

特定の各サブチームのファイルを表示するツールを作成しています。このコードは、コンテナーの BLOB のリストを取得し、それぞれを正しい Team\Subteam に一致させようとします (サンプル コードについては、以下を参照してください)。

これは機能しますが、非常に遅くなります (すべてのファイルを調べて、特定のサブチームと一致するかどうかを確認する必要があるため)。クエリの速度を改善する方法はありますか? 「探しているチームに一致する最初のファイルを見つけて、別のチームが見つかったら追跡して早期に終了する」などの最適化を考えることができますが、それは BlobList がソートされており、修正されないことを前提としています最悪のシナリオ。

残念ながら、ファイルを異なるコンテナーに分割することは、現時点ではオプションではありません。

サンプルコードは次のとおりです。

IEnumerable<IListBlobItem> blobs = blobContainer.ListBlobs(
    new BlobRequestOptions() 
    {
        UseFlatBlobListing = true, 
        BlobListingDetails = BlobListingDetails.Metadata 
    }).OfType<CloudBlob>();

foreach (var blob in blobs) {
var cloudy = blob as CloudBlob;

string blobTeamId = cloudy.Uri.Segments[2].Trim('/');
if (blobTeamId != teamId)
        continue;

//Do something interesting with the file
4

3 に答える 3

2

BlobListingDetails.Metadata は本当に必要ですか? これにより、多くの余分な情報がダウンロードされます。必要なのは名前だけだと思う

于 2011-05-13T21:47:20.137 に答える