現在、コードは非常に遅いです。それぞれに多くのプロパティを持ついくつかのモデルしかありません。
大きなオブジェクトの取得/配置
データストア 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 でモデル数を増やすとパフォーマンスに影響しますか?
ニック・ジョンソンからの回答:
いいえ、モデルを追加してもパフォーマンスに影響はありません。