根據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