0

シャード化されたエンティティを集約する際に、Google App Engine が強力な恒常性を確保しようとしていることに問題があります。私は当初、キーによるバッチ「取得」によって読み取りが最新であることを保証すると想定していましたが、それが正しくないことを学びました。今、私はどうすれば強い恒常性を達成できるかについて混乱しています。

これが私がやろうとしていることです: ユーザーが投票で投票する「ゲーム」を構築しています。投票は迅速に (ユーザーの 1 分間に約 1 回) 行われるため、ユーザーが投票を行う際にボトルネックにならないようにするためのシェーディング手法が必要だと思います。ユーザーが投票すると、ポーリング エンティティが読み取られて、ポーリングがまだ実行されていることが確認されます。次に、シャードへの投票の書き込みが成功すると、ユーザーは投票がカウントされたという通知を受け取る必要があります (返されたページで) )。投票が終了すると、シャードが組み立てられ、各ユーザーの投票に基づいて計算が行われます。結果が表示されます。

確認を受け取ったユーザーの投票が、シャード集計中に実際に表示されることが重要です。サーバーがユーザーの投票を拒否した場合 (特にポーリングの終了間近の場合) は問題ありませんが、ユーザーは失敗通知を受け取る必要があります。GAE の結果整合性保証により、(基本的なシェーディングのみを使用する場合) ユーザーが投票をシャードに正常に書き込む (そして成功通知を受け取る) ケースが発生する可能性があることを心配していますが、アキュムレータはまだ更新を認識せず、そのユーザーの投票は最終集計にカウントされません。

これを防ぐことは可能ですか?実際にこれについて心配する必要さえありますか?

ありがとう!

4

1 に答える 1

0

リアルタイムの結果を達成しようとしている場合は、memcacheを使用してください。incr() メソッドは、投票ゲームにとって特に重要です。結果をデータストアに書き込む頻度を大幅に減らすことができるため (たとえば、100 票ごとに、また投票の最後にもう一度)、パフォーマンスが大幅に向上します。この方法でシャーディングを回避できる場合もあります。

于 2013-06-02T20:08:18.007 に答える