我基本上有经典的多对多模型。一个用户,一个奖项,以及用户和奖项之间的“多对多”表映射。
每个用户有大约 400 个奖励,每个奖励给大约 1/2 的用户。
我想遍历所有用户的奖励并总结他们的积分。在 SQL 中,它将是多对多之间的表连接,然后遍历每一行。在具有 MySQL 实例的体面机器上,400 行根本不是什么大问题。
在应用引擎上,我看到大约需要 10 秒来计算总和。大部分时间都花在 Google 的数据存储中。这是 cProfile 的前几行
ncalls tottime percall cumtime percall filename:lineno(function) 462 6.291 0.014 6.868 0.015 {google3.apphosting.runtime._apphosting_runtime___python__apiproxy.Wait} 913 0.148 0.000 1.437 0.002 数据存储.py:524(_FromPb) 8212 0.130 0.000 0.502 0.000 datastore_types.py:1345(FromPropertyPb) 462 0.120 0.000 0.458 0.001 {google3.net.proto._net_proto___parse__python.MergeFromString}
我的数据模型错了吗?我做错了吗?这是我必须处理缓存和批量更新的一个缺点吗(这将是一个非常痛苦的事情)。