データストアへのアクセスを減らすためにやっていること。
■保存する方法
データストアへの保存を避けることはできないので、取り出すときに備えて取り出しやすいようにした。具体的には以下。
■取得する方法
- データストアのエンティティには必ずkey_nameを指定する
- memcacheにデータストアのkey_nameと同じkeyでデータを保存する
- memcacheにkey_name+'_KEY'で保存したエンティティのkeyオブジェクトを保存する
保存時にやったキャッシュをできるだけ使う。これでアプリケーションのレスポンスとCPUリソース消費の削減につながる。
- 取得対象となるデータのkey_nameをPythonのロジックで生成する
- memcache.get()の引数に生成したkey_nameを指定してデータを取得する
- memcache.get()の引数に生成したkey_name+'_KEY'を指定してデータストアのkeyオブジェクトを取得し、Model.get()の引数に指定してデータを取得する
- Model.get_by_key_name()の引数に生成したkey_nameを指定してデータを取得する
当初はQueryクラスを使ってデータを取得しようとしたが、indexを利用したとしても件数が増えるとそれだけ遅くなるので、直接エンティティのkey_nameでアクセスするように変更した。
ただ、memcache.get()+Model.get(keyオブジェクト)とModel.get_by_key_name()でどちらが軽いのかは調べていない。get(keyオブジェクト)はデータストアに直接アクセスするが、get_by_key_name()はkey_nameから実際のkeyオブジェクトを取得して、そのkeyオブジェクトを使ってデータストアにアクセスするようだ。
memcacheの揮発を回避するための対策なので、memcacheのQuotaが逼迫するようであればmemcache.get()+Model.get(keyオブジェクト)を削除する。
コメント
コメントを投稿