我正在寫一個小程序來記錄閱讀進度,數據模型很簡單:數據存儲訪問優化
class BookState(db.Model):
isbn = db.StringProperty()
title = db.StringProperty(required=True)
pages = db.IntegerProperty(required=True)
img = db.StringProperty()
class UpdatePoint(db.Model):
book = db.ReferenceProperty(BookState)
date = db.DateProperty(required=True)
page = db.IntegerProperty(required=True)
的UpdatePoint類記錄的用戶有多少網頁上的相應日期讀取。現在我想提請從存儲在App Engine的數據庫中的數據的圖表,函數看起來是這樣的:
book = db.get(bookkey)
ups = book.updatepoint_set
ups.order('date')
for (i, up) in enumerate(ups):
if i == 0: continue
# code begin
days = (up.date - ups[i-1].date).days
pages = up.page - ups[i-1].page
# code end
# blah blah
我發現了一本書,大約40更新點,它會成本超過4秒鐘運行代碼。在計時之後,我發現評論的代碼片段似乎是糟糕的表現的根源。每個循環的成本大約爲0.08秒或更多。
看起來UpdatePoint是以一種懶惰的方式提取的,它不會被加載直到它被需要。我想知道是否有任何更好的解決方案來加速數據訪問,如提取大量數據。
非常感謝您的回覆。
我認爲這就是你的updatepoint_set函數可能會做的,因爲這不是我見過的appengine調用。 – AutomatedTester 2009-07-10 07:46:15