我有一个程序可以向Google Search Analytics服务器发出许多查询。我的程序依次执行查询,因此每个瞬间只有一个查询正在进行中。
谷歌已经建议最多每100秒对2000个查询的吞吐量限制,以便配置我的系统效率更高,我有两个想法:
已知每100秒2000次查询是每0.05秒一次查询,我通过暂停进程分离了我的查询,但只有当任何查询花费的时间少于0.05秒时,进程才会睡眠的时间那种情况是完成0.05秒间隔的剩余时间。如果查询需要0.05秒或更多,我会在不等待的情况下触发以下内容。
第二个想法更容易实现,但我认为效率会降低:我会触发查询,注意流程开始的时间,所以如果我在100秒之前达到2000个查询,我会等剩下的时间在睡觉。
到目前为止,我不知道如何衡量哪一个是最好的。
您对这两个选项有何看法?他们中的任何一个更好,为什么?我还没想到的任何其他选项? (特别是如果它比我的好)
答案 0 :(得分:1)
实际上你需要考虑的是它每100秒发出2000次请求。但你可以在10秒内完成所有2000个请求,但仍然处于配额的好处。
我很好奇为什么你会担心它。如果您收到以下错误之一
Google建议您实施Exponential backoff,其中包括让您的请求暂时停止错误并再次尝试。 (这样做多达八次)。谷歌不会因为收到这些错误而惩罚你,他们只是要求你再等一会儿再等一下。
如果你想发疯,你可以做我在C#应用程序中做的事情我创建了一个请求队列,用于跟踪自我创建最后100个请求以来已经过了多少时间。我称之为Google APIs Flood Buster。
基本上我有一个队列,在我发出新请求之前我记录每个请求我检查自我开始以来已经消失了多长时间。是的,这需要稍微移动队列中的项目。如果已经超过90秒然后我睡觉(100次),这大大减少了我的错误。它并不完美,但这是因为谷歌在跟踪配额方面并不完美。他们通常会稍微休息一下。