【发布时间】:2015-11-22 12:21:56
【问题描述】:
我在 Google 云端硬盘域中有大量用户和文件。 +100k 用户,+10M 文件。我需要每个月获取这些文件的所有权限。
每个用户都有自己拥有的文件,以及由其他域用户和/或外部用户(不属于域的用户)共享的文件。大多数文件归域用户所有。域用户拥有超过 700 万个唯一文件。
我的应用是一个后端应用,它使用域管理员用户授予的令牌运行。
我认为执行批量请求是最好的方法。然后,我在谷歌开发者控制台中将我的应用程序配置为每个用户 1000 个请求。
我尝试了以下几种情况:
- 每批 1000 个请求,每个用户最多 1000 个 -> 大量用户速率限制
- 每批 1000 个请求,每个用户最多 100 个 -> 大量速率限制错误
- 每批 100 个请求,每个用户最多 100 个 -> 大量速率限制错误
- 每批 100 个请求,每个用户最多 50 个 -> 大量速率限制错误
- 每批 100 个请求,每个用户最多 10 个 -> 不再出错
我正在使用 quotaUser 参数来唯一标识批处理请求中的每个用户。
我检查了我的应用程序,以确认每个批次都不会超出时间。我还检查了每个批次是否不超过配置为获取的 file_id 的限制。一切正常。
我也会等待每批完成后再发送下一批。
每次看到超过 403 速率限制时,我都会进行指数退避。有时我必须在 9 步后重试,即等待 2**9 秒。
所以,我看不出 Google Drive API 限制的意义。我确定我的应用程序一切正常,但我无法提高每秒获取更多权限的限制。
【问题讨论】:
-
不清楚每个用户是否有不同的文件,它们是否归用户或单个谷歌帐户所有,以及您是否使用用户的访问令牌或所有用户的相同令牌执行请求。
-
@ZigMandel 我很确定用户速率是由 UserIP 或 quotaUser 参数控制的,谁拥有该文件并不重要。这是我们可以测试的。
-
您是否尝试过进入 Google Developers 控制台 API -> google Drive -> 配额并增加每用户限制?
-
是的,我问的很重要。回答所有这些问题,也许我可以提供帮助
-
@ZigMandel 有 +7M 的唯一文件,还有很多用户之间共享的文件,但我的应用程序足够聪明,可以跳过它们。我使用相同的令牌代表每个域用户获取权限。
标签: google-api google-drive-api google-api-python-client