批量查询超出速率限制
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
【讨论】:
以上是关于批量查询超出速率限制的主要内容,如果未能解决你的问题,请参考以下文章
Java HSQLDB - 批量插入:OutOfMemoryError:超出 GC 开销限制