Я пишу небольшую программу для записи прогресса чтения, модели данных просты:
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 загружается лениво, и он не будет загружен, пока не понадобится. Я хочу знать, есть ли лучшее решение для ускорения доступа к данным, например, выборка данных в кучу.
Большое спасибо за ваш ответ.