Hi,

On Thu, Jan 14, 2010 at 6:07 AM, Patrick Twohig
<[email protected]>wrote:

> Perhaps I didn't explain my use case entirely well enough.  Basically it's
> a leaderboard (high scores table) for an online game.  After thinking a
> little more GAEly I came up with the following solution.  I was curious if
> anybody had any comments or critiques for my approach.
>
> Create a "WeeklyLeaderboardEntry" (or similarly named kind).  That
> basically contains the player's score and the player's unique name.  And use
> it as follows:
>
> Make some code that establishes a sequence of weeks.  Let's say the number
> of weeks since the Epoch.  For instance if it's January 3, 1970, the current
> week is 0.  If it's January 8, 1970 it's week 1 and so on.
>
> When player finishes game:
> 1) Look for WeeklyLeaderboardEntry with the current.  If it exists, skip to
> step 4. (Maybe name the entitye PlayerName-Sequence).
> 2) Create "WeeklyLeaderboardEntry" for the current week.
> 3) Queue the entity to be deleted a week from now.
> 4) Set the player's current high score to that entity.
> 5) Persist object to be updated later in case the player plays another game
>
> When displaying the leaderboard:
> 1) Query for "WeeklyLeaderboardEntries"
> 2) Filter out ones not pertaining to the current week
> 3) Sort highest score to lowest
>
> This way the following holds true:
>
>    - When the user is updating his/her high score he/she is only working a
>    single entity.  I never need to do bulk updates in a cron job or anything.
>    - I don't need to write a cron job to go through a whole mess of
>    leaderboard entities trying to reset the counter for everbody at once.
>    - When the week rolls over it appears to happen atomically because I
>    just restrict the query to the current week.  There may be stale entry
>    objects but those will get deleted at he app engine's leisure.
>
> My only questions/concerns:
>
>    - Is it okay to queue something to be deleted after a week? Will the
>    task queue accept a timeout for that length of time?
>
>
Timeouts can be for up to a month. Queueing a task per entry is somewhat
inefficient, however - you'd be better running a series of tasks at the end
of the week that query for old entries and delete them in batches.

>
>    -
>    - Will the task queue keep up with clearing out stale entities as fast
>    as they can be created
>
>
That depends on the rate of creation. Batch operations will allow you to
sustain a much higher rate with fewer resources.

-Nick Johnson


>
>    - ?
>
>
>
> On Wed, Jan 13, 2010 at 7:28 PM, Eric Ka Ka Ng <[email protected]> wrote:
>
>> how about batch update using db.put()?
>>
>> following is extracted from
>>
>> http://googleappengine.blogspot.com/2009/06/10-things-you-probably-didnt-know-about.html
>>
>>
>> For example, take a look at this common pattern:
>>
>> for entity in MyModel.all().filter("color =",
>>    old_favorite).fetch(100):
>>  entity.color = new_favorite
>>  entity.put()
>>
>>
>> Doing the update this way requires one datastore round trip for the
>> query, plus one additional round trip for each updated entity - for a
>> total of up to 101 round trips! In comparison, take a look at this
>> example:
>>
>> updated = []
>> for entity in MyModel.all().filter("color =",
>>    old_favorite).fetch(100):
>>  entity.color = new_favorite
>>  updated.append(entity)
>> db.put(updated)
>>
>> By adding two lines, we've reduced the number of round trips required
>> from 101 to just 2!
>>
>>
>>
>> - eric
>>
>>
>> 2010/1/14 Patrick Twohig <[email protected]>:
>> > So I'm looking at trying to reset large amounts of data en masse.  Say I
>> > want to reset a counter on every account each week, how would I go about
>> > implementing something like that?  Would I have to go through each
>> object,
>> > update it, and store it?  If that's the case, how do I go about doing so
>> > without killing my quota or running up my usage extremely high?
>> >
>> > Thanks,
>> > Patrick.
>> >
>> > --
>> > 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.
>> >
>> >
>>
>> --
>> 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.
>>
>>
>>
>>
>
>
> --
> Patrick H. Twohig.
>
> Namazu Studios
> P.O. Box 34161
> San Diego, CA 92163-4161
>
> Office: 619.862.2890 x100
> Cell: 619.453.5075
> Twitter: @svm_invictvs
> IRC: [email protected] ##java, #android-dev, #iphonedev,
> #appengine
>
> http://www.namazustudios.com/
>
> This communication, and any attachments, shall be considered confidential
> and proprietary information of Namazu Studios LLC.  This message, and
> attachments, are intended for the listed recipients only.  If you are not
> one of the intended recipients, please destroy all copies of this
> communication.
>
> --
> 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