我正在使用go来与云存储进行交互。
我无法使用应用引擎中的gsutil并使用 rm命令删除?
我可以使用DeleteObject删除一个对象或迭代一系列对象并删除每个对象,但我正在寻找Datastor中的另一个解决方案,如DeleteMulti。
您是否有更好的多重删除解决方案?
答案 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
但是,我再次建议只发送个别删除请求。批量调用不是原子的,这意味着某些删除可能会成功,而其他删除则会失败。如果其中一个批量删除操作失败,您将需要解析批处理响应消息以确定哪个调用失败,以便您可以重试它,这很可能不值得您获得的收益