2017-10-21 8 views
0

서버에서 처리하는 데 최대 30 분이 걸리는 보고서를 개선하는 방법에 대한 아이디어를 찾고 있는데, 현재 장고와 MySQL을 사용하고 있지만 언어 나 SQL 데이터베이스를 변경해야하는 솔루션이 있다면 그걸 열어.보고서 처리 시간을 향상시키는 방법 (Django/MySQL)?

여러 개의 Excel 파일을 읽고 해당 파일의 모든 행을 12K에서 15K 개의 레코드 범위의 테이블 (보고서 테이블)에 삽입하면 테이블에 약 50 개의 열이 있습니다. 이 부분은 그렇게 많은 시간을 소비하지 않습니다.

난 내가 이런 걸 가지고 종료 있도록 비즈니스 로직의 여러 단계를 적용하기 시작 보고서 테이블의 모든 레코드가 있으면 :

def create_report(): 
    business_logic_1() 
    business_logic_2() 
    business_logic_3() 
    business_logic_4() 

business_logic_X의 각 기능이 매우 비슷한 무언가를, 그것은 ReportModel.objects.all()을 실행하여 시작한 다음 날짜, 수량 등의 확인과 같은 여러 계산을 적용하고 레코드를 업데이트합니다. 12K 레코드 테이블이기 때문에 전체 보고서를 신속하게 추가하기 시작합니다.

여러 함수를 별도로 처리하는 이유는 첫 번째 함수의 논리가 완료되어 다음 함수의 논리가 작동해야하기 때문입니다 (예 : 첫 번째 함수는 모든 관련 레코드를 찾습니다.

가장 먼저 최적화 할 수있는 것은 어떻게 든 각 함수에서 호출하는 대신 objects.all()을 캐싱하는 것이지만 전달 방법은 확실하지 않습니다. 레코드를 저장하지 않고 다음 함수를 호출하십시오.

함수의 저장 메소드에서 update_fields를 사용하여 보고서를 조금 최적화하고 시간을 절약 해줍니다.

제 질문은 이런 종류의 문제에 대한 더 나은 접근 방법이 있습니까? Django/MySQL은 이것에 적합한 스택인가?

+0

관련 SQL을 보겠습니다. –

답변

0

장고에서하는 비즈니스 로직은 시간이 오래 걸립니다. 따라서 데이터베이스와 응용 프로그램간에 여러 번 왕복됩니다.

여러 테이블이 관련되어있는 것처럼 들리므로 원시 sql로 쿼리를 작성하고 필요할 경우 결과를 얻으면 제안 할 것입니다.

orm에는 사용할 수있는 "raw"메소드가 있습니다. 또는 더 낮은 수준으로 내려 데이터베이스에 직접 인터페이스 할 수도 있습니다.

내가하는 일을 더 많이 보지 않으면 더 구체적인 조언을 드릴 수 없습니다.