는 데이터 모델은 간단합니다 : 사용자가 날짜를 해당 읽을 얼마나 많은 페이지는 데이터 저장소 액세스 최적화
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 클래스 기록합니다. 지금은 앱 엔진 데이터베이스에 저장된 데이터에서 차트를 그리려는, 함수는 다음과 같습니다
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는 필요한 때까지로드되지 않도록 게으른 방식으로 가져옵니다. 한 무리의 데이터를 가져 오는 것과 같이 데이터 액세스를 가속화하는 더 나은 솔루션이 있는지 여부를 알고 싶습니다.
답장을 보내 주셔서 감사합니다.
나는 당신이 지금까지 본 appengine 호출이 아니므로 updatepoint_set 함수가 할 수 있다고 생각했다. – AutomatedTester
아마도 updatepoint_set은 참조를 사용할 때 자동으로 생성되는 백 레퍼런스입니까? http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#References –
젠장, 대답하기 전에 알아 냈어. ;) updatepoint_set은 Query 객체이며 인덱싱은 매번 쿼리를 새로 실행합니다. 한 번 가져 오는 것은 예상대로 배열을 제공합니다. –