*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 [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.