我需要列出在某个时间戳记之后使用boto3修改过的S3存储桶中的所有键。
我做了这些功能,但是对于具有多个键的存储桶而言,性能却很慢。
s3 = boto3.resource('s3',
aws_access_key_id=s3_cred.ACCESS_KEY,
aws_secret_access_key= s3_cred.SECRET_KEY)
my_bucket = s3.Bucket(BUCKET_NAME)
def meta_df(bucket):
key = []
ts = []
for o in bucket.objects.all():
key.append(o.key)
ts.append(o.last_modified)
return pd.DataFrame({'key':key,'ts':ts})
def get_after_timestamp(bucket,ts):
df = meta_df(bucket)
df = df[df['ts']>ts]
return df['key'].tolist()
get_after_timestamp(my_bucket,'2018-09-24 13:39:00')
是否可以通过boto3或更高效的方式来做到这一点?
答案 0 :(得分:1)
一种选择是使用Amazon S3 Inventory,它可以提供Amazon S3存储桶中对象的每日列表。
因此,您只需要解析列表,而不用进行API调用来列出对象。但是,列表最多只能每天列出一次,因此这取决于您是否需要最新信息。
更新:
由于您要每5分钟扫描50万个对象,因此需要采用不同的方法。这是因为扫描这么多文件(每个API调用一次只能检索1000个对象)会很慢而且效率低。
相反,您应该:
一些例子是: