0

是否可以像这样解析谷歌应用引擎对象......

objects = db.GqlQuery('SELECT * FROM Database WHERE item='random'')
memcache.add('object', objects, 3600)
if object =='some condition':
  #here can I do a query on 'objects' without using GqlQuery
elif object =='something else':
  #do a different query than the one above

这个想法是将一个对象存储到内存缓存中,然后以不同的方式操作该对象。这是为了减轻数据存储读取。提前致谢!

4

1 回答 1

2

你可以,每个人都会发现他们这样做了。但是,您需要考虑很多事情。

  1. 目前,您正在尝试将查询对象而不是结果存储在 memcache 中。 objects在您的代码中是一个查询对象。使用 run、fetch 等来获得一些结果。

  2. 操作对象并将其存储在 memcache 中而不回写将意味着您将丢失数据等。memcache 不是 appengine 上的可靠存储机制(它只是一个缓存),并且可以随时驱逐事物。

  3. 如果您的查询旨在返回单个结果,则通过键获取对象与查询相比,它的效率要高得多,而且速度也不慢很多。(ndb 将为您缓存获取 - 请参阅下一点)

  4. 看起来您是从 appengine 开始的,如果您没有现有的代码库,请从而ndb不是db. 在我看来,这是一个更好的图书馆。 ndb在 memcache 和请求/实例中为您做了很多缓存(使用 get() 时)。

于 2013-10-27T06:36:55.700 回答