主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GoogleAppEngine, Python: memcacheを使ってフロントでのデータ処理時間を削る

                
GoogleAppEngineでブログを以前に作った。記事のタイトルや本文などのデータはデータストアに入れ、リクエストがあったときにクエリを発行してデータを再び引き出す。テンプレートを使ってHTMLにデータをはめていき、一つのページを作る。これがもっとも単純なやり方だと思う。
class MainPage(webapp2.RequestHandler):
def get(self):
string = self.request.get('name')
entry = Entry.query().filter('name =', string).get()
template_values = {
'entry': entry,
}

template = JINJA_ENVIRONMENT.get_template('index.html')
self.response.write(template.render(template_values))


ここにmemcacheを使って、リクエスト毎の処理をすっ飛ばせるようにする。
class MainPage(webapp2.RequestHandler):
def get(self):
string = self.request.get('name')
data = memcache.get(string, namespace="article")
if data is not None:
pass
else:
entry = Entry.query().filter('name =', string).get()
template_values = {
'entry': entry,
}
template = JINJA_ENVIRONMENT.get_template('index.html')
data = template.render(template_values)
memcache.set(string, data, namespace="article")

self.response.write(data)

上記のように書く。するとリクエストが二回目以降であった場合、クエリによるデータストアからのデータの引き出しと、テンプレーティングによるHTML生成がすっ飛ばされて、メモリから必要なHTMLが呼び出されるようになる。こうすることで、フロントエンドでのCPU消費を抑えることができる。

注意点としては、データストアのデータ更新時に、memcacheでメモリにのせたデータの更新を忘れないこと。それを考えると、memcacheからのデータの引っ張り出し、memcacheになければデータストアからの引っ張り出しという処理を一つの関数にし、一箇所で管理できるようにしておくのがのぞましい。

class MainPage(webapp2.RequestHandler):
def get(self):
string = self.request.get('name')
data = get_data(string)
self.response.write(data)

def get_data(string):
data = memcache.get(string, namespace="article")
if data is not None:
pass
else:
entry = Entry.query().filter('name =', string).get()
if entry:
template_values = {
'entry': entry,
}
template = JINJA_ENVIRONMENT.get_template('index.html')
data = template.render(template_values)
memcache.set(string, data, namespace="article")
return data




参考:
https://developers.google.com/appengine/docs/python/memcache/usingmemcache?hl=ja
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。