我正在写一个小程序来记录阅读进度,数据模型很简单:数据存储访问优化
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