-
On Boarding (2) :: 이력 데이터 관리Record 2023. 3. 16. 20:59
시작하며
출퇴근 기록이 담기는 테이블은 계속해서 데이터가 누적되는 상황이었고, 중요도가 높았기에 주기적인 아카이빙 솔루션이 필요했습니다. 또한 모든 요청이 하나의 커다란 테이블로 모이면서 발생하는 부하의 해결이 필요했기에, 출퇴근 테이블을 월 별로 RANGE 파티셔닝 하는 방법을 선택 했습니다.
( 2023년 레코드만 파티셔닝하는 예제입니다. )
출퇴근 기록 테이블 CREATE TABLE DDL ADD PARTITIONS DDL 조회는 이렇게 동작됩니다.
- 'SO'의 2023년 3월 출근 기록 조회 Request
- Where `date` BETWEEN `2023-03-01` AND `2023-03-31` 조건으로 파티션 프루닝 진행
( partitions -> p202303 ) - Where `username` = 'so' 조건으로 인덱싱 ✔`username` 컬럼에 인덱스 추가된 상태
( Using index condition -> filtered 11.11% ) - 'SO'의 2023년 3월 출근 기록 조회 Response
- 물론 카디널리티가 낮은 `username` 컬럼에 인덱스를 추가하는 것이 효율적이지 못 하다고 생각할 수 있지만, 사용자가 많아 진다는 가정 하에 선택도와 활용도 측면에서 큰 장점이 존재한다고 생각했습니다.
데이터 관리
- 파티셔닝은 테이블의 물리적인 장소를 분리하기에 과거의 기록을 현재 기록에 영향을 주지 않고 쉽게 아카이빙 가능합니다.
( DB 서버의 부하 부담을 낮춰줍니다. )
아마 추가적으로 성능 개선이 필요해진다면,
1. DB 복제본 생성으로 Read / Write 요청 분리
2. 캐시에 통계 데이터 적재 ( LRU )이렇게 처리하지 않을까 싶습니다.
읽어주셔서 감사합니다.
(피드백 환영입니닷)
'Record' 카테고리의 다른 글
AWS Building Block Review - DevSecOps (0) 2023.04.21 토비의 스프링부트 수강 후기 (0) 2023.04.17 On Boarding (1) :: 아키텍처 (0) 2023.03.16 BootCamp(2) - 프리티어 인스턴스 성능 튜닝 (0) 2022.11.25 BootCamp(1) :: 마지막 프로젝트 (0) 2022.11.24