数据存储访问优化

2024-03-29 11:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个小程序来记录阅读进度,数据模型很简单:

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数据库中存储的数据绘制一个图表,函数如下:

^{pr2}$

我发现对于一本大约有40个更新点的书来说,运行代码需要4秒钟以上。在计时之后,我发现注释的代码片段似乎是性能不佳的根源。每个循环大约花费0.08秒或更长时间。在

UpdatePoint似乎是以一种懒散的方式获取的,在需要时才会加载它。我想知道是否有更好的解决方案来加速数据访问,比如批量获取数据。在

非常感谢你的答复。在


Tags: 数据代码程序truedbmodel记录required
2条回答

从代码的外观来看,你的速度慢下来是因为它在循环中,并且必须弹出一点来找到你想要的对象。你试过类似的东西吗

i = 0
for up in ups:
  if i != 0:
    days = (up.date - previous.date).days
    pages = up.page - previous.page
  i += 1
  previous = up

我好像用错了查询类。我需要打电话ups.获取()首先获取数据。现在的代码比以前快得多:

book = db.get(bookkey)
q = book.updatepoint_set
q.order('date')
ups = q.fetch(50)

相关问题 更多 >