파티셔닝
파티셔닝
개념
테이블을 파티션이라는 작은 단위로 나누어 관리하는 기법
종류
수평 파티셔닝
- 개념
- 샤딩과 동일한 개념
- 스키마를 복제한 후 샤드키를 기준으로 데이터를 나누는 것을 말한다.
- 즉, 스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다.
- 장점
- 데이터의 개수를 기준으로 나누기 때문에 데이터의 개수가 작아지고, 따라서 인덱스의 개수도 작아진다. 그러므로 자연스럽게 성능은 향상된다.
- 단점
- 데이터를 찾는 과정이 기존보다 복잡하기 때문에 latency가 증가한다.
- 하나의 서버가 고장나게 되면 데이터의 무결성이 깨질 수 있다.
- 개념
수직 파티셔닝
- 개념
- 테이블의 컬럼을 기준으로 나누는 것을 말한다.
- 정규화하는 것과 비슷하지만 이미 정규화된 데이터를 분리하는 과정이다.
- 장점
- 자주 사용하는 컬럼을 분리하여 성능을 향상할 수 있다.
- 개념
분할 기준
- 범위 분할(Range Partitioning)
- 연속적인 숫자나 날짜를 기준으로 분할한다.
- 우편번호, 일별, 월별, 분기별 등의 데이터에 적합하다.
- 목록 분할(List Partitioning)
- 특정 파티션에 저장될 데이터에 대한 명시적 제어가 가능하다.
- 분포도가 비슷하며, 많은 SQL에서 해당 컬럽의 조건이 많이 들어오는 경우 유용하다.
- [한국, 일본, 중국 -> 아시아][노르웨이, 스웨덴, 핀란드 -> 북유럽] 등의 예시가 존재한다.
- 해시 분할(Hash Partitioning)
- 해시 함수의 값에 따라 어떤 파티션에 포함할지 여부를 결정한다.
- 파티션을 위한 범위가 없는 데이터에 적합하다.
- 합성 분할(Composite Partitioning)
- 위의 기술을 결합하여 사용하는 방법을 말한다.
- 범위 분할을 할 수 있지만, 분할된 결과가 너무 커서 효과적으로 관리할 수 없는 경우에 유용하다.
- 범위-목록, 범위-해시 등의 예시가 존재한다.