any documentation or comments on how JPA/JDO map their entities and
identities onto entity groups?


On Sep 8, 2:16 pm, "Jason (Google)" <apija...@google.com> wrote:
> If you're trying to achieve high write throughput, as it sounds like you are
> since you have 1,000,000 entities to write, you should be designing your
> schema to minimize the number of entities in an entity group. These and
> other general tips are listed here:
>
> http://code.google.com/appengine/docs/python/datastore/keysandentityg...
>
> Putting all of your entities in a single group significantly impairs your
> application's ability to update entities since entities can no longer be
> written in parallel. Large entity groups will work fine if your entities
> aren't being updated very often (generally 1-10 per second, max), but if you
> want to do massive bulk writes like this, I suggest re-thinking your design
> with this in mind. Even if you can't rollback the entire write, doing a
> batch put of entities in separate entity groups should thrown an exception
> in the event of a failure which you can catch and re-try the write for the
> single affected entity.
>
> - Jason
>
>
>
> On Sun, Sep 6, 2009 at 5:12 PM, Nicholas Albion <nalb...@gmail.com> wrote:
>
> > On Sep 5, 10:24 am, "Jason (Google)" <apija...@google.com> wrote:
> > > Batch puts are supported, yes, and as of yesterday's release, calling
> > > makePersistentAll (JDO) and the equivalent JPA call will take advantage
> > of
> > > this support (previously, you had to use the low-level API).
>
> > > Two quick notes:
>
> > > 1) All of the entities that you're persisting should be in separate
> > entity
> > > groups since two entities in the same entity group can't be written to
> > > consecutively, and you will see datastore timeout exceptions if many
> > > simultaneous write requests come in for the same entity or entity group.
>
> > Sorry Jason, I'm a bit confused now.  Wouldn't that be the most common
> > use case for batch puts?  According to the GAE documentation, this is
> > the main point of entity groups:
> >  "App Engine creates related entities in entity groups automatically
> > to support updating related objects together"
>
> > ...so you can add them together _logically_ but not chronologically?
> > I've got several cases where I'd have 50,000 to 1000,000 records which
> > logically belong to a single parent entity.  If I need to add them to
> > the datastore individually it's going to take about somewhere between
> > 2 to 24 hours to write them all (spread across multiple HTTP requests
> > in any case).  If I could batch put the data (within the same entity
> > group) I imagine that the time would be reduced significantly.
>
> > > 2) Batch puts do not operate in a transaction. This means that some
> > writes
> > > may succeed but others may not, so if you need the ability to rollback,
> > > you'll need transactions.
>
> > Do you mean that if necessary, the call to makePersistentAll() should
> > be wrapped in a transaction, or that makePersistentAll() _can_not_ be
> > wrapped in a transaction?- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to