3

大学のクラス プロジェクトとして Google App Engine アプリケーションを作成しました。今、私はそれを商業的に使用するために最適化する必要があります.

現在、コードは非常に遅いです。それぞれに多くのプロパティを持ついくつかのモデルしかありません。モデル コードを書き直す前に、モデルの数を増やした場合、つまりデカップリングを増やした場合にアプリケーションが高速になるかどうかを知る必要があります。そして、どの時点までモデルを他のモデルに分割することを検討する必要がありますか?

別の質問として、デカップリングがパフォーマンスにプラスの影響を与える場合、モデル内のプロパティの数は、データストアから取得する時間に正比例しますか?

4

1 に答える 1

7

現在、コードは非常に遅いです。それぞれに多くのプロパティを持ついくつかのモデルしかありません。

大きなオブジェクトの取得/配置

データストア API は (個々のフィールドではなく) オブジェクトの配置または取得しかできないため、データストアのオブジェクトをフェッチするたびに、その時点ですべてのフィールドを使用するかどうかに関係なく、すべてのフィールドがフェッチされます。この効果は、オブジェクトをデータストアに書き戻すときに強くなります。オブジェクトの単一のフィールドを変更した場合でも、すべてを書き込む必要があります。(書き込みは読み取りよりもコストがかかります)

これ以上言う前に、モデルの急増は、読み取りと書き込みのパターンに従う必要があります。

実用的で例を挙げると、ブログの投稿をモデル化しているとします。それぞれにtitle、 a 、dateおよび aがありますbody(当然のことながら、他のフィールドよりもはるかに大きいと仮定します)。単純なオブジェクト モデリングでは、これらの 3 つのフィールドを 1 つのクラス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、たとえば GWT を使用して (JavaScript で使用されるように) Web ブラウザーに送信するなど、シリアル化してネットワーク経由で送信することにした場合、クラスがより軽量になります。

Google App Engine でモデル数を増やすとパフォーマンスに影響しますか?

ニック・ジョンソンからの回答:

いいえ、モデルを追加してもパフォーマンスに影響はありません。

于 2010-09-07T02:28:47.423 に答える