根据AppStats,当运行200个文档和1个DocUser时,脚本大约需要5000ms。总结在于,对于每个需要6-51ms的lastEditedBy(datastore_v3.Get)的每个锁定,都存在对数据存储的请求。如何减少对数据存储的请求数
我想要做的是使某些东西,使显示许多实体与几个属性,其中一些是从其他实体派生。永远不会有大量的实体(< 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>'
为什么你在文档上循环,然后每次在循环中读取所有文档?你的main.py有问题。 – mjibson 2012-04-29 00:40:55
对不起,我的示例代码中有错误。现在修复。 – 2012-04-29 08:27:54