批量查询超出速率限制

Posted

技术标签:

【中文标题】批量查询超出速率限制【英文标题】:Rate limit exceeded in Batch query 【发布时间】:2014-06-27 00:40:39 【问题描述】:

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

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

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

但是没有效果。

    批量查询可以设置重试吗? 是否需要将启用重试设置为GTMHTTPFetcher

感谢任何关于在 Objective-c 中实现指数退避的代码 sn-p。

【问题讨论】:

现有样本(可能是 dredit)显示 exp。退避样本。 drive api 文档也可以。 【参考方案1】: Google 文档中显示的

标准指数退避并不是处理速率限制错误的正确方法。您只会重试重载驱动器并使问题变得更糟。

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

我的建议是:-

    不要使用批处理,或者如果使用,请将每个批处理保持在 20 次以下更新 如果您获得速率限制,请退避至少 5 秒,然后再重试 通过将更新保持在 20 以下或将提交率保持在每 2 秒一次以下来尝试避免速率限制错误

这些数字都没有记录,可能会发生变化。

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

【讨论】:

以上是关于批量查询超出速率限制的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery 速率限制 Tableau

Java HSQLDB - 批量插入:OutOfMemoryError:超出 GC 开销限制

Mybatis 批量操作-删除修改和查询

ElasticSearch批量查询

elasticsearch获取大批量数据时 深度分页(from&size) VS scroll游标查询

上传期间引发“超出速率限制”错误的速率限制是多少?