AmazonS3Client.listObjects() 大型 s3bucket 问题
AmazonS3Client.listObjects() issue with large s3bucket
我有一个包含数千个条目的 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 增加到更高的数量 (5000) 而不是之前定义的 2 来增加返回值的数量。据我所知,这限制了调用量,这需要时间。
ListObjectsRequest request = new ListObjectsRequest
{
BucketName = "selectedbucket",
Prefix = "selectedfolder/",
MaxKeys = 5000
};
这将性能从 7 分钟缩短到大约 2 秒。
我有一个包含数千个条目的 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 增加到更高的数量 (5000) 而不是之前定义的 2 来增加返回值的数量。据我所知,这限制了调用量,这需要时间。
ListObjectsRequest request = new ListObjectsRequest
{
BucketName = "selectedbucket",
Prefix = "selectedfolder/",
MaxKeys = 5000
};
这将性能从 7 分钟缩短到大约 2 秒。