0

我正在尝试探索是否可以在 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-)放入其自己的“目录”然后返回所有这些对象的脚本使用此存储桶创建另一个存储桶 - 这会更快,因为它会搜索更小的前缀?

谢谢。

4

1 回答 1

2

最快的方法是使用Amazon S3 Inventory

它可以以 CSV 格式提供 Amazon S3 存储桶中所有对象的每日列表。

好处:不需要自己列出对象

缺点:每天只提供一次

跟踪对象的另一种方法是在添加/删除对象时让 Amazon S3 触发 AWS Lambda 函数。然后,Lambda 函数将对象信息存储在数据库(例如 DynamoDB)中。然后,您查询数据库而不是 S3。

于 2018-08-02T12:22:58.970 回答