8

Google App Engine のドキュメントによると、High Replication Datastore を使用する場合、1 つのエンティティ グループへの書き込みは 1 秒あたり 1 回に制限されています。そう...

  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との競合につながる可能性のある書き込み操作を移動し、 Taskqueueを使用してデータストアのヒット率を低下させます。
  7. 競合を回避する良い方法は、エンティティ グループを小さく保つことですが、あまり期待しないでください。
  8. 単一のエンティティでも競合する可能性があります。
于 2012-05-04T21:22:40.820 に答える
10

1 秒あたり 1 回の書き込みは少し低いです。実際にはそれ以上をサポートしています。1 秒あたり 5 ~ 10 回の書き込みとさえ言えますが、もちろんそれを保証することはできません。

その制限に達すると、例外が発生します。例外メッセージは次のようになります。
Too much contention on these datastore entities. please try again.

しかし、発生する正確な例外を知らない/覚えていません。

再試行するか、続行するか、その時点で正しいと思われるその他のことを選択できます。

毎秒 1 回の書き込み制限に近づいているかどうかはわかりません。それは起こり、あなたはそれに対処します。

于 2012-05-04T19:09:32.013 に答える