【发布时间】:2015-05-07 12:53:47
【问题描述】:
我正在使用 go 与云存储交互。
我无法使用应用引擎中的 gsutil 并使用 rm 命令 删除?
我可以使用DeleteObject 删除一个对象,或者遍历一系列对象并删除每个对象,但我正在寻找另一种解决方案,例如 Datastor 中的DeleteMulti。
你有更好的多删除解决方案吗?
【问题讨论】:
标签: google-app-engine go google-cloud-storage
我正在使用 go 与云存储交互。
我无法使用应用引擎中的 gsutil 并使用 rm 命令 删除?
我可以使用DeleteObject 删除一个对象,或者遍历一系列对象并删除每个对象,但我正在寻找另一种解决方案,例如 Datastor 中的DeleteMulti。
你有更好的多删除解决方案吗?
【问题讨论】:
标签: google-app-engine go google-cloud-storage
每个被删除的对象都需要一次 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
但是,我再次建议只发送单独的删除请求。批处理调用不是原子的,这意味着一些删除可能会成功,而另一些则失败。如果其中一个批量删除操作失败,您将需要解析批量响应消息以找出哪个调用失败,以便您可以重试它,这很可能不值得您为获得回报而付出努力.
【讨论】: