簡體   English   中英

python boto3 for AWS - S3 Bucket Sync 優化

[英]python boto3 for AWS - S3 Bucket Sync optimization

目前我正在嘗試將兩個 S3 存儲桶與刪除文件的目標進行比較。

問題定義: -BucketA -BucketB

該腳本正在 BucketB 中查找 BucketA 中不可用的文件(相同的鍵名)。 必須刪除僅在 BucketB 中可用的文件。 每個存儲桶包含大約 3-4 百萬個文件。

非常感謝。

親切的問候,亞歷山大

我的解決思路:

列表填充很慢。 有沒有可能加速它?

#Filling the lists
#e.g. BucketA (BucketB same procedure)
s3_client = boto3.client(3")
bucket_name = "BucketA"
paginator = s3_client.get_paginator("list_objects_v2")
response = paginator.paginate(Bucket="BucketA", PaginationConfig={"PageSize": 2})
for page in response:
    files = page.get("Contents")
    for file in files:
        ListA.append(file['Key'])
#finding the deletion values
diff = list(set(BucketB) - set(BucketA))
 
#delete files from BucketB (building junks, since with delete_objects_from_bucket max. 1000 objects at once)
for delete_list in group_elements(diff , 1000):
    delete_objects_from_bucket(delete_list)

ListBucket() API 調用一次僅返回 1000 個對象,因此列出包含 100,000 多個對象的存儲桶非常慢,最好避免使用。 你有 3-4 百萬個對象,所以一定要避免列出它們!

相反,使用Amazon S3 Inventory ,它可以提供每日或每周 CSV 文件,列出存儲桶中的所有對象。 為兩個存儲桶激活它,然后使用提供的 CSV 文件作為輸入進行比較。

您還可以使用 Amazon S3 Inventory 生成的 CSV 文件作為 Amazon S3 批量操作的清單文件 因此,您的代碼可以生成一個僅列出您想要刪除的對象的文件,然后獲取 S3 批量操作來處理這些刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM