2013-02-14 87 views
4

什麼是刪除多個雲存儲對象的最佳方式?我有一個包含〜500K對象的桶,我想將它們全部刪除。批量刪除雲存儲對象

您是否必須爲每個要刪除的對象創建1個api請求,或者是否存在某種批處理方法?我正在使用gsutil一次刪除一個。

回答

4

您需要爲每個對象提出1個api請求。最簡單的方法來完成,這將是與gsutil

$ gsutil -m rm gs://bucket_with_many_objects/** 

-m選項啓用多線程,這將同時刪除許多對象。

+0

感謝您的-m選項!!!!!!! – aloo 2013-02-15 00:41:43

2

請注意,使用gsutil時,「*」通配符只會匹配頂級對象(直到路徑名中的下一個「/」)。如果你想刪除您可以將所有對象要麼使用:

$ gsutil -m rm -R gs://bucket_with_many_objects 

$ gsutil -m rm gs://bucket_with_many_objects/** 

邁克·施瓦茨,谷歌雲存儲團隊

+0

您好Mike,您是否計劃針對java GCS Json API的批量刪除方法?否則,我們必須通過https://developers.google.com/storage/docs/json_api/v1/how-tos/batch使用原始json調用,這實際上是一種痛苦。 – husayt 2014-07-19 05:09:41

+0

或者像'$ storageService-> objects-> deleteCollection($ condition);'只需要1個請求? – goldsky 2015-01-19 19:20:52

1

我也有類似的問題,包含了一個水桶800,000個對象,gsutil -m rm gs:// bucket-name方法可以工作,但需要很長時間,因爲它實質上仍然是一次刪除一個對象。

在谷歌聯繫雲存儲團隊之後,他們向我指出了存儲桶生命週期策略的方向,雖然不是即時的,但它們允許您以更有效的方式批量刪除對象。

我寫了一個blog post on Deleting Full Buckets使用這種方法。

+0

感謝您發佈該blob發佈。 (1)關於你的評論,rb命令沒有提供強制刪除存儲桶及其內容的方法:gsutil rm -r gs://存儲桶名將會去做。 (2)爲了進一步加速你可以在多臺機器上運行命令,例如在機器1上運行「gsutil -m rm -r gs:// bucket-name/a *」,在機器2上運行「gsutil -m rm- r gs:// bucket-name/b *「等等。你如何分配工作取決於你的對象是如何命名的,但希望你能明白。 – 2016-12-25 18:57:25