You keep total rating values and number of users rated both in two
shard counters which are not belong to your product entity group. Then
update your average rating for your product's entity group
periodically like once every 100 request or 1000 request depends on
your need. So the concurrency level is only determined by the number
of shards not by number of users or products.

Even though the transfer data from shard counter to your entity group
is non-transactional, but the updating of raw records are
transactional, the data will be corrected next time when you update
average rate. Updating will only takes the time of a dozen of
datastore read and 1 put.


On Nov 4, 11:40 am, "Jay Freeman \(saurik\)" <[EMAIL PROTECTED]>
wrote:
> If I don't use transactions (with the ratings in the same entity groups as
> the shards they are being served by) then I can't be guaranteed I don't
> accidentally drop or double count ratings in the case of errors. :( Is the
> idea that you are recommending I just say "oh well, its a drop in the
> bucket"? -J
>
> --------------------------------------------------
> From: "Alexander Kojevnikov" <[EMAIL PROTECTED]>
> Sent: Tuesday, November 04, 2008 1:12 AM
> To: "Google App Engine" <google-appengine@googlegroups.com>
> Subject: [google-appengine] Re: more complicated counters/ratings (sorting?)
>
> ...> I would use shards to track the ratings (but without using
> > transactions) and from time to time re-calculate the average from the
> > shards and keep it with the product. This would allow indexing by the
> > average rating, without many sacrifices.
>
> ...
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to