최적화 2

django query 최적화 시키기 - update는 비동기로

def get_object(self): review = super().get_object() # 조회수 1 증가 review.watch += 1 review.save() return review 이와 같이 객체를 가져와서 속성을 변경한 뒤 저장(update)을 하는 로직이다. 그런데 무려 4ms나 걸린다. 어떻게든 줄여야겠다는 생각이 든다. DetailView라서 watch 속성만 가져오는 건 불가능하다. name을 비롯해 여러 속성이 보여야 한다. 생각을 해보다가 마땅한 방법이 없어서 celery가 나중에 처리해주는 방식을 선택했다. 덕분에 update query 작업이 없어져서 6ms -> 2ms로 로딩 속도를 줄일 수 있었다. def get_object(self): review = super().g..

django 2021.02.11

django query 최적화 시키기 - prefetch_related

흠... query에 연결은 1번만 하지만 10 simillar가 거슬린다. 최적화시켜 본다. 우선 query 가져오는 시간부터 살펴봤다. 데이터 10개 가져오는데 8.97ms나 필요하다. 개선이 필요해 보인다. 일단 인덱스 페이지에서 나는 info만을 필요로 한다. Review.objects.order_by('-create_date')[:5] 그래서 위 코드를 아래처럼 Review.objects.only("info").order_by('-create_date')[:5] info 관련 필드만 가져오게 수정했다. only() 사용만으로도 5.99ms로 줄어들었다. 새로고침 해보니까 같은 코드임에도 매번 다른 시간이 걸린다. 이 시간에 크게 연연하면 안 되겠다. 하지만 아직도 거슬린다. 10 similar ..

django 2021.02.11