2024.09.19 - [분류 전체보기] - MySQL 성능 개선 프로젝트 9
지난 글에서 배송 기사 실적에 대한 빠른 조회를 위해 완료된 배송 주문 데이터를 실시간으로 다른 테이블로 옮기는 방법을 택했었다. 하지만 이 경우 몇 가지 문제가 발생할 수 있다.
첫 번째는 잘못된 주문이 배송 완료 처리 되었을 때이다. 배송은 배송 기사가 배송을 끝낸 후 서명이나 증빙 사진을 입력할 경우 완료 처리된다. 이 때 배송 기사가 잘못된 입력을 통해 다른 배송 주문이 완료처리가 되어버릴 경우 해당 배송은 배송 주문 테이블에서 즉시 삭제되어 배송 완료 테이블로 옮겨져 버린다. 이는 추가로 데이터를 다시 돌려야 하는 상황이 발생한다.
두 번째는 옮기는 과정에서 데이터가 소실되는 상황이 발생하는 경우이다. 데이터 무결성에 대한 리스크가 매우 크고 이러한 상황이 수시로 발생할 수 있다는 점이 매우 위험하다.
세 번째는 데이터가 쌓이는 이유 때문에 조회가 느려지는게 문제였는데, 데이터를 다른 테이블에 옮겨도 그 테이블에 데이터가 쌓일 것이다. 이는 근본적인 문제를 해결하는 방법이 아니다.
이에 대한 새로운 방법은 배송 기사의 하루 결산에 대한 데이터를 입력하면서 그 데이터를 조회하는 것이다.
배송 기사가 일을 마치고 퇴근하면 하루치의 기록이 별도의 테이블에 저장된다.
데이터 입력은 주간 배송 기사가 퇴근하는 오후 10시, 야간 배송 기사가 퇴근하는 오전 10시 두 번 입력된다.
이 때 같은 데이터가 두 번 입력되지 않도록 주의한다.
그리고 이렇게 쌓인 데이터는 한 달에 한 번 월별 테이블에 저장된다.
배송 기사의 실적에 대한 조회는 해당 테이블들을 이용하면 될 것이다.
배송 주문 30000건 기준 일별 배송 실적에 입력되는 데이터는 1500건밖에 되지 않는다.
근무한 배송기사들만 입력되기 때문이다. 이를 통해 데이터의 양도 매우 줄일 수 있다.