끄적이는 메모장

[DB] 파티셔닝(Partitioning) 본문

웹기술 개발자 되기/DB기술

[DB] 파티셔닝(Partitioning)

밥보92 2020. 4. 14. 22:49
반응형

RDBMS에서 Table의 크기가 너무 크다면 관리 측면에서 이슈가 발생할 수 있음

이슈는 용량의 한계와 성능의 저하를 뜻함

 

파티셔닝이란?

- 거대한 Table을 작은 단위로 나누어 관리하는 기법

- 데이터베이스를 분산처리 하는 것

 

성능적 측면에서

Query의 성능을 향상시킴, Full Scan을 줄임(Access범위의 축소), 대용량 데이터의 쓰기에 효율적, DML 경합 분산 (SELECT, INSERT, UPDATE, DELETE가 분산 될 수 있음)

가용성 측면에서

전체 데이터에 대한 훼손 가능성이 줄어듦(영역별 독립적인 백업이나 복구가 가능), 데이터 가용성이 향상

관리용이성 측면에서

작은 Table의 관리가 큰 Table의 관리보다 용이

 

장점 

- 가용성이 좋음

- 관리가 용이

- 파티션별 장애대응이 수월

- I/O분산으로 효율이 좋음

- 즉 데이터 조회 및 수정이 빠름

단점

- 테이블간 Join 비용이 증가 

- 장애 시 데이터 무결성이 깨질 수 있는 위험

- table과 index는 같이 파티셔닝 해야함 

 

종류

 

수평 파티셔닝 (샤딩)

- 스키마를 유지한채로 데이터를 나누는 것을 말함

이름1 주소1 번호1 특징1
이름2 주소2 번호2 특징2
이름3 주소3 번호3 특징3

- 동일한 스키마를 가진 데이터를 둘 이상의 테이블로 분산하여 저장

- 샤드키를 기반으로 분산 저장 

특징

- 데이터가 자연스럽게 분산됨 (개수를 기준으로)

- 분산된 테이블에 대한 데이터수가 작아지므로 성능이 향상됨

- 데이터를 찾는 과정이 복잡해짐 (지연이 증가)

- 장애 시 무결성이 깨질 수 있음

 

수직 파티셔닝

- 컬럼을 쪼개는 방식

- 스키마를 나누고 데이터를 옮기는 방식 (정규화하는 과정과 비슷하지만 차이점은 이미 정규화된 데이터를 분리한다는 점)

특징

- 사용이 자주되는 컬럼을 분리시켜 성능 향상을 모색할 수 있음

- 필요한 컬럼만 읽기때문에 효율이 증대

- 동일한 타입의 데이터가 저장될 확율이 높으므로 저장시 데이터의 압축률을 증대 시킬 수 있음

 

분할 기준

 

범위 분할(range partitioning)

- 분할 키 값이 범위 내에 있는지 여부로 구분

- 년도, 시간, 우편번호 등의 범위를 갖는 데이터가 분할 기준이 되는 경우

 

목록 분할(list partitioning)

- 분할 키는 특정 컬럼의 목로에 들어있는 값을 기준으로 함

- 국가, 도시 등을 기준으로 사용하는 경우

 

해시 분할(hash partitioning)

- 해시 함수에 의해 결정된 키를 기분으로 함

- 데이터를 균등하게 배분할 수 있음

- 범위가 존재하지 않는 데이터를 가지고 있을 때 적합함

- 각 파티션된 테이블에 어떤 값이 들어있는지 알수 없음 

 

합성 분할 (composite partitioning)

- 위의 기술들을 복합적으로 사용하는 방법

- 예시) 범위 분할 후 분할 된 데이터를 해시 분할 하는 등

 

참고

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%B6%84%ED%95%A0

https://nesoy.github.io/articles/2018-02/Database-Partitioning

https://en.wikipedia.org/wiki/Partition_(database)

https://gmlwjd9405.github.io/2018/09/24/db-partitioning.html

반응형

'웹기술 개발자 되기 > DB기술' 카테고리의 다른 글

[DB] 데이터베이스 정규화  (0) 2020.04.17
[DB] 트랜잭션(Transaction)  (0) 2020.04.15
[DB] Index란  (0) 2020.04.14