从容器中检索最旧blob的最有效方法是什么?

时间:2016-08-03 15:07:47

标签: azure-storage

目前我在容器列表中获取所有blob,然后根据LastModified属性对其进行排序。如果容器中有大量blob,则会出现性能问题。

IEnumerable<IListBlobItem> blobsList = _sourceBlobStorageClient.BlobContainer.ListBlobs(null, false);

var blobItem = blobsList.Cast<CloudBlockBlob>().OrderBy(s => s.Properties.LastModified);

3 个答案:

答案 0 :(得分:2)

不,没有更好的方法来实现这一目标。

答案 1 :(得分:0)

根据您的描述,您担心在容器中存在大量blob时从容器中检索最旧Blob的性能问题。正如赵兴路所说,没有更好的方法来实现这一目标。根据我的经验,我们可以尝试以下解决方法来提高性能。

由于blob的名称可能包含许多读取blob的应用程序解释为文件夹的'/'或'\'字符,因此我们可以尝试使用此功能来提高性能。

基本思路如下:

a)根据blob的修改时间将blob存储在格式为“{docs} / {year} / {month}”的目录中;

b)使用与blob的Modified-time相关联的前缀,以避免列出容器中的所有blob。

请参阅以下步骤,了解它是否对您有所帮助。

  1. 您可以按如下方式设计blob:

    enter image description here

  2. 如果要检索最旧的blob,可以参考以下代码:

  3. var results = (from blob in container.ListBlobs(prefix: "docs/2016/1/", useFlatBlobListing: true)
                    orderby ((CloudBlockBlob)blob).Properties.LastModified
                    select blob).FirstOrDefault();
    

    结果:  enter image description here

    希望它可以帮助您,如果您对上述步骤有任何疑问,请告诉我。

答案 2 :(得分:0)

嗨感谢您的回复。正如肇兴所说,没有更好的办法。我通过引入容器作为分阶段容器来使用解决方法。因此,无论第一次调用中获取的blob数量是多少,我都会转移到此阶段容器并从它们处理它。使用这种方法,我能够保存在listBlobs()调用上,因此我也看到了性能方面的改进。