합리적인 성능을 얻기 위해 애플리케이션 데이터를 모델링하는 데 어려움이 있습니다. 그 다음 내가 가진, 내가 예를 들어 각 사람의 균형을 계산할 때 문제가Google App Engine Datastore에서 내 앱을 모델링하는 방법
class Event(db.Model):
# Values
name = db.StringProperty(required=True)
password = db.StringProperty(required=True)
class Person(db.Model):
# References
event = db.ReferenceProperty(Event, required=True)
# Values
name = db.StringProperty(required=True)
class Transaction(db.Model):
# References
event = db.ReferenceProperty(Event, required=True)
paidby = db.ReferenceProperty(Person, required=True)
# Values
description = db.StringProperty(required=True)
amount = db.FloatProperty(required=True)
datetime = db.DateTimeProperty(auto_now_add=True)
# This is used because a transaction might not distribute costs
# evenly across all persons belonging to the event
class TransactionPerson(db.Model):
# References
event = db.ReferenceProperty(Event, required=False)
transaction = db.ReferenceProperty(Transaction, required=True)
person = db.ReferenceProperty(Person, required=True)
# Values
amount = db.FloatProperty(required=True)
입니다 :
그것은 나는 다음과 같은 엔티티 한 사람과 오늘의 그룹 내에서 비용을 추적하는 응용 프로그램입니다
-
: (~입니다 아래의 예에서 65.000 작업을)
- 4 명
- 76 거래
- 213 TransactionPerson
각 트랜잭션/사람의 조합에 대한 모든 TransactionPerson을 통해 이벤트 및 루프와 관련된 모든 데이터를 가져 오기 위해 내가 가진 이벤트 예를
인당 이러한 균형 요약을 표시하고 모든 트랜잭션이 걸리는 시작 페이지로 요청 :
real: 1863ms cpu: 6900ms (1769ms real) api: 2723ms (94ms real)
순간 I에서 3 명의 RPC 요청만으로 이벤트에 대한 모든 사람, 트랜잭션 및 트랜잭션 담당자를 얻은 다음 응용 프로그램에서 모든 "관계형"작업을 수행합니다. 즉, CPU ms가 꽤 높은 이유입니다.
질문 :
그것은, 2723ms API를 CPU 만 3 개 데이터 저장소 요청에서 293 개체를 얻을하는 데 걸리는 꽤 높지 않다? 실시간은 괜찮습니까 (94ms),하지만 내 API 할당량에서 많이 걸립니까?
더 나은 성능을 얻으려면 어떻게 설계해야합니까? 예를 들어 12 명의 사람들이 있다면 시간은 3 배가됩니다. 이는 수용 가능한 응답 시간이 아닙니다.
고마워요!
memcache를 사용하여 비정규 화 된 데이터를 저장하고 거기에서 가져 오면 읽기 성능이 크게 향상됩니다. 귀하의 솔루션뿐만 아니라, 같은 속도로 데이터와 느린 추가/쓰기 요청을 내 memcache 솔루션으로 같은 속도로 추가 할 수있을 것 같아요 특정 추가 이벤트에 대한 memcache를 무효화 할 추가/쓰기. – thejaz