2015-05-07 158 views
1

我正在使用go爲了與雲存儲進行交互。多對象刪除Google雲存儲去

我無法從app引擎使用gsutil會,並與rm命令刪除?

我可以使用DeleteObject刪除一個對象,或遍歷一系列對象並刪除每個對象,但我正在尋找另一種解決方案,如Datastor中的DeleteMulti

您是否有更好的多重刪除解決方案?

回答

0

刪除的每個對象都需要一次調用GCS。迭代每個對象並調用delete是最簡單且可能的最佳解決方案。如果您需要更快的性能,您可能希望使用多個線程一次向GCS發送多個刪除請求。

如果這對於您的應用來說是一個重大的性能問題,那麼還有另一種方式,我不願意提及它,因爲它增加了很多複雜性並且不會購買太多額外的性能。 GCS支持將批處理呼叫集中到一個連接中。它可能不會比在多個線程上發送刪除請求更快,但它的行爲更像是一個DeleteMulti調用。

實際上,批量調用通過向/批處理路徑發送多部分HTTP請求來工作,其中每個部分表示HTTP調用。刪除幾個對象的請求是這樣的:

POST /batch HTTP/1.1 
Host: www.googleapis.com 
Content-Length: content_length 
Content-Type: multipart/mixed; boundary="===============7330845974216740156==" 
Authorization: Bearer oauth2_token 


--===============7330845974216740156== 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+1> 

DELETE /storage/v1/b/example-bucket/o/obj1 HTTP/1.1 
accept: application/json 


--===============7330845974216740156== 
Content-Type: application/http 
Content-Transfer-Encoding: binary 
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+2> 

DELETE /storage/v1/b/example-bucket/o/obj2 HTTP/1.1 
accept: application/json 


--===============7330845974216740156==-- 

這裏還有更多的文檔就可以了:https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

但同樣,我建議只是個人發送的刪除請求。批量調用不是原子的,這意味着一些刪除可能會成功,而其他的刪除可能會失敗。如果其中一個批量刪除操作失敗,則需要解析批量響應消息以確定哪個調用失敗,以便您可以重試它,這很可能不值得爲您獲得的收益付出努力。