其目标是减少一段代码的CPU成本和响应时间,该代码经常运行,每次必须使用db.get()数百个键。
这个能用吗?
我是否可以期望具有数百个键的db.get()的API时间在缩小实体大小时大致线性地减少?当前,实体附加了以下数据:9字符串、9布尔值、8整数、1 GeoPt、2 DateTime、1文本(avg大小~100字节FWIW)、1引用、1 StringList (avg大小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')我是否缩短了这个实体的获取时间?
发布于 2009-10-10 18:13:35
按顺序回答你的问题:
(),
发布于 2010-01-06 21:29:52
要从实体中删除属性,可以将模型更改为Expando,然后使用delattr。它被记录在App文档中:
http://code.google.com/intl/fr/appengine/articles/update_schema.html
标题“从数据存储中删除已删除的属性”
发布于 2009-10-10 13:48:35
如果我想缩小实体的大小,是否有必要将旧实体迁移到具有新定义的实体?
是。GAE数据存储只是一个大的键值存储,它不知道任何关于模型定义的信息。所以旧的值就是旧的值,直到你把新的值放进去!
https://stackoverflow.com/questions/1547750
复制相似问题