我在大学中将 Google App Engine 应用程序作为课堂项目。现在我需要对其进行优化以将其用于商业用途。
如今,代码非常慢。它只有几个模型,每个模型都有很多属性。在重写模型代码之前,我需要知道如果我增加模型的数量,我的应用程序是否会更快,即增加解耦。直到什么时候我应该考虑将模型划分为其他模型?
另一个问题,如果解耦对性能有积极影响,模型中的属性数量是否与从数据存储中获取它的时间成正比?
我在大学中将 Google App Engine 应用程序作为课堂项目。现在我需要对其进行优化以将其用于商业用途。
如今,代码非常慢。它只有几个模型,每个模型都有很多属性。在重写模型代码之前,我需要知道如果我增加模型的数量,我的应用程序是否会更快,即增加解耦。直到什么时候我应该考虑将模型划分为其他模型?
另一个问题,如果解耦对性能有积极影响,模型中的属性数量是否与从数据存储中获取它的时间成正比?
如今,代码非常慢。它只有几个模型,每个模型都有很多属性。
获取/放置大物体
由于数据存储 API 只能放置或获取一个对象(而不是单个字段),因此每次您为数据存储获取一个对象时,它都会获取其所有字段,无论您是否打算在此时使用它们。当我们将对象写回数据存储时,这种效果会更强,即使您更改对象中的单个字段,它也必须写入所有内容。(写入成本高于读取)
在我进一步说之前:模型的扩散应该遵循你的读写模式。
为了实用并举个例子,假设我正在为博客上的帖子建模,每个帖子都有 a title
、 adate
和 a body
(我们理所当然地假设它们比其他字段大得多)。在简单的对象建模中,我将这三个字段放在一个类BlogPost
中,但是每次我只想阅读整个对象时都会受到惩罚titles
(比如简单地显示帖子列表并构建帖子的链接) ,或者只是为了更新dates
.
class BlogPost {
String title; String body; long date; }
因此,可以做的是创建一个Body
可以容纳的类body
,并在其中保留对它的引用(键)BlogPost
。
class BlogPost {
String title;
Key<Body> body;
long date;
}
class Body {
String body;
}
轻量级实现高效的跨侧序列化
BlogPost
如果我决定将其序列化并通过网络发送它,例如将其发送到 Web 浏览器(用于 JavaScript 中),例如使用 GWT,这也会使该类更加轻量级。
增加 Google App Engine 上的模型数量会影响性能吗?
尼克约翰逊的回答:
不,添加其他模型不会影响性能。