the*_*jaz 6 python google-app-engine google-cloud-datastore
我的应用程序中有两个模型,Transaction和Person,具有多对多关系.每笔交易都包含人员.对于每个人,还有与该人员所连接的每个交易相关的金额.因此,我需要模拟与关系数据的多对多关系.谷歌建议这种方法:
http://code.google.com/intl/sv-SE/appengine/articles/modeling.html
通过这种方法,我有一个这样的模型:
class TransactionPerson(db.Model):
# References
transaction = db.ReferenceProperty(Transaction, required=True)
person = db.ReferenceProperty(Person, required=True)
# Values
amount = db.FloatProperty(required=True)
Run Code Online (Sandbox Code Playgroud)
但我发现这对性能非常不利,因为如果我需要总结所有交易中每个人的金额,我需要循环Person*Transaction*TransactionPerson次来实现"加入",同时总结金额.
我的想法
我的想法是在Transaction模型中有两个列表:
class Transaction(db.Model):
persons = ListProperty(db.Key)
persons_amount = ListProperty(float)
Run Code Online (Sandbox Code Playgroud)
这样我就不需要遍历每个Person的所有TransactionPerson来查找关联的Transaction.我仍然可以根据Person查询事务.
质询
我怀疑你正在解决错误的问题。中间关联实体是一个好方法。您遇到的问题是摘要需要很长时间才能计算;你应该更关心这一点;
首选的方法是提前计算汇总数据。
在“每人交易总额”的特定情况下,这意味着您想要向人员模型添加一个额外的字段,并使用其所有交易的运行总计来更新它。每当修改 TransactionPerson 时,您都可以更新此值,以便汇总值始终正确。
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |