我正在尝试探索是否可以在s3中不到一秒钟的时间内列出某些对象。我的存储桶中有大约200,000张照片,其中有些照片与其他照片相关:例如6003-01.jpg与6003-02.jpg相关。我正在使用以下代码提取:
s3_client = boto3.client('s3')
bucket = 'images'
prefix = 'Photo/'
paginator = s3_client.get_paginator('list_objects_v2')
response_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix)
file_names = []
for response in response_iterator:
for object_data in response['Contents']:
key = object_data['Key']
if key.startswith('Photo/6003-'):
file_names.append(key)
print(file_names)
此代码确实有效,但速度太慢。我知道通常的方法是使用数据库,但是我想看看是否可以避免这种费用。
您知道更快的方法吗?
是否有可能使用另一个脚本通过脚本将这些匹配的图像(6003-)放入其自己的“目录”中,然后返回所有这些对象-这样会更快,因为它会搜索较小的前缀?
谢谢。
答案 0 :(得分:2)
最快的方法是使用Amazon S3 Inventory。
它可以提供CSV格式的Amazon S3存储桶中所有对象的每日列表。
优点:无需自己列出对象
缺点:每天仅提供一次
另一种跟踪对象的方法是,每当添加/删除对象时,Amazon S3就会触发AWS Lambda函数。然后,Lambda函数将对象信息存储在数据库(例如DynamoDB)中。然后,您查询数据库而不是S3。