【发布时间】:2010-11-13 12:43:10
【问题描述】:
如何在 Google App Engine 中缓存引用属性?
例如,假设我有以下模型:
class Many(db.Model):
few = db.ReferenceProperty(Few)
class Few(db.Model):
year = db.IntegerProperty()
然后我创建了许多Many,它们只指向一个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都会触发数据库查找吗? - 如果是,是否可以缓存某处,因为每次只需一次查找就足以带来相同的实体?
正如一条评论中所述:我知道 memcache,但是当我通过引用调用另一个实体时,我不确定如何“注入”它。
在任何情况下,memcache 都不会有用,因为我需要在执行中进行缓存,而不是在它们之间。使用 memcache 无助于优化此调用。
【问题讨论】:
标签: python database performance google-app-engine google-cloud-datastore