*I am responding here to combined comments:*

*I followed Brett Slatikn recommendations how to perform most efficient 
operations on DataStore and it works extremely fast *
*in Master / Slave.*

+Robert Kluin
> For instance, fetching a large list of keys from multiple entity groups 
may be slower due to the transaction overhead.

*I have list of keys only from one entity.*

>So you might need to evaluate your use of entity groups.  It may also
>be that you've got a design that is making many datastore RPCs in
>serial, that will probably be more of an issue when on HR since there
>is a slightly higher average latency.

*I store keys in lists. When getting the list *
*
*
*for example*
*class MyList(BaseModel):*
*    My_keys = db.ListProperty(db.Key) *
*
*
*Brett Slatkin recommends about no more than 3,000 max and so do I.*
*
*
*and this is parallel:*
*
            e = MyList.get_profile(email)
*
*
                my_keys = e.my_keys
                my_key = db.get(my_keys)

    #That's it! Super fast!
    @classmethod
    def get_profile(self, email):
        if not email:
            return None
        root = MyRoot.get_profile()
        #cache
        self._cache = get_cache("memcached://")
        skey = email
        key_cache = 'MyList' + skey + str(root.key())
        profile = self._cache.get(key_cache)
        #cache        
        if not profile:
            key = db.Key.from_path('MyList',
                                   skey,
                                   parent=root.key())
            profile = db.get(key)
            # not found - create
            if not profile:
                #def txn():
                root = MyRoot.get_profile_del_cache()
                profile = MyList(key_name=skey,
                                       parent=root.key())
                profile.put()
                return profile
                #return db.run_in_transaction(txn)
            #cache
            self._cache.set(key_cache, profile, timeout=CACHE_TIMEOUT)
            #cache
        return profile

*

+Fred Sauer
>verifying whether you are performing batch gets across entity groups

*I have transactions in which I have an operations on different entity 
groups but this is by design. *

>I should also point out that I have yet to meet a developer whose not 
happier on HRD and migrating their app. 
>You may well be the first (although I'm not trying to imply that you are 
the only one)... :)

*The app is in development for more than a year and I followed best 
practices valid at this time before high replication*
*datastore was introduced. Redesign is not an option because I already have 
generated a lot of interest and waiting list*
*of customers ready to pay for the current functionality. The benefit I 
would get from going to High Replication does not *
*justifies the effort: I have already 20,000 lines of code - redesign is not 
practical.*
*
*
*Best,*
*
*
*--Constantine*

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/S6G9eOWRvVUJ.
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.

Reply via email to