更高效地在memcache中存储实体

标签:Google App Engine, Python

刚才在Nick的博客读了一篇《Efficient model memcaching》,才知道原来memcache会使用pickling来存储实体,而GAE不能使用cPickle,所以速度较慢,而且存在兼容性问题,并且可能保存多余的内容(模型实体通常会有个cache镜像)。

而在SDK 1.2.5的数据库API里提供了2个新的方法来解决这个问题:model_to_protobuf(model_instance)和model_from_protobuf(pb)。
这2个方法的速度较快,且不存在兼容性问题。
Nick还给了些例子说明如何使用:
from google.appengine.api import memcache
from google.appengine.ext import db
from google.appengine.datastore import entity_pb

entity = memcache.get("somekey")
if entity:
  entity = db.model_from_protobuf(entity_pb.EntityProto(entity))
else:
 entities = MyModel.all().fetch(10)
 memcache.set("somekey", db.model_to_protobuf(entities).Encode())
可以注意到新增了entity_pb这个模块,而且可以直接处理实体集(下面还给了个自己处理多个实体的例子)。

2条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?