Google App Engine で参照プロパティをキャッシュするにはどうすればよいですか?
たとえば、次のモデルがあるとします。
class Many(db.Model):
few = db.ReferenceProperty(Few)
class Few(db.Model):
year = db.IntegerProperty()
Many
次に、1 つだけを指す多くの を作成しますFew
。
one_few = Few.get_or_insert(year=2009)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
Many.get_or_insert(few=one_few)
ここで、すべての を反復処理して値をMany
読み取りたい場合は、次のようにします。few
for many in Many.all().fetch(1000):
print "%s" % many.few.year
質問は:
- アクセスごと
many.few
にデータベース ルックアップがトリガーされますか? - はいの場合、毎回同じエンティティを取得するには1回のルックアップで十分であるため、どこかにキャッシュすることは可能ですか?
あるコメントで述べたように、memcache については知っていますが、参照を介して他のエンティティを呼び出すときに「注入」する方法がわかりません。
いずれにせよ、実行間ではなく実行内でキャッシングする必要があるため、memcache は役に立ちません。memcache を使用しても、この呼び出しの最適化には役立ちません。