3

Google App Engine을 사용하면 누구나 ComputedProperty 대 주문형 a를 사용하는 성능 특성 (읽기 & 쓰기)을 밝힐 수 있는지 궁금합니다. 관련 모델의 개수.ComputedProperty의 GAE NDB 성능과 관련 모델 수를 조회하는 것

ComputedProperty는 속성에 대한 인덱싱을 허용하는 뚜렷한 이점이 있지만, 단지 & 쓰기가 얼마나 빠른지 궁금합니다. 예를 들어

, 주어진 두 가지 모델 :

class Car(ndb.Model): 
    owner_key = ndb.KeyProperty(kind='Owner', indexed=True) 

class Owner(ndb.Model) 
    def cars_count(self): 
     ndb.query(Car.owner_key == self.key).count() 

    cars_count_prop = ndb.ComputedProperty(cars_count) 

문제는 정말 뭔가로 분해 다음는 cars_count_prop을 가지고 있기 때문에

  1. 가 얼마나 느린 Owner을 쓰고있다?
  2. 얼마나 빨리 읽을 수 있습니까 cars_count_prop보다 cars_count입니까? 즉

또는 :

  1. 읽기 및 각 기록의 점근 적 복잡도 (큰-O)는 무엇인가?
  2. Jay Leno 이외의 사람들 (즉, Owner 당 작은 수의 Car 인스턴스)의 평균 계산 복잡도는 얼마입니까?
  3. 읽기 및 쓰기 대기 시간은 계산상의 복잡성이 얼마나되며 데이터베이스/memcache 조회는 얼마입니까?

답변

6

소유자 엔티티를 업데이트 할 때마다 쿼리가 다시 계산됩니다. 그것은 좋을 수 없다. 쿼리의 복잡성은 문제가 아닙니다. 그러나 정말로 알고 싶다면 벤치마킹해야합니다.

+0

고마워, 귀도. 'ComputedProperty' 대안은 거의 작성되지는 않지만 자주 읽히는 경우에 바람직 할 것으로 추측됩니다. –

+2

이러한 경우에도 계산 된 속성은 아무 것도 저장하지 않습니다. 값을 물을 때마다 여전히 쿼리가 실행됩니다! 계산 된 속성을 사용하는 지점은 계산 된 값을 색인화하려는 경우입니다. 하지만이 예제는 좋은 후보가 아닙니다. 왜냐하면 저장된 값이 주어진 소유자에게 자동차가 추가되거나 제거 될 때마다 오래된 값이되기 때문입니다. 그들이 자동차를 구입하거나 처분 할 때마다 소유자에게 읽기 + 쓰기주기를 추가하여이 문제를 해결할 수 있습니다.하지만 수동으로 카운트를 저장할 수도 있습니다. –

+0

아, 그래요. 그것이 바로 [문서가 말하는 것] (https://developers.google.com/appengine/docs/python/ndb/properties#computed)이므로주의해야합니다. 귀하의 의견에 감사드립니다. 아주 도움이됩니다. –

관련 문제