AmazonS3Client.listObjects()问题与大型s3bucket

时间:2016-04-03 14:06:51

标签: c# amazon-s3 aws-sdk

我的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对象或类似的东西中添加标准吗?

提前感谢您的反馈和想法!

1 个答案:

答案 0 :(得分:0)

问题解决了。我通过将Maxkeys增加到更高的数量(5000)而不是之前定义的2来增加返回值的数量。这限制了我理解的调用量,这是花费时间的。

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

这种性能从7分钟提高到约2秒。