У меня в основном есть классика для многих моделей. Пользователь, награда и табличное сопоставление "многие-ко-многим" между пользователями и наградами.
Каждый пользователь имеет порядка 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 datastore.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}
Является ли моя модель данных неправильной? Я неправильно делаю поиски? Является ли это недостатком, с которым мне приходится иметь дело с кешированием и массовым рассыплением (что было бы королевской болью в заднице).