Google App Engine HRD - 如果我超过写入实体组的每秒写入次数限制怎么办?

时间:2012-05-04 18:46:01

标签: google-app-engine google-cloud-datastore

根据Google App Engine文档,在使用High Replication数据存储区时,写入一个实体组的速度限制为每秒一次。所以......

  1. 如果超过此限制会怎样?某种例外?我该怎么办?
  2. 我怎么知道我接近超过这个限制?我可以设计应用程序的方式,特定的操作(添加实体...)不太可能经常发生,但自然我无法保证。

2 个答案:

答案 0 :(得分:15)

基于GAE文件和我有限的经验:

  1. 期待类似1 QPS的费率并相应地调整您的应用。
  2. Sharding是处理数据存储区争用的常见模式。
  3. 始终添加防御性代码以处理每个可能的异常(Application Error 5, The datastore operation timed out, Transaction collision for entity group,..)
  4. 如果出现错误,请重试写入以适当的任务队列移动任务,或者,如果可以,只需提醒用户重试。
  5. 重试写入,通常有效。
  6. 如果可能,请使用后写缓存机制移动写入操作,这可能导致争用MemcacheTaskqueue,从而降低数据存储命中率。
  7. 避免争用的一个好方法是保持实体组较小,但不要过多依赖它。
  8. 即使是单一实体也可能存在争用。

答案 1 :(得分:9)

每秒一次写入有点低。它实际上支持更多。我甚至会说每秒5到10次写入,但我当然不能保证。

如果达到该限制,您将获得异常。异常消息将是:
 Too much contention on these datastore entities. please try again.

但我不知道/记得会引起的确切异常。

您可以选择重试,继续或其他任何您认为适合的地方。

你不知道你是否接近每秒写1次限制。它发生了,你处理它。