4

私は NDB への移行の過程にあり、2 つのモデル セットを使用していgoogle.appengine.ext.dbますgoogle.appengine.ext.ndb

NDB ベースのモデルを読み取り専用で使用し、NDB に組み込まれているキャッシングを保持しながら、古いモデルを使用して変更を保存できるようにしたいと考えています (必要に応じてキャッシュを NDB に更新する必要があることを知らせます)。

old に基づいてモデルの変更を保存しながら、NDB の特定のモデル インスタンスのキャッシュをフラッシュ/クリアするにはどうすればよいdbですか?

4

1 に答える 1

14

重複しているモデル クラスのキャッシュを無効にすることをお勧めします。申し訳ありませんが安全です。これは、

   _use_memcache = False
   _use_cache = False

各 ndb.Model サブクラス内 (つまり、プロパティ宣言の前または後)。これに関するドキュメントはこちら: https://developers.google.com/appengine/docs/python/ndb/cache#policy_functions (表の最後を探してください)。

古い db.Model サブクラスを使用してエンティティを作成するときにのみキャッシュを本当にクリアしたい場合は、上記の代わりに次を試すことができます (ent が db.Model サブクラス インスタンスであると仮定します)。

  ndbkey = ndb.Key.from_old_key(ent.key())
  ndbkey.delete(use_datastore=False)

これにより、memcache とコンテキスト キャッシュからキーが削除されますが、データストアからは削除されません。ただし、NDB キーを使用して読み戻そうとすると (またはクエリ結果として返された場合でも)、現在の HTTP 要求ハンドラーが終了するまで削除されたように見え、約 30 秒間 memcache を使用しません。 .

于 2012-04-07T04:10:51.957 に答える