Hi Marcel, the SQL join world saves you the hassle of thinking about all of this stuff at write-time, but would not scale beyond a few thousand users. if you implement everything in SQL and then end up with a very busy site, you end up re-implementing all of your data access to work in the BigTable way.
one nice thing about BigTable is that when you do a db.put(entities) where entities is an array/list, it sends them away to write in multiple threads. so the access time is not linear with len (entities). sharded counter = awesome Ben On Apr 7, 2:48 am, Marcel Overdijk <marceloverd...@gmail.com> wrote: > This would mean really a lot of updates. > > E.g. > - User1, 1 jan 2009, 1000 > - User1, 1 feb 2009, 1100 > > This would mean craeting an avarage usage of 100 for jan 2009. > > Now next time the user enters a meter reading is e.g. 1 jan 2010 with > value 2300. > This would mean in this case createing avaerage use valuues for feb, > mar, apr, may, jun, jul, aug, sep, okt, nov and dec 2009. > > And als updating average usage of all users. > In a SQL join this would be less dificult and error prone to > implement. > > I'm wondering if my use case fits the BigTable principles and thus > GAE, or that I would be better of with a realtional database. > But this would mean I can't use GAE and have to go for another cloud > solution like mor.ph > > On 7 apr, 06:36, GregF <g.fawc...@gmail.com> wrote: > > > > > On Apr 7, 6:53 am, Marcel Overdijk <marceloverd...@gmail.com> wrote: > > > > - User1, 1 jan 2009, 1000 > > > - User1, 1 feb 2009, 1100 > > > - User1, 1 mar 2009, 1200 > > > The avarage will be 1100 *** > > > > But maybe the user misses registering the meter reading on 1 feb: > > > - User1, 1 jan 2009, 1000 > > > - User1, 1 mar 2009, 1200 > > > The average will still be 1100 *** > > > I guess the answer will be to store average values when creating (and > > > updaing existing) meter reading records. > > > But how should this be implemented? > > > *** Corrected. > > > Yes, calculate averages when you update the table. If you don't need > > to search for particular readings, you might want to store the meter > > readings in a db.ListProperty(int), with an associated db.ListProperty > > (int) of timestamps. > > > I need to count various things in my app, so I define a model and > > helper functions like this: > > > class Counter(db.Model): > > count=db.IntegerProperty(required=True,default=0) > > > # Increment a counter > > # NB: These are functions, not class members > > def _incrementCounter(counterId,amount): > > counter=Counter.get_by_id(counterId) > > counter.count+=amount > > counter.put() > > def incrementCounter(counterId,amount=1): > > db.run_in_transaction(_incrementCounter,counterId,amount) > > > I'm sure you can do something similar for your averages. --~--~---------~--~----~------------~-------~--~----~ 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 google-appengine+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---