2016-04-03 5 views
0

У меня проблема с s3bucket, которая содержит тысячи записей, а в листинге занимает слишком много времени.AmazonS3Client.listObjects() проблема с большим s3bucket

Как сейчас, я извлекаю объекты используя;

ListObjectsResponse response = client.ListObjects(request); 

foreach (S3Object entry in response.S3Objects.Where(p => p.Key.IndexOf(".mov") > 0 && DateTime.Parse(p.LastModified.ToString()) > DateTime.Now.AddDays(-1)).OrderByDescending(k => k.LastModified)) 
{ 
    Console.WriteLine(entry.Key + Environment.NewLine); 
} 

С спецификации папки в LIstObjectsRequest объекта через ниже код

ListObjectsRequest request = new ListObjectsRequest 
       { 
        BucketName = "selectedbucket", 
        Prefix = "selectedfolder/", 
        MaxKeys = 2 
       }; 

Время это просто поиск занимает огромные (приблизительно 7 минут), так что мне нужно сделать, это ограничить результаты по фактической уровень запроса вместо ограничения ПОСЛЕ получения всех записей в s3bucket.

Есть ли способ ускорить это, добавив предельные критерии непосредственно в вызов «client.ListObjects (request)»? Можно ли добавить критерии в объект ListObjectsRequest или что-то подобное?

Заранее благодарим за отзыв и мысли!

ответ

0

Проблема решена. Я увеличил количество возвращаемых значений, увеличив Maxkeys до более высокой суммы (5000) вместо ранее определенных 2. Это ограничивает количество вызовов, насколько я понимаю, что и требовало времени.

ListObjectsRequest request = new ListObjectsRequest 
      { 
       BucketName = "selectedbucket", 
       Prefix = "selectedfolder/", 
       MaxKeys = 5000 
      }; 

Эта увеличенная производительность от 7 минут до примерно 2 секунд.

+0

* Это ограничивает количество вызовов * - не совсем «ограничений», но более правильно, «уменьшается». 'MaxKeys' * ограничивает * количество ключей на один ответ не более, чем номер, который вы передаете, до фактического максимума 1000, так что меньшие значения означают больше запросов (занимает больше времени и стоит больше денег) для получения одинакового количества объектов , 5000, вероятно, просто игнорируется, поскольку это большее значение, чем поддержка S3. Указание 'MaxKeys' вообще не должно на самом деле быть необходимым, поскольку значение по умолчанию, если оно не указано, также равно максимальному 1000. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html –

+0

Благодарим вас за разъяснение @ Michael-sqlbot – user3105469

Смежные вопросы