現在、同じ 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