目的是减少经常运行且每次必须 db.get() 数百个键的代码的 CPU 成本和响应时间。
这还管用吗?
我可以预期具有数百个键的 db.get() 的 API 时间吗
当我减小实体的大小时大致线性地减小?
目前该实体附加了以下数据:9 String、9
布尔值、8 个整数、1 个 GeoPt、2 个日期时间、1 个文本(平均大小约 100 字节
FWIW),1 个参考,1 个 StringList(平均大小 500 字节)。目标是
将绝大多数数据移至相关类,以便
主模型的核心获取会很快。
如果有效的话,它是如何实施的?
重构后,我还会遇到同样的情况吗?
获取现有实体的成本高吗?文档说所有
模型的属性是同时获取的。会老吗
不需要的属性仍然通过 RPC 在我的钱上传输,而用户
等待?换句话说:如果我想减少实体的加载时间,就是
有必要将旧实体迁移到新实体
定义?如果是这样,是否足以重新放置()该实体,或者我必须
保存在全新的密钥下?
Example
考虑:
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')
我是否减少了该实体的获取时间?
按顺序回答您的问题:
- 是的,分割模型会减少获取时间,尽管可能不是线性的。对于像您这样的相对较小的模型,差异可能不会很大。大型列表属性是增加获取时间的主要原因。
- 当您在更改模型后获取实体时,旧属性仍将被转移,因为数据存储不了解模型。
- 不过,即使调用 .put(),删除的属性仍然会被存储。目前,有两种方法可以消除旧属性:将所有现有实体替换为新属性,或者使用较低级别的 api.datastore 接口,该接口类似于字典,可以轻松删除键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)