본문 바로가기

카테고리 없음

MySQL 성능 개선 프로젝트 12

2024.09.19 - [분류 전체보기] - MySQL 성능 개선 프로젝트 9

 

MySQL 성능 개선 프로젝트 9

배송 주문 테이블의 경우 다음과 같이 데이터가 입력되고 있다. is_complete 컬럼을 통해 해당 배송 주문이 완료되었는지 확인 하며, 완료된 배송 주문은 기사에게 할당되지 않는다.하지만 시간이

yis0707.tistory.com

 

지난 글에서 배송 기사 실적에 대한 빠른 조회를 위해 완료된 배송 주문 데이터를 실시간으로 다른 테이블로 옮기는 방법을 택했었다. 하지만 이 경우 몇 가지 문제가 발생할 수 있다.

첫 번째는 잘못된 주문이 배송 완료 처리 되었을 때이다. 배송은 배송 기사가 배송을 끝낸 후 서명이나 증빙 사진을 입력할 경우 완료 처리된다. 이 때 배송 기사가 잘못된 입력을 통해 다른 배송 주문이 완료처리가 되어버릴 경우 해당 배송은 배송 주문 테이블에서 즉시 삭제되어 배송 완료 테이블로 옮겨져 버린다. 이는 추가로 데이터를 다시 돌려야 하는 상황이 발생한다.

두 번째는 옮기는 과정에서 데이터가 소실되는 상황이 발생하는 경우이다. 데이터 무결성에 대한 리스크가 매우 크고 이러한 상황이 수시로 발생할 수 있다는 점이 매우 위험하다.

세 번째는 데이터가 쌓이는 이유 때문에 조회가 느려지는게 문제였는데, 데이터를 다른 테이블에 옮겨도 그 테이블에 데이터가 쌓일 것이다. 이는 근본적인 문제를 해결하는 방법이 아니다.

 

이에 대한 새로운 방법은 배송 기사의 하루 결산에 대한 데이터를 입력하면서 그 데이터를 조회하는 것이다.

배송 기사가 일을 마치고 퇴근하면 하루치의 기록이 별도의 테이블에 저장된다.

 

데이터 입력은 주간 배송 기사가 퇴근하는 오후 10시, 야간 배송 기사가 퇴근하는 오전 10시 두 번 입력된다.

이 때 같은 데이터가 두 번 입력되지 않도록 주의한다.

그리고 이렇게 쌓인 데이터는 한 달에 한 번 월별 테이블에 저장된다.

 

배송 기사의 실적에 대한 조회는 해당 테이블들을 이용하면 될 것이다.

 

배송 주문 30000건 기준 일별 배송 실적에 입력되는 데이터는 1500건밖에 되지 않는다.

근무한 배송기사들만 입력되기 때문이다. 이를 통해 데이터의 양도 매우 줄일 수 있다.