批量查询中超出了速率限制

时间:2014-05-09 10:03:02

标签: ios objective-c google-drive-api

我有客户端应用程序将文件插入到Google云端硬盘中。有一次需要将多个文件插入Google云端硬盘。批量查询(GTLBatchQuery)用于一次向Google驱动器插入多个文件。在插入过程中的某个时间,服务器正在抛出速率限制超出错误:

    "error" : {
  "message" : "Rate Limit Exceeded",
  "data" : [
    {
      "reason" : "rateLimitExceeded",
      "message" : "Rate Limit Exceeded",
      "domain" : "usageLimits"
    }
  ],
  "code" : 417
},

请指导我正确启用此错误的重试方法。我已尝试将retryenabled设置为服务:
self.driveService.retryEnabled = YES; self.driveService.maxRetryInterval = 60.0;

但它没有效果。

  1. 是否可以为批量查询设置重试?
  2. 我是否需要将重试设置为GTMHTTPFetcher
  3. 任何关于在objective-c中实现指数退避的代码片段都表示赞赏。

1 个答案:

答案 0 :(得分:3)

标准指数退避(如Google文档中所示)不是处理速率限制错误的正确方法。您只需重试Drive并使问题变得更糟。

此外,如果您有超过20个左右的更新,那么批量发送多个更新几乎可以保证触发速率限制错误,所以我也不会这样做。

我的建议是: -

  1. 请勿使用批次,或者如果您这样做,请将每批次保持在20次以下更新
  2. 如果您获得了速率限制,请在重试之前退回至少5秒
  3. 将更新保持在20以下,或者将提交率保持在每2秒一次以下,尽量避免速率限制错误
  4. 这些数字都没有记录,可能会有变化。

    3的原因是驱动器中存在(有,谁知道)错误,即使更新返回了速率限制错误,它确实成功了,因此您最终可能会插入重复文件。见403 rate limit on insert sometimes succeeds