2011-09-12 4 views
1

많은 특성을 가진 모델이 있는데 쓰기를 시도 할 때 요청이 너무 많은 CPU 시간 (1000cpu_ms 이상 및 8000api_cpu_ms 이상)을 사용한다는 경고가 로그에 표시됩니다.너무 많은 CPU 시간을 사용하지 않고 많은 특성을 가진 모델을 저장하는 것에 대한 해결책은 무엇입니까?

class TestModel(db.Model): 
    user = db.UserProperty() 
    p1 = db.StringProperty() 
    p2 = db.StringProperty() 
    p3 = db.StringProperty() 
    p4 = db.StringProperty() 
    p5 = db.StringProperty() # 475cpu_ms with 1..5 only 
    p6 = db.StringProperty() 
    p7 = db.StringProperty() 
    p8 = db.StringProperty() 
    p9 = db.StringProperty() 
    p10 = db.StringProperty() # 760cpu_ms with 1..10 only 
    p11 = db.StringProperty() 
    p12 = db.StringProperty() 
    p13 = db.ListProperty(unicode) 
    p14 = db.ListProperty(int) 
    p15 = db.ListProperty(int) 
    p16 = db.BooleanProperty() 
    p17 = db.DateTimeProperty() #over 1000cpu_ms with all these 


class DebugitHandler(webapp.RequestHandler): 
    def get(self): 
     instance = TestModel() 
     instance = instance.put() 
     self.response.out.write("Done.") 

모든 CPU 시간이 하나 .put() 호출에 소요되는 :

다음 테스트 프로그램

문제를 보여줍니다.

하나 이상의 모델로 모델을 분할하는 것 이외에는 (이 경우에도 여전히 동일한 수의 속성을 사용하므로 도움이되지 않을 수 있음)이 문제를 해결할 수있는 방법이 있습니까? CPU 시간을 1 초 이상 사용하지 않고 데이터 저장소에 20 개의 속성을 갖는 1 개의 인스턴스를 넣는 방법? quota documentation에 명시된 바와 같이

답변

3

: 주어진 엔티티 증가와 관련된 속성의 수가

, 그래서 그 실체

만일에게 읽고 쓰는 데 필요한 CPU 시간을 수행하면 돈 이러한 각 속성을 정렬하거나 필터링해야 할 필요가있는 경우 indexed = False 선언을 추가 할 수 있습니다. 이것은 약간의 CPU 시간을 절약해야합니다 ..

class TestModel(db.Model): 
    user = db.UserProperty(indexed = False) 
    p1 = db.StringProperty(indexed = False) 
    p2 = db.StringProperty(indexed = False) 
    p3 = db.StringProperty(indexed = False) 
    .... 
+1

고마워요! 그랬어. –

관련 문제