google app engineでLIMITを超えてみた

非モテSNS内で、mixiのecooのような、
twitterのよーなものを、google app engineを使って開発してみた。
使った言語はAjax + Flash + gae(python+mysql+memcached)。

そんで、手抜き&googleを過信しすぎて
リクエストの度にSQLをたたくような↓みたいな処理をかいてたら、(言語はpython

def get :
   sql = 'SELECT * FROM hoge LIMIT 50';
   dbObj = db.GqlQuery(sql);
   ..

ディスク<帯域<CPUの順に制限が...の記事どおりの現象が発生。1日50万リクエストくらいでCPUオーバー。w

規模としてはだいたい、約1日10万〜30万pv程度で、
会員数は20000人でopenPNEで動いてるサービス。

そんで、仕様をみなおして memcacached 化してみよーとおもって、

def get :
    dbs = [];
    if memcache.get( "db" ) is None:
     dbs = db.GqlQuery('SELECT * FROM hoge LIMIT 50');
     memcache.add(cache_key, dbs , 60*60*10);
    else :
     dbs = memcache.get( "db" )
    ...

まー、ざっくりだけどこんなかんじにしてみた。そーしたら、
いちおう、memcachedから呼んでくれてはいるんだけど、
なんかこれじゃーうまく 結果だけがキャッシュされず、
「DBの処理を行ってその結果を出す」までの処理そのものが
キャッシュされてしまうみたいで、結果だけをうまく収納でけないよーだ。

その後、その結果をコネコネして出力するhtmlのみを
memcachedさせてみるよーなのにかえてみたところ


どきゅーんとCPU負荷はさがりましたとさ。

まあ、あたりまえなんだけど、
google app engineでも割としっかりしないと
こんな事になっちゃうぞーっていう人柱レポでしたとさ。


ちなみに、あなたのopenPNEでも同じようなチャット機能実装したい!
とかって要望があればお問い合わせくださいな。