파티셔닝

파티셔닝

개념

테이블을 파티션이라는 작은 단위로 나누어 관리하는 기법

종류

  1. 수평 파티셔닝

    수평 파티셔닝

    • 개념
      • 샤딩과 동일한 개념
      • 스키마를 복제한 후 샤드키를 기준으로 데이터를 나누는 것을 말한다.
      • 즉, 스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다.
    • 장점
      • 데이터의 개수를 기준으로 나누기 때문에 데이터의 개수가 작아지고, 따라서 인덱스의 개수도 작아진다. 그러므로 자연스럽게 성능은 향상된다.
    • 단점
      • 데이터를 찾는 과정이 기존보다 복잡하기 때문에 latency가 증가한다.
      • 하나의 서버가 고장나게 되면 데이터의 무결성이 깨질 수 있다.
  2. 수직 파티셔닝

    수직 파티셔닝

    • 개념
      • 테이블의 컬럼을 기준으로 나누는 것을 말한다.
      • 정규화하는 것과 비슷하지만 이미 정규화된 데이터를 분리하는 과정이다.
    • 장점
      • 자주 사용하는 컬럼을 분리하여 성능을 향상할 수 있다.

분할 기준

  1. 범위 분할(Range Partitioning)
    • 연속적인 숫자나 날짜를 기준으로 분할한다.
    • 우편번호, 일별, 월별, 분기별 등의 데이터에 적합하다.
  2. 목록 분할(List Partitioning)
    • 특정 파티션에 저장될 데이터에 대한 명시적 제어가 가능하다.
    • 분포도가 비슷하며, 많은 SQL에서 해당 컬럽의 조건이 많이 들어오는 경우 유용하다.
    • [한국, 일본, 중국 -> 아시아][노르웨이, 스웨덴, 핀란드 -> 북유럽] 등의 예시가 존재한다.
  3. 해시 분할(Hash Partitioning)
    • 해시 함수의 값에 따라 어떤 파티션에 포함할지 여부를 결정한다.
    • 파티션을 위한 범위가 없는 데이터에 적합하다.
  4. 합성 분할(Composite Partitioning)
    • 위의 기술을 결합하여 사용하는 방법을 말한다.
    • 범위 분할을 할 수 있지만, 분할된 결과가 너무 커서 효과적으로 관리할 수 없는 경우에 유용하다.
    • 범위-목록, 범위-해시 등의 예시가 존재한다.

참조