0

我正在尝试在我们的服务上获取一堆用户的电子邮件。我首先得到一个消息列表,如果消息不在 DataStore 中,那么我们获取它们。但是,我使用延迟库来避免 DeadlineExceeded 错误。目前的算法是:

  1. 将每个用户任务放在一个队列中
  2. 对于每个用户,获取消息列表
  3. 对于此列表中的每 10 条消息,排队以一次获取 10 条消息。

但是,我意识到这也超出了速率限制,因为我每秒可以执行超过 10 个查询。当我尝试一次只发送 1 条消息而不是 10 条消息时,包括获取消息列表(这对每页电子邮件发出 1 个网络请求),我收到一个错误消息,说我使用了太多内存并且我的过程是关闭。什么是最好的算法,这样我就可以确保我的 GMail 始终低于 10 qps 并且不会耗尽内存?

4

2 回答 2

1

我不认为达到速率限制有什么大不了的,只要确保你处理错误并在这种情况下放慢一点。分批获取 10 条消息似乎很好。

于 2014-10-27T01:51:53.320 回答
0

如果在您描述的场景中内存不足,则意味着您的代码中存在内存泄漏或无限循环。可以在尽可能小的实例上轻松处理 10 个查询。

于 2014-10-25T14:09:12.337 回答