2011-12-23 4 views
2

私たちの状況は以下の通りです: 私たちは、複数のチームがスマホスフォンで街を歩き回って歩いている間に都市のゲームをすることを意図している学校プロジェクトに取り組んでいます。 このように、私たちは都市内を歩き回っている10人のアクティブなスマートフォンを、その場所を掲示し、Googleのappengineからデータを要求することができます。複数のGoogle App Engineインスタンスに対してグローバル変数を永続的に保持するにはどうすればよいですか?

誰かが私たちは保存するために、GoogleのAppEngineのは、これらのチームは、送信するすべてのデータを保存するために提供し、データストアとの要求を使用しているなど

これらすべてのチームが歩き回る見て、ウェブブラウザの背後にある、と彼らにメッセージを送信しますしかし、私たちはすぐに読んだり書いたりできる最大の限界に達していることを知りました。そのため、定期的な更新(読み込みと書き込みのコストが最も高い)を検索できるソリューションを探しました。限られたリソースgoogleが提供します。そして明らかに、それは学校プロジェクトであるため、私たちはより多くの読み書きをしたいとは思っていません。

この情報をグローバル変数に格納するのは簡単で簡単な解決策でしたが、実際にテストを開始したときに私たちのデータの一部が失われて再現されていることがわかりました。これは、新しいインスタンスが作成されたクラウドに対して非常に多くのリクエストが行われ、インスタンスがこれらのグローバル変数を永続的に保持しないためであることが判明しました。

Googleの質問は次のとおりです。 実行中のすべてのGoogle App Engineで、これらのグローバル変数が常に同じであることを確認できますか? または 実行するインスタンスの数を制限することはできますが、「1」に対して実行された要求の数にかかわらず可能です。 OR データストアを使用せずに、グローバルを使用せずに、このデータをより良い方法で保存する別の方法がありますか?

答えて

3

memcacheを使用する必要があります。 ndb(新しいデータベース)ライブラリを使用すると、クエリの結果を自動的にキャッシュすることができます。明らかに、これはあなたの書き込みを大幅に改善することはありませんが、読める回数を大幅に改善するはずです。

いつでもmemcacheからデータを取り出すことができるため、データストアを使用してバックアップする必要があります。あなたがアップデートを失うという(小さな)チャンスを逃したくないなら、あなたは単にmemcacheを使うことができます。データストアにメッセージIDだけを格納し、コントローラが定期的にすべてのメッセージIDにmemcacheに対応するエントリがあることを確認させるなどの作業を行うことができます。 1つが不足している場合は、コントローラーに再入力する必要があります。

+0

ありがとうございます。私たちはmemcachingを使用しようとしますが、問題は主に私たちの読書にあるので、うまくいけば私たちの問題を解決できます。私はmemcacheのメカニズムを実装しようとした後に報告しますgoogle [リンク](http://code.google.com/intl/nl/appengine/docs/python/memcache/usingmemcache.html) – user1113380

+0

Memcachingは実際に私たちの問題を解決!どうもありがとう – user1113380

0

興味深い質問です。いくつかの悪いニュースが最初に、私はデータを格納するより良い方法はないと思う。いいえ、新しいインスタンスが生成されるのを止めることはできず、別のインスタンスには常に同じデータを持たせることはできません。

あなたができることは、データストアのマスターレコードとインスタンスを定期的に同期させることです。これを知的に実行する頻度を選択し、情報を一括してダウンロード/アップロードすれば、あなたのために働くレベル。これは確かにkludgeの領土にあります。

自由度のある読み取り/書き込みの制限を見つけることはできませんが、それほど些細なことではありませんが、わずか10個のスマートフォン私に赤旗を上げる。あなたはスマートフォンが合理的な頻度で投票されている(または呼び出している)のは確かですか?あなたが不必要にそれらを叩くかもしれないように聞こえます。

+0

無料の読み込み量は1日に0.05百万コールです。問題を解決するためにmemcachingを使用しようとしています。読み込み量がほとんどで、書き込み量はそれほど多くありません。 (無料書き込みの金額は1日に0.05百万コールです) – user1113380

0

ピア間の通信にジャバープロトコルを考慮してください。無料の制限はかなり高いレベルです。

0

まず、Tim Delaney氏が言ったように、memcacheを使ってください。それだけでおそらくあなたの問題を解決するでしょう。

そうでない場合は、プッシュモデルを検討する必要があります。利点は、何かが実際に変更された場合に限り、クライアントが常に新しいデータを要求してくるということではありません。更新情報がプッシュメッセージで配信できるほど小さい場合は、memcacheミスやその他の重複した作業に関するデータストアの読み込みをすべてのクライアントで心配する必要はありません。それをみんなに押し出す。

プッシュの最初のオプションはC2DM(Android)またはAPN(iOS)です。これらは、送信するデータの量と更新頻度によって制限されます。

もしあなたが好きなら、代わりにXMPPを使うことができます。これにより、ペイロードの更新頻度を増やすことができますが、より多くのエンジニアリングが必要になる可能性があります。開始点については、AndroidiOSについてのStack Overflowの質問を参照してください。

楽しくお楽しみください!

関連する問題