2012-01-24 2 views
3

私はこのようになりますすべての私のGoogle App Engineのデータストアクラスのスーパークラスを書いてで探しています:App Engine:データストアオブジェクトをキャッシュするための優れた汎用ツールはありますか?

class MemcacheMixin(object): 
    @classmethod 
    def cache_get_by_id(cls, id, parent=None): 
     if memcache.has_key(...): 
      ... 
    ... 

class MyEntity(db.Model, MemcacheMixin): 
    ... 

obj = MyEntity.cache_get_by_id(...) 

私は常にデータストアオブジェクトをキャッシュするほとんどだろうということで考え方、およびI自分自身を繰り返すことを望まない。誰かがすでにこの必要性に対処していて、データストアクラスの仕組みにうまく統合されたこのようなものをキャッシュするための汎用ツールを作成しているはずです。

しかし、私はそれを見つけられませんでした。どんな勧告?

答えて

9

NDB(新しいデータストアライブラリ:また関連

http://code.google.com/p/appengine-afterburner/source/browse/trunk/python/src/afterburner/experimental/memoize.py

は、パフォーマンスのためのモデルのインスタンスではなく、プロトコルバッファをキャッシュする勧告、次のとおりです。ここで良い、簡単な例ですGuidoの開発者で、App Engine 1.6.1 SDKに含まれています)には、組み込み(memcacheとmemory)キャッシング機能があります。

詳細については、documentationを参照してください。

+0

フルテキストインデックス作成をサポートしている場合。 –

+0

@KenはSearch APIを見ています:https://developers.google.com/appengine/docs/python/search/overview – proppy

2

あなたが探しているのは、メモ化デコレータです。

http://blog.notdot.net/2009/9/Efficient-model-memcaching

+0

Memoizationは非常にうまく見えますが、欠落しているのは更新です。エンティティが更新されると、あなたが手動で行うのでなければ、キャッシュを無効にするものはありません。 –

+2

@Kenコンピュータサイエンスには2つの難しいことがあります:キャッシュの無効化と名前の指定 " –

+1

[@Nick @Ken]"コンピュータサイエンスには、キャッシュの無効化、名前の付け方、オフバイワンエラーが発生しました。 – wTyeRogers

関連する問題