質問

まあ、私はここに非常に基本的な疑問を持っていると思います

私はGAE(Java)の上のアプリを開発し、多くのことを返すデータストアにクエリを実行しています エンティティの、ので、私はそれをキャッシュする必要があります。私はmemcacheのを使用していたし、それは素晴らしい仕事をしていたが、私は静的変数にエンティティのリストを保持する場合、全体の要求はmemcacheのを使用するよりも2倍の速さで行きます。私は、エンティティのすべての時間をデシリアライズいないよので、それはだと思います。

のmemcacheに代わりに静的変数を使用しての欠点は何でしょうか?クラウドで自分のアプリケーションの複数のインスタンス、および私の静的変数のようにいくつかのインスタンスがあり得るかどうかはわからないのですか?

私はキャッシュにしようとしているエンティティのリストは、先週の最良の(大きいスコア)投稿されています。私はそのリストを取り、5つのランダムポストを選択し、ページのカップルに表示します。

助けてくれてありがとう!

役に立ちましたか?

解決

App Engineは、それが増加当たっユーザーの数など、アプリケーションの新しいインスタンスを作成することによって、スケール。 drudruが言ったように、異なるユーザが異なるインスタンスによって提供される可能性があります。一般的には、memcacheのは、あなたが世界的に矛盾しないようにしたい何かを格納するための最速の場所です。しかし、あなたの場合には改善の余地があるかもしれません。

あなたは投稿のリストを持っていて、ランダムにユーザーに表示するように5を選択してください言及します。 2人の異なるユーザーが5の異なるセットを見るかどうかは重要ですか?あなたはとにかくランダムなものを選択している場合は、多分それは問題ではありません。そして、あなたはmemcacheの内の記事の完全なリストを格納し、memcacheののうち5つのランダムなものを引き出し、静的変数に格納することができます。

第二に、あなたは正確に何をmemcachingされ、そしてどのようにそれを引き出していますか?あなたは5を選択、その後、それらをすべて取得し、memcacheのフル柱の全体の束を格納していますか?たぶん、あなたはただ、記事のリストをダウンロード5を選択し、唯一のあなたが必要とする5を得ることができますか?あなたはそれがあなたを減速だデシリアライズだと思うならば、これは役立つかもしれません。あなたがそれらを取得した後、あなたはポスト上の任意の処理を行っていますか?もしそうなら、その処理の結果がキャッシュされるだろうか?

他のヒント

あなたは次の要求がヒットしたときにGoogleが、彼らはそれのように感じる時に仮想マシンを起動および停止して自由であるので、周りのことを静的変数(またはJVMのメモリ内の他の何か)に頼ることはできません。その様子からは、彼らがこの問題を化合物と同じJVMに追加のJVMの代わりに、追加のスレッドを開始することを好むように見える。

しかし、あなたはそれが離れていった場合には他のどこかからデータをロードする方法を持って提供し、キャッシュ層として、静的変数を使用することができる必要があります。

私はまた、あなたが使用することができますどのくらいのメモリ上のクォータがなければならない、そこにメモリ使用量と船外に行くしようとしないでしょう。

ええ、あなたのインスタンスは、インターネット上のさまざまなユーザーに対して同じになるという保証はありません。あなたは、常に最悪の場合には、静的にこれを読んでてしまう可能性があります。 memcacheのは、利用可能であることの高い保証を持っています。私はmemcacheのを使用して、あなたのアプリケーションは、将来的には任意のスケールの問題を持つべきではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top