Thanks for the responses Kang and Robert.

johnP



On Feb 9, 10:38 am, Robert Kluin <[email protected]> wrote:
> We see very different performance depending on the exact structure of
> our models and indexes.  I have found that it really helps to just
> setup test cases and try both when you have different implementation
> ideas.  And it may be the case that you need to use some combination
> of the two approaches.
>
> Robert
>
>
>
> On Tue, Feb 9, 2010 at 12:50 PM, kang <[email protected]> wrote:
> > According to Google engineer, fetch entry by key is very fast. So you should
> > use fetch by key rather than manipulating the list. I think the B approach
> > will cost more CPU also.
>
> > On Wed, Feb 10, 2010 at 1:38 AM, johnP <[email protected]> wrote:
>
> >> I'm trying to get my head around where to use the datastore for
> >> business logic, and where to use python code.  So just wanted to ask
> >> two "which approach is better" questions:
>
> >> Scenario 1.  For example, let's say you have a list of items, and you
> >> need to return both the selected item as well as the list of items.
> >> For example - a person has a bunch of cars:  [Honda, Ford, Porsche,
> >> Yugo, Trabaunt, Dusenberg].  You have stored the Yugo key as the
> >> person's 'active_car'.
>
> >>   You need to return:                 car, cars = Yugo, [Honda, Ford,
> >> Porsche, Yugo, Trabaunt, Dusenberg]
>
> >> Which approach is better to return the values...
>
> >> Approach A:     cars=person.car_set.fetch(1000)
> >>                       car = db.get(stored_car_key)
> >>                       return car, cars
>
> >> Approach B:     cars = person.car_set.fetch(1000)
> >>                       car = [i for i in cars if i.key() ==
> >> stored_car_key]
> >>                       return car, cars
>
> >> In other words - what's cheaper - the list comprehension, or the
> >> db.get().  If the person has 1000 cars, does the answer change?
>
> >> Scenario 2.  I have a list of 300 people (In my case, there will never
> >> be more than 1000) that I need to slice and dice in different ways.
> >> a.  Need them all, by last name, from California.  b.  Need people
> >> between the ages of 25 and 35 in California.  c.  Need people over 300
> >> lbs in California.  Which approach should I use:
>
> >> Approach A:  Create multiple queries:
> >>                     a.  people =
> >> state.people_set.order('last_name').fetch(1000)
> >>                     b.  people =
> >> state.people_set.order('age').filter('age >', 35).etc.
> >>                     c.  people =
> >> state.people_set.order(weight').filter('weight >', 300).etc.
>
> >> Approach B:  Memcache the entire list of people, and
> >> list_comprehension them into submission.  For example:
>
> >>                   def return_people_by_last_name():
> >>                         people = get_all_people_from_memcache()
> >>                         sort_list = [(i.last_name, i) for i in people
> >> if i.state == state]
> >>                         sort_list.sort()
> >>                         return [i[1] for i in sort_list]
>
> >>                   def sort_people_by_weight():
> >>                          similar to above...
>
> >> In approach A, you'll be bearing the cost of additional indexes, as
> >> well as bearing the cost that most of your returns will be hits to the
> >> database.  In approach B, you might be pulling 300 People from
> >> memcache in order to return a single 300 pounder.
>
> >> Answers to these two questions might give me a better sense of when to
> >> hit the datastore for business logic, and when to process using python
> >> code.
>
> >> Thanks!
>
> >> johnP
>
> >> --
> >> 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.
>
> > --
> > Stay hungry,Stay foolish.
>
> > --
> > 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.

-- 
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