目标是减少一段经常运行的代码的CPU成本和响应时间,并且每次必须db.get()几百个密钥。
我可以期望db.get()的API时间有几百个键 当我减小实体的大小时,大致线性地减少? 目前,该实体附有以下数据:9字符串,9 布尔值,8个整数,1个GeoPt,2个DateTime,1个文本(平均大小~100个字节 FWIW),1个参考,1个StringList(平均大小为500字节)。目标是 将绝大部分此类数据移至相关类中以便 主要模型的核心提取将很快。
在重构之后,我仍然会遇到同样的情况 高成本获取现有实体?文档说明了所有 同时获取模型的属性。请问老了 不需要的属性仍在我的角钱和用户上通过RPC传输 等待?换句话说:如果我想减少我的实体的加载时间,那就是 有必要将旧实体迁移到具有新实体的实体 定义?如果是这样,重新放入()实体就足够了,或者我必须这样做 在一个全新的密钥下保存?
考虑:
class Thing(db.Model):
text = db.TextProperty()
strings = db.StringListProperty()
num = db.IntegerProperty()
thing = Thing(key_name='thing1', text='x' * 10240,
strings = ['y'*500 for i in range(10)], num=23)
thing.put()
假设我重新定义要精简的东西并推出一个新版本:
class Thing(db.Model):
num = db.IntegerProperty()
我再次取回它:
thing_again = Thing.get_by_key_name('thing1')
我是否缩短了此实体的获取时间?
答案 0 :(得分:12)
按顺序回答您的问题:
答案 1 :(得分:1)
要从实体中删除属性,您可以将模型更改为Expando,然后使用 delattr 。它在App Engine文档中有记录:
http://code.google.com/intl/fr/appengine/articles/update_schema.html
标题为“从数据存储中删除已删除的属性”
答案 2 :(得分:0)
如果我想缩小我的尺寸 实体,是否有必要迁移 旧实体与新实体 定义
是。 GAE数据存储只是一个大的键值存储,它对模型定义一无所知。所以旧值将是旧值,直到您将新值放入!