Re: [google-appengine] Is the native API really so much faster than JDO and slim3?
No. Slim3 loads all data eagerly. Yasuo Higa On Wednesday, June 8, 2011, Jeff Schnitzer wrote: > Ok, I have figured out what's going on. To put it gently, the > benchmark is bogus. > > The benchmark code for the Low-Level API just gets the size() of the > collection and doesn't actually examine the data. GAE (apparently) > lazily populates Entity objects, so the benchmark cuts out a > significant chunk of the work. Objectify eagerly examines the Entity > data to create POJOs - but your real-world app is going to fetch the > data from the Entity too. Presumably Slim3 lazily passes through to > the low-level size() method. This is unrealistic; if you wanted a > count, you would use the query's count() method. > > When you iterate the result set and include an Entity.getProperty() > call, Objectify's 100ms overhead fades into the natural (+/- 500ms) > variance. > > Sloppy work. > > Jeff > > On Wed, Jun 8, 2011 at 1:44 AM, Jeff Schnitzer wrote: >> H. I just whipped up a test app that uses a mock >> AsyncDatastoreService to provide a set of 10,000 Entity objects to >> Objectify, thus purely measuring the overhead of Objectify. It >> consistently transforms 10,000 entities into POJOs (just long id, >> String value) in 100ms on both my laptop and on the production >> servers. >> >> I'm not quite sure what's going on here, but it's not an issue with >> reflection. >> >> Jeff >> >> On Tue, Jun 7, 2011 at 8:51 PM, Yasuo Higa wrote: >>> I added an objectify sample into the performance samples: >>> http://slim3demo.appspot.com/performance/ >>> >>> One result: >>> The number of entities: 1 >>> low-level API:get: 1276 millis >>> Slim3: 1327 millis >>> Objectify: 3028 millis >>> JDO: 3222 millis >>> >>> I have not profiled yet. >>> But I know java runtime reflections are very very slow on production server, >>> so slim3 creates the mapping logic between a model and an entity >>> as the source code when compiling. >>> >>> Yasuo Higa >>> >>> On Wed, Jun 8, 2011 at 10:18 AM, Ikai Lan (Google) >>> wrote: I doubt the low-level API is significantly faster than JDO (have not profiled, so can't tell you for sure). JDO just dispatches to low-level and does serialization/deserialization. That should really be a very small part of the entire operation. Reasons to use the low-level API include: - it maps best to how the datastore works (schemaless) - you always get new features the fastest (async datastore API) That being said, the Slim3 and Objectify projects move pretty quickly and add features almost as quickly as we do. They're one level removed from the schemaless nature of the datastore, but this fits better with the 95% use case. Ikai Lan Developer Programs Engineer, Google App Engine Blog: http://googleappengine.blogspot.com Twitter: http://twitter.com/app_engine Reddit: http://www.reddit.com/r/appengine On Wed, Jun 8, 2011 at 8:07 AM, Dennis Peterson wrote: > > That makes more sense, thanks. > I also found this online benchmark of JDO and LL, which has similar > results: > http://gaejava.appspot.com/ > > On Tue, Jun 7, 2011 at 8:03 PM, Anders wrote: >> >> Yeah, that's what I suspected. Lazy loading. With the modification Slim3 >> is almost as fast as the native API. Strange that JDO is so slow. I >> thought >> most of the time was for accessing the datastore, not for running the >> Java >> bytecode. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/google-appengine/-/dHRvXzBkWVNkUndK. >> To post to this group, send email to google-appengine@googlegroups.com. >> To unsubscribe from this group, send email to >> -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
Re: [google-appengine] Is the native API really so much faster than JDO and slim3?
No. Slim3 loads all data eagerly. Yasuo Higa On Wednesday, June 8, 2011, Jeff Schnitzer wrote: > Ok, I have figured out what's going on. To put it gently, the > benchmark is bogus. > > The benchmark code for the Low-Level API just gets the size() of the > collection and doesn't actually examine the data. GAE (apparently) > lazily populates Entity objects, so the benchmark cuts out a > significant chunk of the work. Objectify eagerly examines the Entity > data to create POJOs - but your real-world app is going to fetch the > data from the Entity too. Presumably Slim3 lazily passes through to > the low-level size() method. This is unrealistic; if you wanted a > count, you would use the query's count() method. > > When you iterate the result set and include an Entity.getProperty() > call, Objectify's 100ms overhead fades into the natural (+/- 500ms) > variance. > > Sloppy work. > > Jeff > > On Wed, Jun 8, 2011 at 1:44 AM, Jeff Schnitzer wrote: >> H. I just whipped up a test app that uses a mock >> AsyncDatastoreService to provide a set of 10,000 Entity objects to >> Objectify, thus purely measuring the overhead of Objectify. It >> consistently transforms 10,000 entities into POJOs (just long id, >> String value) in 100ms on both my laptop and on the production >> servers. >> >> I'm not quite sure what's going on here, but it's not an issue with >> reflection. >> >> Jeff >> >> On Tue, Jun 7, 2011 at 8:51 PM, Yasuo Higa wrote: >>> I added an objectify sample into the performance samples: >>> http://slim3demo.appspot.com/performance/ >>> >>> One result: >>> The number of entities: 1 >>> low-level API:get: 1276 millis >>> Slim3: 1327 millis >>> Objectify: 3028 millis >>> JDO: 3222 millis >>> >>> I have not profiled yet. >>> But I know java runtime reflections are very very slow on production server, >>> so slim3 creates the mapping logic between a model and an entity >>> as the source code when compiling. >>> >>> Yasuo Higa >>> >>> On Wed, Jun 8, 2011 at 10:18 AM, Ikai Lan (Google) >>> wrote: I doubt the low-level API is significantly faster than JDO (have not profiled, so can't tell you for sure). JDO just dispatches to low-level and does serialization/deserialization. That should really be a very small part of the entire operation. Reasons to use the low-level API include: - it maps best to how the datastore works (schemaless) - you always get new features the fastest (async datastore API) That being said, the Slim3 and Objectify projects move pretty quickly and add features almost as quickly as we do. They're one level removed from the schemaless nature of the datastore, but this fits better with the 95% use case. Ikai Lan Developer Programs Engineer, Google App Engine Blog: http://googleappengine.blogspot.com Twitter: http://twitter.com/app_engine Reddit: http://www.reddit.com/r/appengine On Wed, Jun 8, 2011 at 8:07 AM, Dennis Peterson wrote: > > That makes more sense, thanks. > I also found this online benchmark of JDO and LL, which has similar > results: > http://gaejava.appspot.com/ > > On Tue, Jun 7, 2011 at 8:03 PM, Anders wrote: >> >> Yeah, that's what I suspected. Lazy loading. With the modification Slim3 >> is almost as fast as the native API. Strange that JDO is so slow. I >> thought >> most of the time was for accessing the datastore, not for running the >> Java >> bytecode. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Google App Engine" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/google-appengine/-/dHRvXzBkWVNkUndK. >> To post to this group, send email to google-appengine@googlegroups.com. >> To unsubscribe from this group, send email to >> -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
[google-appengine] Is the native API really so much faster than JDO and slim3?
I'm looking at this online demo: http://slim3demo.appspot.com/performance/ Sample run: The number of entities: 1 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" group. To post to this group, send email to google-appengine@googlegroups.com. To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.