目标是减少一段代码的 CPU 成本和响应时间,该代码经常运行并且每次必须 db.get() 数百个键。
这甚至行得通吗?
当我减小实体的大小时,我可以期望具有数百个键的 db.get() 的 API 时间大致线性减少吗?目前该实体附有以下数据:9 个字符串、9 个布尔值、8 个整数、1 个 GeoPt、2 个日期时间、1 个文本(平均大小 ~100 字节 FWIW)、1 个参考、1 个字符串列表(平均大小 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()
假设我将 Thing 重新定义为精简并推出新版本:
class Thing(db.Model):
num = db.IntegerProperty()
我又拿回来了:
thing_again = Thing.get_by_key_name('thing1')
我是否减少了该实体的获取时间?