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 存储不支持查询功能,因此您需要自行实现。一个明显的选择是您当前执行此操作的方式,即列出 blob 并找到该列表中的最后一个 blob。

[把想法大声说出来]

您可以做的一件事是按时间倒序命名 blob(类似于表中的 PartitionKey 的方法)。所以你可以做的是使用这个逻辑命名你的 blob

var blobName = DateTime.MaxValue - DateTime.UtcNow

这样,当您列出 blob 时,您总是会首先获得最新的 blob。

另一种选择是将 blob 名称、创建日期和 blob URI 保存在表存储中。同样,您可能希望对 PartitionKey 使用与上述相同的逻辑。然后您将查询表存储,从表中获取第一条记录,这将是您最近创建的 blob。

于 2013-02-20T14:20:20.063 回答
2

我在我的上传应用程序中创建了一个函数,每次都会在文本文件 (txt) 中写入最新图像的完整 URI

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 回答