AWS s3:如何快速列出某些对象

时间:2018-08-02 10:37:43

标签: amazon-web-services amazon-s3

我正在尝试探索是否可以在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-)放入其自己的“目录”中,然后返回所有这些对象-这样会更快,因为它会搜索较小的前缀?

谢谢。

1 个答案:

答案 0 :(得分:2)

最快的方法是使用Amazon S3 Inventory

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

优点:无需自己列出对象

缺点:每天仅提供一次

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