DB Partitioning 종류

newVelog·2024년 5월 2일
0

CS

목록 보기
26/31

이전 게시글에서 DB Partitioning의 특징에 대해 알아보았고 이번 게시글에서는 MySQL에서 제공하는 파티션 종류를 알아보려한다.

Range Partition

앞서 예시로 들었던 로그 파일을 다룰 때 레인지 파티션을 보통 사용한다.

PARTITION BY RANGE 괄호 안에 파티션 표현식이 들어가는데 그 아래는 MySQL 내장함수를 사용해서 년도를 기준으로 3가지 파티션으로 나누어 놓은 모습이다.
p2의 날짜범위는 2000년 이후부터 최대치까지로 잡혀 굉장히 넓게 잡혀있다. 만약 저 파티션을 2~3개로 나누고 싶을때 재구성을 하게되는데 해당 물리적인 데이터의 위치를 모두 옮겨야 하기 때문에 레코드가 많으면 많을수록 오래걸린다. 그리고 그것을 이동하는 동안 쓰기작업이 일어나면 정합성이 깨질 수 있어 최소한의 읽기 잠금이 필요하다.
위에 예시와 같이 모든 날짜의 범위가 파티션이 되어있는데, 이런 경우에는 파티션 추가가 불가하다. 포함되어있지 않은 범위가 있다면 파티션 추가가 가능하다.

  • 사용처
    시간 개념 단위로 분석 or 삭제
    범위 기반으로 균등한 파티션

  • 파티션 재구성
    파티션의 레코드가 많을 수록 오래 걸린다.
    최소 읽기 잠금은 필요하다.

  • 파티션 추가 및 삭제
    가장 마지막 파티션만 추가할 수 있다.
    삭제는 매우 빠르다.

List Partition


레인지 파티션과 비슷한데 차이점은 이 데이터들은 범위성 데이터가 아니라 연속적이지 않고 정렬 할 수 없다는 것이다.
특이점으로는 NULL도 하나의 카테고리고 봐서 NULL 값도 기준으로 잡을 수 있다.

  • 레인지 파티션과 대부분 흡사
    키 값 하나하나를 리스트로 나열해야 한다.
    MAXVALUE를 사용할 수 없다.

  • 사용처
    파티션 키 값이 카테고리처럼 고정적 키 값이 연속되지 않고 정렬 순서와 관계 없음

Hash Partition

파티션을 하고싶은데 어떠한 기준으로 파티션할지 기준을 못찾을 때 사용한다.

파티션의 이름이 없고 user_id를 기준으로 4개의 파티션으로 나누라 되어있다.
애초에 해시 파티션을 사용하는 이유가 특정 컬럼의 값에 따라 사용빈도가 영향을 받지 않기 때문에 이름을 부여할 수는 있지만 부여할 필요가 없기 때문에 부여하지 않은 것이다.
MOD 연산을 통해 파티션이 나누어진거라 항상 표현식의 결과가 정수로 나와야하고 특정 컬럼을 삭제, 분할, 병합할 수 없다.

  • 사용처
    특정 컬럼의 값에 사용 빈도가 영향을 받지 않음
    모든 데이터들이 비슷한 사용 빈도 가짐

  • 파티션의 삭제, 분할, 병합
    파티션 갯수만 변경 가능 (전체 재분배)

Key Partition


괄호안에 들어갈 컬럼들의 값을 MD5 해싱 알고리즘으로 한번 정수형으로 바꾼 뒤에 MOD로 4연산을 하게 된다.

  • 해시 파티션과 대부분 흡사
    주어진 컬럼들 MD5 해싱
    정수가 아닌 대부분 데이터 타입 사용 가능

출처 : https://www.youtube.com/watch?v=VAhZa30j8hA&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=26&t=37s

0개의 댓글