2017-11-14 1 views
0

간단한 가격 추적 프로그램을 개발 중입니다. 저는 웹 애플리케이션 디자인에 익숙하지 않으며 경험 많은 의견을 사용할 수 있습니다. 내 응용 프로그램은 고유 한 제품 SKU를 통해 하루에 수십만 개의 제품에 대한 가격을 인상합니다. 각 SKU를 들어 응용 프로그램 오버 헤드 디자인 결정 : 데이터베이스 행에 필요한 값을 저장하거나 쿼리 세트에서 동적으로 찾으십시오.

내가 보여줄 수 있어야합니다 :

  • 모든 시간 높은 가격을
  • 모든 시간을 저렴한 가격
  • 평균 가격

내 API는 새로운 SKU를 기록 데이터베이스에 가격 나는이 세 가지 값을 파악하고 최신/현재 가격 행에 쓸 수 있습니다. 이것은 내 View에서 Django Queryset을 사용하여 쿼리 및/또는 계산 및 표시하는 것보다 나은 설계 결정입니까?

편집 :

물론, 현재 def get_context_data와 장고 클래스 기반 뷰에 공급하고있다. 나는 집계 MIN을 사용하고 있지 않다

context['high_price'] = prices.order_by('price').last() 
context['low_price'] = prices.order_by('-price').last() 
context['avg_price'] = prices.aggregate(average=Avg('price')) 

주/MAX는 나뿐만 아니라 내가 (가격 모델은 '가격의 날짜'와 '가격의 컬럼으로 구성되어 전체 가격 행에 필요한 각각의 가격과 날짜를 필요로하는 ').

원래 질문은 여전히 ​​의미합니다. 나는 새로운 가격을 가져올 때마다이 값을 높게/낮게/평균으로 써야 하나? 여기에 내가 (가장 높은 모든 시간 가격 예) 그렇게 할 수있는 방법은 다음과 같습니다

if product.high_price is None or (price.value is not None and price.value >= product.high_price.value): 
      product.high_price = price 
+0

코드를 공유 할 수 있습니다. AVG 용 django에서 집계를 사용하면 SUM – Vaibhav

+0

확실히 OP가 편집됩니다. – adamkost

+0

당신의 기준은 무엇입니까? 성능 병목 현상이 있습니까? 벤치마킹 해 보셨습니까? Django 디버그 도구 모음은 데이터베이스 쿼리를 검사하고 프로파일 링하는 데 사용할 수 있습니다. https://github.com/jazzband/django-debug-toolbar –

답변

0

이 빠른해야 당신이 인덱스가 제공하는 검색어 세트를 사용. 보유하고있는 것을 벤치마킹 한 다음 모델에서 인덱스를 추가하고 반복하는 것이 재미있을 것입니다. 예.

price = models.DecimalField(db_index=True) 

는 느린 하나가 될 것입니다 평균을 계산 https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.Field.db_index

참조 곳의 평균 저장을 계산하는 직업을 가지고 그것을 가치가있을 수도 있습니다. celery/redis를 백그라운드에서 사용하거나 설정에 따라 데이터를 가져올 때 한 번 수행 할 수 있습니다.

관련 문제