2016-07-15 2 views
1

현재 라이브이고 많은 쿼리를받는 장고 웹 애플리케이션이 있습니다. 성능을 최적화 할 수있는 방법을 찾고 있는데 개선 할 수있는 부분은 데이터베이스와 상호 작용하는 방법입니다.Django에서 정적 데이터베이스 테이블 캐싱

현재보기에서 특정보기에 대한 각 요청은 전체 데이터베이스 테이블을 팬더 데이터 프레임에로드합니다.이 프레임에 대해 쿼리가 수행됩니다. 이 표는 55,000 개가 넘는 텍스트 데이터 행으로 구성됩니다 (대부분 좌표).

불필요한 쿼리를 피하기 위해 데이터베이스를 메모리에 캐시하고 처음로드 할 때 캐시하도록 권장되었습니다. 이것은 사물의 DB 측면에서 약간의 오버 헤드를 제거합니다. 전에 장고의 이런 기능을 사용 해본 적이 없기 때문에 나는 조금 길다.

장고 manual에는 내가하고 싶은 것의 구체적인 구현이없는 것 같습니다. 전체 테이블을 메모리에 저장하거나 파일에 저장하는 것이 더 좋은 아이디어일까요?

+0

나는이 질문이 너무 광범위하게 표시 될 것이라고 예측하지만 https://github.com/Suor/django-cacheops로 시작한 다음 정확히 무엇을 원하는지 신경 쓰면 Google을 제안 할 수 있습니다. – valignatev

+0

[django cachalot] (https://github.com/BertrandBordage/django-cachalot)을 사용해 볼 수도 있습니다. 설치가 쉽고 원하는 작업을 정확하게 수행 할 수 있습니다. 첫 번째 요청을 메모리에 저장 한 다음 나중에 가져옵니다. – mislavcimpersak

답변

1

나는 비슷한 문제가있어서 django-cache-machine은 매력처럼 작동했습니다. Django 캐싱 기능을 사용하여 쿼리 결과를 캐시합니다.

pip install django-cache-machine 

그런 다음 모델에서 당신은 캐시 할 : 그것은 (당신이 이미 장고의 캐시 백엔드를 구성한 가정)를 설정하는 것은 매우 쉽다

from caching.base import CachingManager, CachingMixin 

class MyModel(CachingMixin, models.Model): 
    objects = CachingManager() 

을 그리고 그것 뿐이다, 쿼리가 캐시됩니다 .