【发布时间】:2017-10-23 22:23:44
【问题描述】:
我有一个包含大约 10,000 个图像对象的 AWS S3 存储桶。我想使用boto3 来随机获取一个对象。 list_objects_v2() 一次只列出 1,000 个对象,但允许您分页。我的问题是我目前正在考虑的方法是否是最好的方法。我打算对每个对象列表进行分页,将每个页面中的所有键保存到一个列表中。在没有剩余页面后,从列表中随机选择一个键。
【问题讨论】:
-
虽然该方法可行,但还有其他方法可以在 S3 中生成对象的密钥吗?我想这取决于你必须多久重新生成一次列表,但你描述的是一个昂贵的操作。但是,例如,如果您知道文件名都是
IMG+ [0-9999] +.jpg或其他任何名称,则无需读取列表即可生成密钥。只是一个想法。 -
@stdunbar 我看到的问题是,虽然我知道所有文件名,但是在我访问一个对象后,我将它从存储桶中删除。所以我必须跟踪我已经访问过的文件。
-
你还有第二个问题,@IsiahL。 (第一个:这会很慢而且成本太高。)您不能假设已删除的对象会立即从后续的列表对象结果中消失。您可能需要考虑解释为什么要选择一个随机对象然后将其删除。您也可能忽略了其他问题。
-
@Michael-sqlbot 所以基本上这只是一个个人有趣的项目,用于制作一个每 2 小时左右发布一张图片的 twitter 机器人。本来打算用 Lambda 来做,成本低,工作量少,只觉得用 S3 存储图片才有意义。如果你有更好的方法请告诉我!
-
@IsiahL S3 存储和提供图片是有意义的。 S3 随机选择它们是没有意义的。您需要将图片列表存储在其他地方,以可以轻松随机查询的形式。在 S3 上存储文件但在数据库、缓存或搜索引擎中存储对它们的引用是一种非常常见的模式。
标签: amazon-web-services amazon-s3 boto3