Hi Peter,

On Fri, Feb 19, 2010 at 1:04 PM, peterk <[email protected]> wrote:

> Thanks Nick, I understand now. So I guess the easiest thing to do is
> to have a random component in your keynames...at least for apps I'm
> considering I don't think I'd have any other way to reasonably ensure
> the range of keynames in a given (batch) update were well distributed.
>

Bear in mind that you only have to even worry about this if you're expecting
hundreds of QPS of inserts to the same model.

If you are in this situation, hashing some stable information from your
model may be sufficient to generate a well distributed key name.

-Nick Johnson


> On Feb 19, 11:58 am, "Nick Johnson (Google)" <[email protected]>
> wrote:
> > On Fri, Feb 19, 2010 at 12:28 AM, peterk <[email protected]> wrote:
> > > What about keynames like:
> >
> > > counter_standard_dbf
> > > counter_standard_clo
> >
> > > or would something like
> >
> > > dbfo01la_counter_standard
> > > clo091b_counter_standard
> >
> > > work better?
> >
> > > I'm thinking of cases where you may use keynames that can in some way
> > > be constructed/predicted for fast access later.
> > > like..<username>_counter_standard
> >
> > > Would the common pre-fix or post-fix make for close distribution? :|
> >
> > Either one will work fine - Bigtable will split tablets based on key to
> > ensure no tablet gets too big. Long identical prefixes just mean that the
> > split will be based on later characters in the string.
> >
> > What's important for key distribution for really high update rates is the
> > distribution of key names/IDs for those updates: If they all go to a
> single
> > tablet (eg, they make up a small proportion of the total range of IDs
> you're
> > employing), they will be limited by what that tablet server can support.
> If
> > they are widely spread out within the range you're using, regardless of
> what
> > that range is, you'll be fine.
> >
> > -Nick Johnson
> >
> >
> >
> >
> >
> >
> >
> > > On Feb 18, 5:59 pm, "Nick Johnson (Google)" <[email protected]>
> > > wrote:
> > > > Hi Eli,
> >
> > > > Using a randomly generated ID like a uuid is perfectly satisfactory
> to
> > > > achieve an even distribution.
> >
> > > > On Wed, Feb 17, 2010 at 7:02 PM, Eli Jones <[email protected]>
> wrote:
> > > > > I understand the process of evenly distributing IDs since they are
> > > Integer
> > > > > values.. is there a canonized appengine way to evenly distribute
> > > key_names?
> >
> > > > > Just make sure key_name1 and key_name2 don't have their i-th
> letters
> > > "too
> > > > > close" too eachother? How far is far enough?
> >
> > > > > Does doing even distribution matter if you aren't using
> auto-generated
> > > IDs?
> >
> > > > It certainly can - if you insert, in order, "aaaa", "aaab", "aaac",
> etc,
> > > > you'll encounter the same problem at very high volumes as you'd see
> with
> > > > auto generated IDs.
> >
> > > > -Nick Johnson
> >
> > > > > Thanks for information.
> >
> > > > > On Wed, Feb 17, 2010 at 1:32 PM, Nick Johnson (Google) <
> > > > > [email protected]> wrote:
> >
> > > > >> Hi Ulrich,
> >
> > > > >> On Wed, Feb 17, 2010 at 5:30 PM, Ulrich <
> [email protected]
> > > >wrote:
> >
> > > > >>> Hi,
> >
> > > > >>> I have read the following
> > > > >>> "Timeouts due to datastore issues --- [...] The most common
> example
> > > of
> > > > >>> this occurs when you are rapidly inserting a large number of
> entities
> > > > >>> of the same kind, with auto-generated IDs. In this case, most
> inserts
> > > > >>> hit the same range of the same tablet, and the single tablet
> server
> > > is
> > > > >>> overwhelmed with writes. [...] If this does affect your app, the
> > > > >>> easiest solution is to use more evenly distributed IDs instead of
> the
> > > > >>> auto-allocated ones  [...]"
> > > > >>> (
> >
> > >
> http://code.google.com/appengine/articles/handling_datastore_errors.html
> > > > >>> )
> >
> > > > >>> Let's say I am having a model "Parent" and a model "Child". For
> > > Parent
> > > > >>> entities, I use key names that are evenly distributed. For Child
> > > > >>> entities, I use auto-generated key IDs and _no_ key names, but
> all
> > > > >>> Child entities are children of Parent entities, so the paths to
> the
> > > > >>> children contain the evenly distributes key names of the parents.
> > > > >>> If I have many write operations on children that are in the same
> > > > >>> entity group, the described error could occur. But what happens
> if my
> > > > >>> write operations are on children that are in different entity
> groups?
> > > > >>> Their IDs are auto-generated and not evenly distributed, but
> their
> > > > >>> paths contain the evenly distributed key names.
> >
> > > > >> Good question! The point being made in the article refers to the
> > > global
> > > > >> distribution of the complete key, so writes to these children will
> be
> > > well
> > > > >> distributed, and you won't have to worry about this source of
> > > contention.
> >
> > > > >> -Nick Johnson
> >
> > > > >>> --
> >
> > > > >>> You received this message because you are subscribed to the
> Google
> > > Groups
> > > > >>> "Google App Engine" group.
> > > > >>> To post to this group, send email to
> > > [email protected].
> > > > >>> To unsubscribe from this group, send email to
> > > > >>> [email protected]<google-appengine%[email protected]><google-appengine%2Bunsubscrib
> [email protected]><google-appengine%2Bunsubscrib
> > > [email protected]>
> > > > >>> .
> > > > >>> For more options, visit this group at
> > > > >>>http://groups.google.com/group/google-appengine?hl=en.
> >
> > > > >> --
> > > > >> Nick Johnson, Developer Programs Engineer, App Engine
> > > > >> Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
> > > Number:
> > > > >> 368047
> >
> > > > >>  --
> > > > >> You received this message because you are subscribed to the Google
> > > Groups
> > > > >> "Google App Engine" group.
> > > > >> To post to this group, send email to
> > > [email protected].
> > > > >> To unsubscribe from this group, send email to
> > > > >> [email protected]<google-appengine%[email protected]><google-appengine%2Bunsubscrib
> [email protected]><google-appengine%2Bunsubscrib
> > > [email protected]>
> > > > >> .
> > > > >> For more options, visit this group at
> > > > >>http://groups.google.com/group/google-appengine?hl=en.
> >
> > > > >  --
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "Google App Engine" group.
> > > > > To post to this group, send email to
> [email protected]
> > > .
> > > > > To unsubscribe from this group, send email to
> > > > > [email protected]<google-appengine%[email protected]><google-appengine%2Bunsubscrib
> [email protected]><google-appengine%2Bunsubscrib
> > > [email protected]>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/google-appengine?hl=en.
> >
> > > > --
> > > > Nick Johnson, Developer Programs Engineer, App Engine
> > > > Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
> > > Number:
> > > > 368047
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Google App Engine" group.
> > > To post to this group, send email to [email protected]
> .
> > > To unsubscribe from this group, send email to
> > > [email protected]<google-appengine%[email protected]><google-appengine%2Bunsubscrib
> [email protected]>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/google-appengine?hl=en.
> >
> > --
> > Nick Johnson, Developer Programs Engineer, App Engine
> > Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
> Number:
> > 368047
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
>


-- 
Nick Johnson, Developer Programs Engineer, App Engine
Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number:
368047

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to