✖
Google App Engine がマイブームだけど、いまいち使いかたがわかってない。
datastore api って想像していたよりもずっと遅くて、普通に read するだけでも結構 CPU Time を消費してしまう (50-80msec?)。ここらへんの感覚は、デプロイしてみないとわからないのでとてもやりにくい。
hookhub.com のトップは、最近フックされたウェブフックを表示しているけど、毎回 datastore に last_hooked 的なプロパティでソートしてつつひいて、さらにそれぞれについての 10 回ぐらい user 情報をひいたりすると、それだけで GAE のログに「最適化が必要なページ」として警告がでる。
少なくともどこかの段階でちゃんとキャッシュしないといけないけど、いまいち感覚がわからない。アプリケーション内のメモリにインスタンスキャッシュさせていけばいいのか、それとも memcache をつかえばいいのか…… 普通どうするんだろ?
今のところ、view を部分的に memcache に入れるような (TT Cache みたいなの) のを入れて、とりあえず警告はでなくなった。むずかしい…… 今はソート済みクエリをキャッシュしてないけど、これも expire つきで memcache に入れたほうがよさそうな気がする。
赤のリクエストが memcache にテンプレートキャッシュするようにしたときのリクエストで、一時的に memcache api も消費したので時間がかかってる。直後から api_cpu_ms が半減しているので、キャッシュの効果はあったようだ。だけど全体としての応答時間はまだまだ極めて遅い……
ちなみにユーザ情報を index つきで一発だけしかひいてない /help の応答時間は 100msec 以下になってる。
datastore はログを見ていると、割と timeout するので、ちゃんとエラー処理をすべきだろう。今はなんもしてないので 500 がでる。
