3

BLOB ストレージで最後に作成された BLOB を取得する方法を知る必要があります。現在、for ループで実行していますが、ディレクトリには約 50000のブロックブロブがあります。

最後に作成されたブロック BLOB を効率的な方法で取得するにはどうすればよいですか?

私のコードは次のとおりです。

string url = null;
foreach (var blobItem in subdir.ListBlobs())
{
    url = blobItem.Uri.ToString();
}
url += signature;
if (url != pictureBoxLiveViewer.ImageLocation)
{
    pictureBoxLiveViewer.ImageLocation = url;
}

これは、毎分時を刻むタイマーの関数です。したがって、これは非効率的です。

4

2 に答える 2

3

BLOB ストレージはクエリ機能をサポートしていないため、独自に実装する必要があります。明らかなオプションの 1 つは、ブロブを一覧表示し、そのリストの最後のブロブを見つける現在の方法です。

[考えが口に出ていた]

できることの 1 つは、BLOB に新しい順に名前を付けることです(テーブルの PartitionKey と同様のアプローチ)。したがって、このロジックを使用してブロブに名前を付けることができます

var blobName = DateTime.MaxValue - DateTime.UtcNow

そうすれば、BLOB を一覧表示すると、常に最新の BLOB が最初に取得されます。

別の方法として、BLOB 名、作成日、および BLOB URI を Table storage に保存することもできます。ここでも、PartitionKey に対して上記と同じロジックを使用することができます。次に、テーブル ストレージにクエリを実行し、テーブルから最初のレコードを取得します。これが、最近作成された BLOB になります。

于 2013-02-20T14:20:20.063 に答える
2

アップロードアプリケーションで、最新の画像の完全なURIをテキストファイル(txt)に毎回書き込む関数を作成しました。

CloudBlobClient blobClient = new CloudBlobClient(
    sUrl, new StorageCredentialsSharedAccessSignature(signature));
CloudBlobContainer container = blobClient.GetContainerReference(container1);
CloudBlobDirectory dir = container.GetDirectoryReference(cameranaam);
CloudBlob cloudBlob = dir.GetBlobReference(cameranaam+".txt");
cloudBlob.UploadText(blobSAS.Uri.ToString());

そして、これはサーバーの最後のイメージをロードしている他のプロジェクトのタイマーです。

blobClient = new CloudBlobClient(
    blobstoreurl, new StorageCredentialsSharedAccessSignature(signature));
container = blobClient.GetContainerReference(containerName);
CloudBlobDirectory dir = 
    container.GetDirectoryReference(comboBoxCameras.SelectedItem.ToString());
CloudBlob cloudBlob = dir.GetBlobReference(
    comboBoxCameras.SelectedItem.ToString().Replace(" ","") + ".txt");
pictureBoxLiveViewer.ImageLocation = cloudBlob.DownloadText() + signature;
于 2013-02-20T14:24:05.803 に答える