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させてみるよーなのにかえてみたところ
まあ、あたりまえなんだけど、
google app engineでも割としっかりしないと
こんな事になっちゃうぞーっていう人柱レポでしたとさ。
ちなみに、あなたのopenPNEでも同じようなチャット機能実装したい!
とかって要望があればお問い合わせくださいな。