Nowadays, the code is very slow. It
has only few Models with many
properties in each.
Getting/Putting big objects
Since the datastore API can only put or get an object (as opposed to individual fields), each time you fetch an object for the datastore it fetches all its fields regardless if you are going to use them all at that point or not. This effect will be stronger when we write the object back to the datastore, it has to write everything even when you alter a single field in the object. (writes cost more than reads)
Before I say anything further: the proliferation of models should follow your pattern of reads and writes.
To be practical and give an example, say I am modeling the posts on a blog, where each would have a title
, a date
and a body
(which we will rightfully assume as being much bigger than the other fields). In the straightforward object modeling, I'd have those three fields in a single class BlogPost
, but I am penalized for the whole object each time I just want to read the titles
(say to simply display a list of posts and construct links to the posts), or just to update the dates
.
class BlogPost {
String title; String body; long date; }
So what one can do is create a class Body
that would hold body
, and keep a reference (a key) to it inside BlogPost
.
class BlogPost {
String title;
Key<Body> body;
long date;
}
class Body {
String body;
}
Lightweight makes for efficient cross-side serialization
This also makes the BlogPost
class more lightweight if I decide to serialize it and send it over the wire, e.g to send it to the web browser (to be used in JavaScript), with GWT for example.
Does increasing the number of models on
Google App Engine affects performance?
Answer from Nick Johnson:
No, adding additional models will not
impact performance.