Google应用引擎具有智能功能,名为后向引用,我通常在需要使用传统SQL计算列的地方进行迭代。应用引擎的后台引用太慢。我怎样才能让它更快?
想象一下,需要积累特定的力量总hp。
class Force(db.Model):
hp = db.IntegerProperty()
class UnitGroup(db.Model):
force = db.ReferenceProperty(reference_class=Force,collection_name="groups")
hp = db.IntegerProperty()
class Unit(db.Model):
group = db.ReferenceProperty(reference_class=UnitGroup,collection_name="units")
hp = db.IntegerProperty()
当我喜欢编码以下,这是可怕的慢(几乎3S)与20点的力与单个组 - 单个单元。 (我猜是反向引用强制重新加载子实体,对吧?)
def get_hp(self):
hp = 0
for group in self.groups:
group_hp = 0
for unit in group.units:
group_hp += unit.hp
hp += group_hp
return hp
如何优化此代码?请考虑应为每个部队/单位组计算更多属性,我不想将这些集体属性保存到每个实体。 :)
小心不要创建太大的实体组。同一实体组中的所有内容都必须位于同一台服务器上,Google会对可同时进行多少次更新提出一些限制。请参阅本页顶部的说明http://code.google.com/appengine/articles/sharding_counters.html – user27478 2010-05-13 17:23:18
绝对正确,@gerdemb。 – 2010-05-13 17:58:15