多个对象删除谷歌云存储去

时间:2015-05-07 12:53:47

标签: google-app-engine go google-cloud-storage

我正在使用go来与云存储进行交互。

我无法使用应用引擎中的gsutil并使用 rm命令删除?

我可以使用DeleteObject删除一个对象或迭代一系列对象并删除每个对象,但我正在寻找Datastor中的另一个解决方案,如DeleteMulti

您是否有更好的多重删除解决方案?

1 个答案:

答案 0 :(得分:0)

删除的每个对象都需要一次调用GCS。迭代每个对象并调用delete是最简单且最可能的最佳解决方案。如果您需要更快的性能,您可能希望使用多个线程一次向GCS发送多个删除请求。

如果这对您的应用来说是一个重大的性能问题,那么还有另一种方式,我不愿提及,因为它增加了显着的复杂性并且不会带来太多额外的性能。 GCS支持将呼叫一起批处理为单个连接。它可能不会比通过多个线程发送删除请求快得多,但它的行为更像是一个DeleteMulti调用。

实际上,批量调用通过向/ batch路径发送多部分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

但是,我再次建议只发送个别删除请求。批量调用不是原子的,这意味着某些删除可能会成功,而其他删除则会失败。如果其中一个批量删除操作失败,您将需要解析批处理响应消息以确定哪个调用失败,以便您可以重试它,这很可能不值得您获得的收益