首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过减少实体大小来提高App性能

通过减少实体大小来提高App性能
EN

Stack Overflow用户
提问于 2009-10-10 11:50:54
回答 3查看 2.4K关注 0票数 7

其目标是减少一段代码的CPU成本和响应时间,该代码经常运行,每次必须使用db.get()数百个键。

这个能用吗?

我是否可以期望具有数百个键的db.get()的API时间在缩小实体大小时大致线性地减少?当前,实体附加了以下数据:9字符串、9布尔值、8整数、1 GeoPt、2 DateTime、1文本(avg大小~100字节FWIW)、1引用、1 StringList (avg大小500字节)。目标是将这些数据的绝大部分转移到相关的类中,以便快速获取主模型的核心数据。

如果它确实有效,它是如何实现的?

在重构之后,我是否仍然需要同样高的成本来获取现有的实体?文档指出,模型的所有属性都是同时获取的。旧的不需要的属性还会在我的一角钱和用户等待的时候通过RPC传输吗?换句话说:如果我想减少实体的加载时间,是否有必要将旧实体迁移到具有新定义的实体?如果是这样的话,那么重新放置()实体就足够了,还是必须将其保存在一个全新的键下?

示例

考虑:

代码语言:javascript
复制
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()

比方说,我重新定义了要精简的东西,并推出了一个新版本:

代码语言:javascript
复制
class Thing(db.Model):
    num = db.IntegerProperty()

我又把它拿来:

代码语言:javascript
复制
thing_again = Thing.get_by_key_name('thing1')

我是否缩短了这个实体的获取时间?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-10 18:13:35

按顺序回答你的问题:

  • 是的,拆分您的模型将减少获取时间,尽管可能不是线性的。对于你这样的相对较小的模型来说,差别可能并不大。大列表属性是导致获取时间增加的主要原因。在对模型进行更改后获取实体时,
  • 旧属性仍将被传输,因为数据存储不了解模型。但是,即使调用了

(),

  • 也仍然会存储已删除的属性。目前,消除旧属性的方法有两种:用新的实体替换所有现有的实体,或者使用低级的api.datastore接口,这种接口类似于dict,很容易删除键.
票数 12
EN

Stack Overflow用户

发布于 2010-01-06 21:29:52

要从实体中删除属性,可以将模型更改为Expando,然后使用delattr。它被记录在App文档中:

http://code.google.com/intl/fr/appengine/articles/update_schema.html

标题“从数据存储中删除已删除的属性”

票数 1
EN

Stack Overflow用户

发布于 2009-10-10 13:48:35

如果我想缩小实体的大小,是否有必要将旧实体迁移到具有新定义的实体?

是。GAE数据存储只是一个大的键值存储,它不知道任何关于模型定义的信息。所以旧的值就是旧的值,直到你把新的值放进去!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1547750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档