2016-07-25 14 views
1

私は、同じ親を持つ約100,000の新しいエンティティ(ユーザーを表す)を作成しようとしています。エンティティグループごとに1つのエンティティ書き込みの制限があることを読んでいます。要求がタイムアウトする可能性があると思ったので、プッシュキュータスクを使用して10分の時間を延長することにしました。プッシュキュータスクのforループでput()を使用しようとしましたが、まだタイムアウトしました(約8,900個のエンティティしか書き込めません)。Google Datastore - 1秒あたりの書き込み制限を超えるとどうなりますか?

なぜ私は同じグループに複数の書き込みをしようとしたのでエラーが発生しなかったのか混乱しています。タスクは10分でタイムアウトしたので、1分間に890回の書き込みが行われ、1秒あたり約14回の書き込みとなります。これは1秒間に1回の書き込みを超える方法です。私はGoogle App Engine HRD - what if I exceed the 1 write per second limit for writing to the entity group?Google Datastore - Not Seeing 1 Write per Second per Entity Group Limitationの答えを読んでいましたが、私の理解によれば、データストアは1秒あたり5~10エンティティを書き込むことができます。私が得た率はそれよりも高かった。

私もhere

そのデータストアの競合を読んで、単一のエンティティまたはエンティティグループがあまりにも急速に更新されたときに発生します。データストアは、並行待機要求をキューに入れます。タイムアウト時間を過ぎてキュー内で待機している要求は、同時実行例外をスローします。

これは、1書き込み/秒を超えるとエラーがスローされないことを意味しますか?書き込みは単にキューに入れられ、要求のタイムアウトが発生するとエラーが発生します(この場合、タスクキューは10分です)。

+0

保証の上限は1/sです。あなたのコードを見ずに詳細を伝えることはできません – marcadian

答えて

3
  1. 自動スケーリングを使用するインスタンスで実行されるタスクでは、10分の制限が適用されます。 100,000人のユーザーをより小さなバッチに分割し、各バッチを別々のタスクで処理することができます。

  2. データストアへのバッチコールを使用すると、1回の呼び出しで最大500個のエンティティを保存できます。これは、各エンティティを個別に保存するよりもはるかに高速です。

  3. すべてのユーザーを同じエンティティグループにする理由はまったくありません。このデータモデルはパフォーマンスにマイナスの影響を与えます。理由は書き込み制限があるからです。エンティティグループは3つのアドレスまたは10のフォトアルバムを持つユーザーのように設計されていますが、ほとんどの場合、ほとんどの場合、値を追加することはほとんどありませんが、親子関係は避けてください。エンティティの取得または保存)。

関連する問題