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

tob*_*bik 8 google-app-engine google-cloud-datastore

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

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

sys*_*out 15

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

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


asc*_*d00 9

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

如果你达到这个限制,你会得到一个例外.异常消息将是:
Too much contention on these datastore entities. please try again.

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

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

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