Как профилировать приложение:
import os
# ...
if os.getenv('SERVER_SOFTWARE', '').startswith('Dev'):
# http://localhost:8080/_ah/stats/ - тут появится подробная статистика: запросы, время, вызовы api
from google.appengine.ext.appstats import recording
app = recording.appstats_wsgi_middleware(app)
В первом случае можно обойтись двумя вызовами (0 при кешировании выборки в gae memcache):
class Artwork(db.Model):
refs = db.ListProperty(db.Key)
@property
def taxonomy(self):
return db.get(self.refs)
Можно сократить количество вызовов, передавая в db.get и db.put сразу несколько значений
# 100 вызовов
for tag in tags: db.put(Tag(tag))
# 1 вызов
db.put([Tag(tag) for tag in tags])
Во втором случае будет всего один вызов RPC, тк хранятся строки (0 при кешировании).
Ну и по возможности нужно кешировать выборку в gae memcache, тк это быстрее и запросы туда не учитываются.
PS
Nick's Blog — ReferenceProperty prefetching in App Engine — отличные материалы по GAE от Ника Джонсона