mysql 테이블 파티셔닝 질문

djkneg883   
   조회 481   추천 0    

 안녕하세요.

MySQL 테이블 파티셔닝 관련해서 고민중이 내용이 있어서 조언을 구하고자 글을 남깁니다.

10년치 데이터 테이블은 연도별로 나누려고 합니다.

테이블 파티셔닝이라는게 있던데, Range 파티셔닝을 이용해서 테이블 파티셔닝을 했을때와

테이블은 단순히 한개의 기준일자를 잡아서 연도별로 나누는것과 비교를 하면 어떤 장단점이 있는지 궁금합니다.


1. 테이블 파티셔닝

ListTable이라는 1개의 테이블에 10년치 데이터를 넣고, 아래와 같이 관리하는 방법

ALTER TABLE `ListTable` PARTITION BY RANGE (TO_DAYS(`regDt`)) (

   PARTITION P_2019 VALUES LESS THAN (TO_DAYS('2020-01-01')) ENGINE = MYISAM,

   PARTITION P_2020 VALUES LESS THAN (TO_DAYS('2021-01-01')) ENGINE = MYISAM,

   ......

)


2. 단순 테이블 나누기

ListTable_2019, ListTable_2020, ListTable_2021 ....

이런식으로 전부 테이블을 만들고 데이터를 관리하는 방법


위와 같이 했을 때, 만약 regDt 범위를 2019.05.01 ~ 2020.12.31 이렇게 검색을 한다면

1번의 경우 select * from ListTable where regDt between '2019-05-01' and '2020-12-31' 이렇게 단순하게 하면 될것 같지만

2번의 경우 (select * from ListTable_2019 where where regDt between '2019-05-01' and '2020-12-31') UNION ALL (select * from ListTable_2020 where where regDt between '2019-05-01' and '2020-12-31') 이렇게 하는게 맞는지요?


정리를 하자면,

질문1. 테이블 파티셔닝과 테이블을 단순하게 나눴을때의 장단점이 어떤게 있는지 궁금합니다.

질문2. regDt 범위를 2019.05.01 ~ 2020.12.31 이렇게 검색한다면 제가 생각하는게 맞는건지 궁금합니다. 2번의 경우 더 나은방법이 있는지도 궁금합니다.

짧은글 일수록 신중하게.
MySQL도 다른 DBMS랑 별 차이가 없어
https://velog.io/@ryuhyewon/%ED%8C%8C%ED%8B%B0%EC%85%98-%EC%9E%A5%EB%8B%A8%EC%A0%90
문서 참고하시면 될 것 같습니다.

테이블을 분할해
UNION ALL 을 사용해야 할 경우가 많다면 파티셔닝 하는 것을 추천 합니다.
데이터가 얼마나 많은지 모르겠지만 대용량이 아니면 파티셔닝도 하지 않아도 ...
캔위드 02-14
개인적인 생각입니다. 단순 참고 해주세요^^

1. 테이블 파티셔닝은 어플리케이션을 수정하지 않아도 되는게 장점이라고 생각합니다.
  테이블을 단순하게 나누는건 어플리케이션이든 아니면 이벤트 스케줄러를 걸든 추가 작업이 필요하다는거.. 개발자는 빡세지만 어쨌든 눈에 보이는 관리라는게 장점인것 같고요.

2. 파티셔닝된 테이블은 생각하신 대로 쓰면 되고요.
  단순하게 나눈 테이블도 그런식으로 하시면 됩니다. 복잡하죠...

그래서 대형 쇼핑몰(지마켓,11번가,쿠팡,등등등..) 모든 은행들 보시면 범위 검색이 제한적 일 수 밖에 없습니다.. 최근 몇달 또는 언제부터 언제까지 지정.

개인적인 생각으로 개발,서버,운영,기획,예산 등등 눈앞의 현실은 상황마다 다르기에 정해진 정답은 따로 없다고 봅니다.
가령 뭐 고성능/고용량 u.2 ssd 레이드 이빠이 묶는 식으로 즉, 하드웨어로 밀어 붙이는 것 또한 가능한 방법이 될 수 있죠
술이 02-14
테이블이 대용량일때의 문제점을 생각하면 이해가 빠를겁니다.
특정부분 검색할려고 하면 숨넘어갑니다. 그런데 이걸 테이블단위로 쪼개버리면 어플리케이션 단에도 코딩을 다시해야되는 문제가 생기게 됩니다.
그래서 테이블 파티션이란게 필요한겁니다.
검색범위가 파티션단위로 구분되다보니 성능이 훨씬 개선됩니다.
MySQL은 파티션까지만 지원되는지는 모르겠으나 MSSQL 기준으로 본다면 파티션 구분별로 압축테이블을 지정할수가 있고 테이터 날릴때도 파티션ID로 한방에 날릴수 있어서 유지관리하는데도 훨씬 용이합니다.

테이블파티션의 기준은 대용량이라는 기준과 성능과 유지관리에 있습니다.
강한구 02-14
개발자의 입장에서는
그냥 테이블을 분리합니다
좀더 복잡하게하면 실시간 db용으로하고
이전 년단위 데이터는 다른 db에 넣어버리고
실시간 운영에 필요한 db는 복제 db만들어서 실시간 백업 db로 동기화합니다

장점은 복구가 필요할때 용량이 줄어들어서 몇분내로 한다는거 하나밖에 없습니다만
서비스용도는 이정도까지 해봤었네요


QnA
제목Page 77/5476
2014-05   4166646   정은준1
2015-12   733536   백메가
05-15   1135   victor1
05-15   1250   사누스
05-15   1135   inquisitive
05-15   872   이매망량2
05-15   495   pibang
05-15   708   담장
05-15   694   AplPEC
05-15   850   Noman
05-15   890   미담
05-15   621   신은왜
05-15   563   victor1
05-15   634   범이님
05-14   1033   tidd
05-14   1119   stones
05-14   1511   VSPress
05-14   1432   VSPress
05-14   1829   서버같은인생
05-13   1500   김민철GC
05-13   1516   블루영상
05-13   1081   박문형