2

コンテキスト: Memcached の使用。(Google App Engine と Objectify を使用しますが、これは関係ありません)

簡単な例として、Player と Game の 2 つのエンティティを持つゲームを作成します。多くの場合、ユーザーは開いている 1 つのリクエスト ゲームやプレイヤー プロファイルを調べることができます。100 ゲームまたは 3000000 ゲームが開いている可能性があります。

(1)すべてのエンティティにキャッシングを使用するのは良い考えですか? 未使用の RAM がある場合、ゲームやプレーヤーで使用しないのはなぜですか? これには悪いケースがありますか?(データにアクセスするキャッシュを除いて、ほとんど時間がありません)

(2)もう 1 つの質問は、オブジェクトをロードするときに、格納されているオブジェクトを最適化するためにパーティション化する必要があるかどうかです。たとえば、次のようにします。

player {
  email
  pass

  punctuation          // This data will change quite frequently
  numGamesClosed       // This data will change quite frequently
}

多分よくなる:

 @Entity     //DataStore entity
 player {
    email
    pass
 }

 @Cache     //The entity will be cached into Memchached
 @Entity    //DataStore entity
 DatosJugador
 {
    @Parent Key <Player> owner;
    punctuation
    numGamesClosed      
 }

どうもありがとう

4

1 に答える 1

3

memcache が使用する「RAM」は、アプリケーションからのものではなく、共有されている GAE に汎用の memcached メモリのプールからのものです。アプリケーションのすべてのインスタンスが同じ memcache を「参照」します。

memcache に入れるものは、アプリケーションの RAM 使用量にはカウントされません。

ただし、me​​mcache の内容はいつでも予告なしに削除される可能性があります。したがって、(memcache に入れることができるオブジェクトのサイズの上限を除いて) すべてをキャッシュしない理由は実際にはありません。ただし、要求した時点でデータストアがキャッシュにない場合は、データストアにフォールバックできます。 .

于 2012-12-10T12:25:55.797 に答える