2012-08-14 2 views
5

다이어그램에 데이터를 보여주는 단 한 페이지의 매우 간단한 웹 프로젝트를 구현하고 있습니다. Django를 웹 서버로 사용하고 d3.js를이 다이어그램의 루틴으로 사용합니다. 상상할 수 있듯이 Django 서버가 응답해야하는 몇 가지 간단한 시계열이 있습니다. 따라서이 변수를 단순히 ram에 저장할 수 있는지 궁금합니다. 내 첫 번째 테스트는 내 views.py에서 이런 일이 있었다, 긍정적 : X이 모든 이제 다음 다른 기능에 의해 업데이트됩니다램에있는 django vars

X = np.array([123,23,1,32,123,1]) 

@csrf_exempt 
def getGraph(request): 
    global X 
    return HttpResponse(json.dumps(X)) 

공지 사항을하지만, 모든 사용자 액세스는 읽기 전용입니다. 전역 변수를 정의하여

  1. 보안 문제를 처리해야합니까?
  2. 일반적으로 불일치가 있습니까?

a thread은 장고에서 전역 변수에 대해 논의했지만,이 경우 어려움은 여러 개의 쓰기 액세스를 처리하는 것입니다.

데이터를 데이터베이스에 저장하지 않으려는 이유에 대한 대답 : 내 X에있는 모든 데이터는 이미 거대한 원격 데이터베이스에 저장되어 있으며이 웹 앱은 데이터를 표시해야합니다.

답변

2

변수에 저장하면 실제로 스레드에 영향을 미칩니다 (그리고 확장 성 - 동일한 앱을 실행하는 Django 서버가 두 개인 경우 어떻게됩니까?). Django 커뮤니티의 조언은 이 아니며!입니다!

이것은 장고 캐시 시스템에 적합합니다. getGraph보기를 @cache_page으로 캐시하면 작업이 완료됩니다. memcache를 사용할 필요가 없으며, 내장형 메모리 캐시 캐시 백엔다 *이 정상적으로 작동합니다. 캐시 (시간)에 제한 시간으로 매우 높은 숫자를 넣으십시오.

이 방법은 X 값이 아닌 HTTP 응답 (JSON)을 저장하는 것이지만 코드 샘플에서는 문제가되지 않습니다. 당신은 X-계산을 다시해야하는 경우에는 JSON을 다시 계산해야하고, 당신이 JSON을 다시 계산해야하는 경우는 X.

https://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs/


1-계산을 다시해야합니다 또는 그냥 '내장 메모리 백엔드', 나는 저항 할 수 없었다.

+0

장고 커뮤니티의 일원으로서 나는 반드시 "하지마"라고 말할 필요는 없다. 하지만 캐시 백엔드 +1을 사용하면이 문제를 해결할 수있는 훨씬 좋은 방법입니다. –

+1

@Joe이 시도하고 정상적인 HTTP 요청을 사용하여 잘 작동하지만 'AJAX를 통해 호출 할 때 캐시되지 않습니다. 아마 장고는 모든 AJAX 요청이 이전과 다르다고 생각하고'X'를 다시 계산합니다. 어떻게 대처할 수 있니? 하지만 Django 캐시 시스템을 추천 해 주셔서 감사합니다. - 글로벌 바보다 훨씬 더 우아합니다. –

+1

괜찮습니다. 나는 저수준 캐시 API를 사용하여 그것을 해결했다. 그것은 단지 완벽합니다. 고마워. –