以下を200個のドキュメントと1個のDocUserで実行すると、AppStatsによるとスクリプトに約5000ミリ秒かかります。問題は、lastEditedBy(datastore_v3.Get)のロックアップごとにデータストアにリクエストがあり、それぞれ6〜51ミリ秒かかることです。
私がやろうとしているのは、いくつかのプロパティが他のエンティティから派生している多くのエンティティを表示できるようにすることです。エンティティの数が多くなることはなく(<5000)、これは管理インターフェイスであるため、同時に多くのユーザーが存在することはありません。
DocUserエンティティをキャッシュして最適化しようとしましたが、データストアに新しいリクエストを行わないと、上記のクエリからDocUserキーを取得できません。
1)これは理にかなっています-私が経験しているレイテンシーは正常ですか?
2)データストアへの追加リクエストなしでこれを機能させる方法はありますか?
models.py
class Document(db.Expando):
title = db.StringProperty()
lastEditedBy = db.ReferenceProperty(DocUser, collection_name = 'documentLastEditedBy')
...
class DocUser(db.Model):
user = db.UserProperty()
name = db.StringProperty()
hasWriteAccess= db.BooleanProperty(default = False)
isAdmin = db.BooleanProperty(default = False)
accessGroups = db.ListProperty(db.Key)
...
main.py
$out = '<table>'
documents = Document.all()
for i,d in enumerate(documents):
out += '<tr><td>%s</td><td>%s</td></tr>' % (d.title, d.lastEditedBy.name)
$out = '</table>'