Before proposing a solution, what is your expected active user base.
1000's or 1,000,000s or something in between.
Steve

On Apr 6, 3:50 pm, Matt Hall <matt.h...@gmail.com> wrote:
> Thanks for the response, could you point me to somewhere where I can
> read about batched queries by key in JDO? Or do I need to go to the
> low level API for that?
>
> I think the conclusion I'm coming to here is 1) I shouldn't have made
> the detail for each order as a separate object, (although this has
> huge problems for querying later as in how many people have bought
> item x), and 2) JDO managed relationships get slow with small numbers
> of child objects, are hard to optimize, and probably not worth the
> trouble overall. Is that pretty much what I should be concluding?
>
> Thanks again, I'm really trying to understand how to translate what's
> a basic structure in RDMS land into something that will work in app
> engine beyond toy implementations.
>
> On Apr 6, 12:54 pm, "Ikai L (Google)" <ika...@google.com> wrote:
>
> > For speed, you'll get the most gains if you denormalize when possible - yes,
> > the relational purists are going to riot, but you don't have many of the
> > benefits of normalization anyway such as foreign key constraints or native
> > joins.
>
> > If that isn't an option - and I really do recommend looking into it where it
> > makes sense - if you're able to retrieve keys, we may also be able to make
> > use of batch queries by key.
>
> > On Mon, Apr 5, 2010 at 2:59 PM, Matt Hall <matt.h...@gmail.com> wrote:
> > > Hi Everyone,
>
> > > I've been trying for the past while to get our relatively simple JDO
> > > based site to run at a reasonable speed, but I'm failing and I'd love
> > > any suggestions. I'll describe it as succinctly as possible to
> > > hopefully keep your interest :)
>
> > >  * The basic structure is a User -> Order -> Line items type
> > > structure.
> > >  * The main query performed is "Orders for a user."
> > >  * A user usually has around 10 orders, each order has under 100 line
> > > items.
> > >  * The Order -> Items relationship is done as a One-to-many owned
> > > relationship.
>
> > > My problem is that the basic request the site handles: "Get all orders
> > > for a user and do something based on the line items" is very slow. In
> > > real response time, my average is now 1.5 seconds, and some of the
> > > users are seeing 20 second response times. Clearly not ok.
>
> > > What appears to be slow, after profiling with the new app stats tool
> > > is that each line item is getting loaded as it's used (lazy loading),
> > > which works great in some cases but terrible in this case since each
> > > item takes 20-30ms to load.
>
> > > I have tried:
>
> > >  * Moving items into the default fetch group for orders, seems to have
> > > no effect (may not even be possible due to limitations of joins)
> > >  * Level 2 caching with memcache - not much effect either since only
> > > the individual line items are cached, not the whole List, so we still
> > > pay a price in round trip to the cache on each line item.
> > >  * A sort of wacky cache that I wrote on top of the JDO managed
> > > relationship to cache the whole collection. This went poorly and
> > > resulted in odd data inconsistencies, probably because I did something
> > > wrong but the whole thing felt wrong.
>
> > > So my question is - what am I doing wrong? What's the best/standard
> > > way to represent a Master -> Detail type relationship, where the total
> > > items for a user will be relatively small but requests need to work
> > > with a fair number of them.
>
> > > Thanks for any suggestions, I'd be happy to answer any questions if
> > > what I've written isn't clear.
>
> > > Matt
>
> > > --
> > > 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-j...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2B
> > >  unsubscr...@googlegroups.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/google-appengine-java?hl=en.
>
> > --
> > Ikai Lan
> > Developer Programs Engineer, Google App 
> > Enginehttp://googleappengine.blogspot.com|http://twitter.com/app_engine

-- 
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-j...@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.

Reply via email to