[TIL] DB 파티셔닝(Partitioning, 분할)

yurinnn·2024년 2월 28일
0

Today I Learn

목록 보기
9/11

대규모 데이터로 인한 용량(storage)의 한계와 성능(performance)의 저하를 해결하기 위해 table을 ‘파티션(partition)’이라는 작은 단위로 나누어 관리하는 것

장점

관리적 측면 : partition 단위 백업, 추가, 삭제, 변경

  • 전체 데이터를 손실할 가능성이 줄어들어 데이터 가용성이 향상된다.
  • partition 별로 백업 및 복구가 가능하다.
  • partition 단위로 I/O 분산이 가능하여 UPDATE 성능을 향상시킨다.

성능적 측면 : partition 단위 조회 및 DML수행

  • 데이터 전체 검색 시 필요한 부분만 탐색해 성능이 증가한다. 즉, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다. 필요한 데이터만 빠르게 조회할 수 있기 때문에 쿼리 자체가 가볍다.

단점

  • table간 JOIN에 대한 비용이 증가한다.
  • table과 index를 별도로 파티셔닝할 수 없다. table과 index를 같이 파티셔닝해야 한다.

수평(horizontal) 분할

  • 샤딩(Sharding)과 동일한 개념
  • 스키마(schema)가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다.
  • 인덱스의 크기를 줄이고, 작업 동시성을 늘리기 위한 것이다.

범위(Range), 목록(List), 해시(Hash), 합성(Composite), 라운드 로빈 (Round Robin)

예시) 0 ~ 10000 번 고객의 정보는 하나의 샤드에 저장하고 10001 ~ 20000 번 고객의 정보는 다른 샤드에 저장한다.

수직(vertical) 분할

  • 관계형 DB에서 3정규화와 같은 개념으로 접근하면 이해하기 쉽다.
  • 하지만 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 과정이다.

로우 체이닝(Row Chaining)
길이가 너무 커서 하나의 블록에 저장되지 못하고 다수의 블록에 나누어져 저장

로우 마이그레이션(Row Migration)
수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간에 저장

profile
슬기로운 개발 생활

0개의 댓글

관련 채용 정보