У меня проблема с 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 или что-то подобное?
Заранее благодарим за отзыв и мысли!
* Это ограничивает количество вызовов * - не совсем «ограничений», но более правильно, «уменьшается». 'MaxKeys' * ограничивает * количество ключей на один ответ не более, чем номер, который вы передаете, до фактического максимума 1000, так что меньшие значения означают больше запросов (занимает больше времени и стоит больше денег) для получения одинакового количества объектов , 5000, вероятно, просто игнорируется, поскольку это большее значение, чем поддержка S3. Указание 'MaxKeys' вообще не должно на самом деле быть необходимым, поскольку значение по умолчанию, если оно не указано, также равно максимальному 1000. http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html –
Благодарим вас за разъяснение @ Michael-sqlbot – user3105469