Slim3 is not only fast, the api is completely awesome. It has been my choice for a year now for all gae projects. It includes "name safety" and and amazing querying utils. Very recommendable!
On Wed, Jun 8, 2011 at 3:41 PM, Jeff Schnitzer <j...@infohazard.org> wrote: > You are wrong. > > Try adding getProperty() calls to your LL performance test, and the > speed advantage of the LL API goes away. I don't know what to say > about Slim3, but here's my test case: > > > http://code.google.com/p/scratchmonkey/source/browse/#svn%2Fappengine%2Fperformance-test > > I created 10,000 entities in the datastore that have the same format > as your test case - a single string property. Here's what happens > (try it - and remember to reload the urls several times to get a > realistic median value): > > ###### Low Level API with just .size() > > http://voodoodyne.appspot.com/fetchLLSize > > The code: > > List<Entity> things = > DatastoreServiceFactory.getDatastoreService() > .prepare(new > Query(Thing.class.getAnnotation(javax.persistence.Entity.class).name())) > .asList(FetchOptions.Builder.withDefaults()); > things.size(); > > Note that results are almost always under 2000ms. Wild guess I'd say > the median elapsed is ~1900, just like your example. > > ###### Low Level API with actual fetch of the data > > http://voodoodyne.appspot.com/fetchLL > > The code: > > List<Entity> things = > DatastoreServiceFactory.getDatastoreService() > .prepare(new > Query(Thing.class.getAnnotation(javax.persistence.Entity.class).name())) > .asList(FetchOptions.Builder.withDefaults()); > for (Entity ent: things) > { > ent.getKey(); > ent.getProperty("value"); > } > > Note that the duration is now considerably longer. Eyeballing the > median elapsed time, I'd say somewhere around 3000ms. > > ###### Objectify fetching from datastore > > http://voodoodyne.appspot.com/fetch > > Objectify ofy = ObjectifyService.begin(); > List<Thing> things = ofy.query(Thing.class).list(); > for (Thing thing: things) > { > thing.getId(); > thing.getValue(); > } > > Note that the timing is pretty much the same as the LL API when it > includes actual fetches of the entity values. It is, no doubt, just a > little higher. > > ###### A pure measurement of Objectify's overhead > > http://voodoodyne.appspot.com/fakeFetch > > This causes Objectify to translate 10,000 statically-created Entity > objects to POJOs. You can see the code here: > > > http://code.google.com/p/scratchmonkey/source/browse/appengine/performance-test/src/test/FakeFetchServlet.java > > You'll notice (after you hit the URL a couple times to warm up the > JIT) that elapsed time converges to somewhere around 120ms. > > ----------- > > Conclusion: > > The numbers in the original benchmark are a result of improper > measurements. The actual wall-clock overhead for Objectify in this > test is ~4% (120ms out of 3000ms). > > Further speculation on my part, but probably correct: The overhead of > reflection is unlikely to be a significant part of that 4%. > > Sloppy work. > > Jeff > > On Wed, Jun 8, 2011 at 7:55 AM, Yasuo Higa <higaya...@gmail.com> wrote: > > It is not bogus. > > LazyList#size() fetches all data as follows: > > public int size() { > > resolveAllData(); > > return results.size(); > > } > > > > Yasuo Higa > > > > On Wed, Jun 8, 2011 at 11:32 PM, Dennis Peterson > > <dennisbpeter...@gmail.com> wrote: > >> It's not my benchmark, it's Slim3's :) ...but you're right, it's bogus. > I > >> asked on the main appengine group too, and it turns out the low-level > >> benchmark is doing lazy loading. With that fixed, their numbers come out > >> like yours. > >> I found this one too, which also gets results like yours: > >> http://gaejava.appspot.com/ > >> > >> On Wed, Jun 8, 2011 at 4:44 AM, Erwin Streur <erwin.str...@gmail.com> > wrote: > >>> > >>> Indeed Dennis's measurements are very suspicious. First you should do > >>> a couple of warming ups on each of the implementations to prevent > >>> pollution like the JDO classpath scan for enhanced classes (which is > >>> one of the reasons for the high initial run). Then do a couple of run > >>> to determine a range of measurements to spot outlyers. your low-level > >>> API 2millis is definately one. > >>> > >>> When I did the measurements I got the following results > >>> low-level: 1150-1550 > >>> Slim3: 1150-1600 > >>> Objectify: 1950-2400 > >>> JDO: 2100-2700 > >>> > >>> These measurements confirm that GAE designed implementations are > >>> faster then the GAE implementation of a generic data access layer > >>> (JDO), but not so extrem as initially posted. > >>> > >>> The initial response using JDO is a known issue and especially low > >>> trafic website should not use it or use the always on feature (maybe > >>> this will change in the new pricing model) > >>> > >>> Regards, > >>> > >>> Erwin > >>> > >>> On Jun 7, 11:00 am, Ian Marshall <ianmarshall...@gmail.com> wrote: > >>> > The low-level API does indeed look very fast. > >>> > > >>> > Just a comment on JDO: repeat runs roughly halve the JDO run time. I > >>> > presume that this is because for repeat runs the JDO persistence > >>> > manager factory has already been constructed. > >>> > > >>> > On Jun 6, 8:44 pm, DennisP <dennisbpeter...@gmail.com> wrote: > >>> > > >>> > > I'm looking at this online > >>> > > demo:http://slim3demo.appspot.com/performance/ > >>> > > >>> > > Sample run: > >>> > > The number of entities: 10000 > >>> > > low-level API:get: 2 millis > >>> > > Slim3: 2490 millis > >>> > > JDO: 6030 millis > >>> > > >>> > > Is the low-level API really that much faster? > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups > >>> "Google App Engine for Java" group. > >>> To post to this group, send email to > >>> google-appengine-java@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> google-appengine-java+unsubscr...@googlegroups.com. > >>> For more options, visit this group at > >>> http://groups.google.com/group/google-appengine-java?hl=en. > >>> > >> > >> -- > >> You received this message because you are subscribed to the Google > Groups > >> "Google App Engine for Java" group. > >> To post to this group, send email to > google-appengine-java@googlegroups.com. > >> To unsubscribe from this group, send email to > >> google-appengine-java+unsubscr...@googlegroups.com. > >> For more options, visit this group at > >> http://groups.google.com/group/google-appengine-java?hl=en. > >> > > > > -- > > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > > To post to this group, send email to > google-appengine-java@googlegroups.com. > > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Google App Engine for Java" group. > To post to this group, send email to > google-appengine-java@googlegroups.com. > To unsubscribe from this group, send email to > google-appengine-java+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-appengine-java?hl=en. > > -- Guit: Elegant, beautiful, modular and *production ready* gwt applications. http://code.google.com/p/guit/ -- You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.