私は基本的に古典的な多対多のモデルを持っています。ユーザー、アワード、およびユーザーとアワード間の「多対多」テーブルマッピング。
各ユーザーには約400の賞があり、各賞は約1/2のユーザーに与えられます。
ユーザーのすべてのアワードを繰り返して、ポイントを合計したいと思います。SQLでは、多対多間のテーブル結合になり、各行をウォークスルーします。MySQLインスタンスを備えたまともなマシンでは、400行はまったく大したことではないはずです。
App Engineでは、合計を行うのに約10秒かかります。ほとんどの時間はGoogleのデータストアで費やされています。これがcProfileの最初の数行です
ncalls tottime percall cumtime percallファイル名:lineno(関数) 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}
私のデータモデルは間違っていますか?ルックアップを間違って行っていますか?これは、キャッシングとバルク更新に対処しなければならない欠点ですか(これはお尻の王室の痛みになります)。