我需要知道如何在blob存储中检索最后创建的blob。现在我正在使用for循环,但目录中大约有50000个 blockblobs 。
如何以有效的方式获取最后创建的块blob?
我的代码如下:
string url = null;
foreach (var blobItem in subdir.ListBlobs())
{
url = blobItem.Uri.ToString();
}
url += signature;
if (url != pictureBoxLiveViewer.ImageLocation)
{
pictureBoxLiveViewer.ImageLocation = url;
}
这是计时器中的一个功能,每分钟都在滴答声。所以效率低下。
答案 0 :(得分:3)
Blob存储不支持查询功能,因此您需要自己实现。一个显而易见的选择是您当前正在执行此操作的方式,其中列出blob并找到该列表中的最后一个blob。
[大声思考]
您可以做的一件事是以反向时间顺序命名blob (类似于表格中的PartitionKey)。所以你可以做的就是使用这个逻辑命名你的blob
var blobName = DateTime.MaxValue - DateTime.UtcNow
当你列出blob时,你总是先得到最新的blob。
另一种替代方法是在表存储中保存blob名称,创建日期和blob URI。同样,您可能希望使用与上面相同的逻辑来进行PartitionKey。然后你会查询表存储,从表中获取第一条记录,这将是你最近创建的blob。
答案 1 :(得分: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;