为了减少数据存储区的读写,人们建议使用memcache:
写:
entity.put()
memcache.set(entity.key.id(), entity)
读:
# id known:
entity = memcache.get(id)
if entity is None:
entity = Model.get_by_id(id)
memcache.set(id, entity)
我想将上述功能实现为两个功能:
def memPut(entity):
entity.put()
memcache.set(entity.key.id(), entity)
def memGet(Model, id):
entity = memcache.get(id)
if entity is None:
entity = Model.get_by_id(id)
memcache.set(id, entity)
memGet
只是假设。我的问题:1)如何将Model的名称作为参数传递给函数? 2)如果在没有指定id的情况下创建实体,GAE将使用整数作为其id。如果有两个具有相同ID的实体(当然来自不同型号)怎么办? memcache.get(id)会工作吗?
答案 0 :(得分:2)
如果你想为所有实体类型提供相同的函数,一个简单的选择就是从父模型中继承所有模型,它实现了以下类方法:
class ParentClass(db.Model):
@classmethod
def memPut(cls, entity):
entity.put()
memcache.set(entity.key().id(), entity)
@classmethod
def memGet(cls, id):
entity = memcache.get(id)
if entity is None:
entity = cls.get_by_id(id)
memcache.set(id, entity)
return entity
然后,在你的处理程序中:
MyModel.memPut(entity)
entity = MyModel.memGet(id)
答案 1 :(得分:2)
为什么不使用ndb.Model而不是db.Model?
https://developers.google.com/appengine/docs/python/ndb/
NDB API在无模式对象数据存储区中提供持久存储。它支持自动缓存,复杂查询和原子事务。 NDB非常适合存储结构化数据记录。它提供了App Engine数据存储区API的替代方案。 NDB具有数据存储API缺少的一些功能:
StructuredProperty类,它允许实体具有嵌套结构 集成的自动缓存,通常通过上下文缓存和Memcache提供快速(和廉价)读取 允许并发操作的异步API(如果不需要,则为“同步”API)