【发布时间】:2021-02-18 20:55:57
【问题描述】:
我在 AWS Lambda 函数中使用 python 来列出以特定 id 开头的 s3 存储桶中的键
for object in mybucket.objects.all():
file_name = os.path.basename(object.key)
match_id = file_name.split('_', 1)[0]
问题是如果一个 s3 存储桶有几千个文件,迭代效率非常低,有时 lambda 函数会超时
这是一个示例文件名
https://s3.console.aws.amazon.com/s3/object/bucket-name/012345_abc_happy.jpg
我只想迭代键名中包含“012345”的对象 关于我如何实现这一点的任何好的建议
【问题讨论】:
-
这个问题重复使用 contains 这个词,而它的意思似乎是 begins with。 这是一个非常重要的区别,因为接受的答案只有正确的 begins with -- 它是 contains 的子集。 S3 仅支持前缀匹配(以开头)而不支持字符串匹配(包含)键列表。
-
@Michael-sqlbot 3 年后这个功能限制仍然存在吗?我也想通过键搜索,但我感兴趣的字符串在中间,而不是结尾。
-
@user554481 不支持扫描键空间,这是在对象键中间查找匹配项所必需的。想想电话簿。尝试在此类书中按名字(而不是姓氏)查找某人,您会立即看到问题的本质。
-
我可以看到 AWS 对其键进行全表扫描是多么费力,但是当像 OP 这样的用户必须扫描所有对象时,这不是经常发生的事情吗一个rest API并对客户端的所有键执行文本搜索?
标签: python amazon-web-services amazon-s3 aws-lambda