2012-05-04 14 views
8

Google App Engineのドキュメントによると、1つのエンティティグループへの書き込みは、High Replication Datastoreを使用すると1秒あたり1回の書き込みに制限されます。だから...Google App Engine HRD - エンティティグループへの書き込みの1秒あたりの書き込み制限を超えるとどうなりますか?

  1. この制限を超えるとどうなりますか?何らかの例外がありますか?そして私はどうしたらいいですか?
  2. この制限を超えることがわかりましたか?私は特定のアクション(エンティティを追加する...)が頻繁に起こりそうにないようにアプリケーションを設計することができますが、当然それを保証することはできません。

答えて

9

1秒あたりの書き込み数は少し低くなります。実際にそれ以上のものをサポートしています。私は毎秒5から10回の書き込みを言うだろうが、私はもちろんそのことを保証することはできない。

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

しかし、正確な例外が発生するかどうかはわかりません。

あなたは、再試行するか、続行するか、その時点で正しいと思われるものがあります。

1秒あたりの書き込み制限が1に近いかどうかはわかりません。それは起こり、あなたはそれに対処します。 GAEのドキュメント上で、私の限られた経験から基づい

+1

java.util.ConcurrentModificationExceptionは、あなたが探している例外です。 –

+0

私はそうではありません。 javaを使用しない;)。しかし、もしそうなら、これはおそらく私が探している例外であろう。 – aschmid00

+0

HRDの場合、実際には限界値は1に近い値になります。 –

15

  1. 応じて1 QPS率とチューニングのアプリのようなものを期待しています。
  2. Shardingは、データストアの競合を処理する一般的なパターンです。
  3. あなたは、もう一度試すようにユーザーに警告することができた場合は、必ず、エラーの場合は、すべての可能な例外を処理するために、守備のコード(Application Error 5, The datastore operation timed out, Transaction collision for entity group、...)
  4. を追加し、適切なタスクキューにタスクを移動する書き込みを再試行しますか。
  5. 書き込みを再試行すると、が通常になります。
  6. 可能であれば、ライトバックキャッシュメカニズムを使用して、書き込み操作を移動させて、競合が発生する可能性があります。これは、データストアのヒット率を遅くするMemcacheおよびTaskqueueです。
  7. 競合を避けるための良い方法は、エンティティグループを小さく保つことですが、あまりにも多くは考慮しません。
  8. 単一のエンティティでも競合を起こすことができます。
関連する問題