2016-08-03 3 views
1

В настоящее время я получаю все капли в списке из контейнера, а затем сортирую его на основе свойства LastModified. В случае большого количества блоков в контейнере это дает проблемы с производительностью.Каков наиболее эффективный способ извлечения старого контейнера из контейнера?

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

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

вместо listblobs вы можете использовать асинхронную версию ListBlobsSegmentedAsync (String, BlobContinuationToken), но да, вам нужно отсортировать по LastModified. – TusharJ

ответ

2

Нет, лучшего способа достичь этого нет.

0

В соответствии с вашим описанием вы беспокоитесь о проблеме с производительностью извлечения самого старого капли из контейнера, когда в контейнере содержится большое количество капель. Как упоминает Zhaoxinglu, нет лучшего способа добиться этого. По моему опыту, мы можем попробовать обходное решение, чтобы улучшить производительность.

Поскольку имя blob может содержать символы '/' или '\', которые многие приложения, которые читают blob, интерпретируются как папки, мы могли бы попытаться использовать эту функцию для повышения производительности.

Основная идея заключается в следующем:

а) Согласно Modified-Time блоба для хранения блоб в каталогах, отформатированные как «{документы}/{год}/{месяц}»;

b) Использование префикса, связанного с измененным временем блоба, чтобы исключить перечисление всех блоков в контейнере.

Пожалуйста, обратитесь к следующим шагам, чтобы узнать, может ли он вам помочь.

  1. Вы можете создать свой блоб следующим образом:

    enter image description here

  2. Если вы хотите, чтобы получить самую старую блоб, вы можете обратиться к следующему коду:

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

Надеюсь, он может вам помочь, и, пожалуйста, сообщите мне, если у вас есть какие-либо вопросы о вышеуказанных шагах.

+0

Привет @Jambor, В моем сценарии, blob имя является внешним, и мы не имеем никакого контроля над ним. Но, безусловно, этот подход выглядит великолепно. Спасибо за предложение. – user2806597

0

привет Спасибо за ответы. Как сказал Чжаосин, лучшего пути нет. Я использую обходной путь, вводя контейнер в качестве организованного контейнера. Итак, каково бы ни было количество капли в первом вызове, я перехожу к этому поэтапному контейнеру и обрабатываю его. Используя этот подход, я смог сохранить вызов listBlobs(), и, следовательно, я видел улучшение производительности.