8

根据 Google App Engine 文档,在使用 High Replication Datastore 时,写入一个实体组被限制为每秒一次写入。所以...

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

2 回答 2

16

根据 GAE 文档和我有限的经验:

  1. 期望像 1 QPS 速率并相应地调整您的应用程序。
  2. 分片是处理数据存储争用的常见模式。
  3. 始终添加防御性代码来处理所有可能的异常 ( Application Error 5, The datastore operation timed out, Transaction collision for entity group, ..)
  4. 如果出现错误,请重试将任务移动到适当的任务队列中,或者,如果可以,请提醒用户重试。
  5. 重试写入,通常有效。
  6. 如果可能,请使用后写缓存机制将可能导致争用的写入操作移动到Memcache和降低数据存储命中率的任务队列。
  7. 避免争用的一个好方法是保持实体组较小,但不要过分依赖它。
  8. 您甚至可以在单个实体上发生争用。
于 2012-05-04T21:22:40.820 回答
10

每秒写一次有点低。它实际上支持的不止这些。我什至会说每秒写入 5 到 10 次,但我当然不能保证。

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

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

您可以选择重试、继续或此时您认为正确的任何其他方式。

您无法判断您是否接近每秒 1 次写入的限制。它发生了,你处理它。

于 2012-05-04T19:09:32.013 回答