ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • On Boarding (2) :: 이력 데이터 관리
    Record 2023. 3. 16. 20:59

     

     

     

     

     

    시작하며


     출퇴근 기록이 담기는 테이블은 계속해서 데이터가 누적되는 상황이었고, 중요도가 높았기에 주기적인 아카이빙 솔루션이 필요했습니다. 또한 모든 요청이 하나의 커다란 테이블로 모이면서 발생하는 부하의 해결이 필요했기에, 출퇴근 테이블을 월 별로 RANGE 파티셔닝 하는 방법을 선택 했습니다.

    ( 2023년 레코드만 파티셔닝하는 예제입니다. )

     

    출퇴근 기록 테이블
    CREATE TABLE DDL
    ADD PARTITIONS DDL

     

    조회는 이렇게 동작됩니다.

    1. 'SO'의 2023년 3월 출근 기록 조회 Request
    2. Where `date` BETWEEN `2023-03-01` AND `2023-03-31` 조건으로  파티션 프루닝 진행
      ( partitions -> p202303 ) 
    3. Where `username` = 'so' 조건으로 인덱싱    ✔`username` 컬럼에 인덱스 추가된 상태
      ( Using index condition -> filtered 11.11% )
    4. 'SO'의 2023년 3월 출근 기록 조회 Response

     

    • 물론 카디널리티가 낮은 `username` 컬럼에 인덱스를 추가하는 것이 효율적이지 못 하다고 생각할 수 있지만, 사용자가 많아 진다는 가정 하에 선택도와 활용도 측면에서 큰 장점이 존재한다고 생각했습니다. 

     

     

    데이터 관리

    • 파티셔닝은 테이블의 물리적인 장소를 분리하기에 과거의 기록을 현재 기록에 영향을 주지 않고 쉽게 아카이빙 가능합니다.
      ( DB 서버의 부하 부담을 낮춰줍니다. ) 

     

     

    아마 추가적으로 성능 개선이 필요해진다면,

    1. DB 복제본 생성으로  Read / Write 요청 분리
    2. 캐시에 통계 데이터 적재 ( LRU ) 

     

    이렇게 처리하지 않을까 싶습니다. 

    읽어주셔서 감사합니다. 

     

    (피드백 환영입니닷)

    댓글

Designed by Tistory.