为了账号安全,请及时绑定邮箱和手机立即绑定

AWS 上 ListObjects 操作的限制

AWS 上 ListObjects 操作的限制

Go
一只萌萌小番薯 2022-10-17 19:42:08
我正在浏览AWS 开发工具包中的函数文档。ListObjectsgo(对于实际的API 端点或多或少同样适用)所以文档写道:返回存储桶中的部分或全部(最多 1,000 个)对象。这是什么意思?如果我的存储桶有 200.000 个对象,此 API 调用将不起作用?此示例使用ListObjectsPages(在后台调用ListObjects)并声称列出所有对象。这里的实际情况是什么?
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我正在浏览 AWS 的 go SDK 中的 ListObjects 函数的文档。

使用 ListObjectsV2。它的行为或多或少相同,但它是 ListObjects 的更新版本。AWS 更新 API 并不是很常见,而当他们这样做时,通常是有充分理由的。他们非常擅长向后兼容,这就是ListObjects仍然存在的原因。

此示例使用 ListObjectsPages(在后台调用 ListObjects)并声称列出所有对象。

ListObjectsPages是 , 的分页等价物ListObjects,对于V2我将在下面描述的版本也是如此。

许多 AWS API 响应是分页的。AWS 使用光标分页;这意味着请求响应包括一个游标——ContinuationToken在 ListObjectsV2 的情况下。如果存在更多对象(IsTruncated在响应中),则后续ListObjectsV2 请求内容可以提供 ContinuationToken以继续第一个响应停止的列表。

ListObjectsV2Pages为您处理迭代ListObjectsV2请求,因此您不必处理ContinuationTokenand的逻辑IsTruncated。相反,您提供了一个将为响应中的每个“页面”调用的函数。

所以说ListObjectsV2Pages将列出“所有”对象是准确的,但是因为它在后端进行了多次 ListObjectsV2调用,所以它会列出超过一页的响应。

因此,...Pages函数可以被认为是便利函数。您应该始终在适当的时候使用它们——它们消除了分页的痛苦,而分页对于使潜在的大量 api 响应可操作至关重要。在 AWS 中,如果支持分页,则假设您需要它 - 在典型情况下,不保证结果的第一页包含任何结果,即使后续页面包含。


查看完整回答
反对 回复 2022-10-17
?
呼如林

TA贡献1798条经验 获得超3个赞

AWS Go SDK V2为我们提供了分页器类型,以帮助我们管理 S3 的每次查询项目限制。ListObjectsV2Pages离开了。取而代之的是ListObjectsV2Paginator,它处理@Daniel_Farrell 提到的分页细节。


构造函数接受与列表对象查询 ( ) 相同的参数type ListObjectsV2Input。分页器公开了 2 个方法:HasMorePages: bool和NextPage: (*ListObjectsV2Output, error).


var items []Item


for p.HasMorePages() {

  batch, err := p.NextPage(ctx)

  // etc...

  item = append(items, newItems...)

}


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信