批量刪除 S3 文件的最有效方法
我希望能夠在 S3 上一次批量刪除數千或數万個文件。每個文件的大小在 1MB 到 50MB 之間。自然,我不希望使用者(或我的伺服器)在文件被刪除的過程中等待。因此,問題:
- S3 如何處理文件刪除,尤其是在刪除大量文件時?
- 有沒有一種有效的方法來做到這一點並讓 AWS 完成大部分工作?所謂高效,我的意思是向 S3 發出最少數量的請求,並在我的伺服器上使用最少的資源花費最少的時間。
AWS 支持使用 S3 REST API 及其各種包裝器在每個請求中批量刪除多達 1000 個對象。此方法假定您知道要刪除的 S3 對象鍵(也就是說,它的設計目的不是處理保留策略、超過一定大小的文件等)。
S3 REST API 最多可以在單個請求中指定要刪除的 1000 個文件,這必須比發出單個請求更快。請記住,每個請求都是一個 HTTP(因此是 TCP)請求。所以每個請求都會帶來成本。您只需要知道對象的鍵並創建一個 HTTP 請求(或使用您選擇的語言的包裝器)。AWS 提供了有關此功能及其使用的大量資訊。只需選擇您最喜歡的方法!
我假設您的案例涉及最終使用者指定要一次刪除的多個特定文件。而不是啟動諸如“清除所有引用圖片文件的對象”或“清除所有早於某個日期的文件”之類的任務(我相信這在 S3 中很容易單獨配置)。
如果是這樣,您將知道需要刪除的密鑰。這也意味著使用者會想要更多關於他們的文件是否被成功刪除的實時回饋。對精確鍵的引用應該非常快,因為 S3 旨在有效擴展,儘管處理大量數據。
如果沒有,您可以查看非同步 API 呼叫。您可以從這篇博文中了解它們的一般工作方式,或者搜尋如何以您選擇的語言進行操作。這將允許刪除請求佔用它自己的執行緒,並且其餘程式碼可以在不讓使用者等待的情況下執行。或者,您可以將請求解除安裝到隊列。. . 但是這兩個選項都不必要地使您的程式碼(非同步程式碼可能很煩人)或您的環境(您需要一個服務/守護程序/容器/伺服器來處理隊列)複雜化。所以如果可能的話,我會避免這種情況。
編輯:我沒有發布超過 2 個連結的聲譽。但是您可以在這裡看到亞馬遜對請求率和性能的評論:http: //docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html而 s3 常見問題解答評論說批量刪除是如果可能的話。