[DB] Database Partitioning - DB 파티셔닝 개념

728x90
반응형
SMALL

DB Partitioning

출처 : https://oracle-base.com/

서비스의 크기, DB에 저장하는 데이터의 규모가 대용량이 되면서, 기존에 사용하는 DB 시스템의 용량(Storage)의 한계와 성능(Performance)의 저하가 발생했다.

 

즉, VLDB(Very Large DBMS)와 같이 하나의 DBMS에 너무 큰 Table이 들어가면 용량과 성능 측면에서 이슈가 발생했고, 이를 해결하기 위해 Table을 Partition이라는 작은 단위로 물리적 분할하여 관리하는 기법이 탄생했다.

 

논리적인 데이터 element들을 다수의 entity로 쪼개는 행위, 큰 Table이나 index를 관리하기 쉬운 단위로 분리하는 방법이다.

 

장점

성능 (Performance)

  • 특정 DML과 Query의 성능을 향상시킨다.
  • 대용량 Data Write 환경에서 효율적이다.
  • 데이터 전체 검색 시 필요한 부분만 탐색해 성능이 증가한다. 즉, Full Scan에서 Data Access 범위를 줄여 성능 향상을 가져온다.
  • 필요한 데이터만 빠르게 조회할 수 있기 때문에 Query 자체가 가볍다.
  • 많은 Insert가 있는 OLTP 시스템에서 Insert 작업을 작은 단위인 partition들로 분산시켜 경합을 줄인다.
    • OLTP : Online Transaction Processing 온라인 트랜잭션 처리를 말하며, 네트워크 상의 온라인 사용자들의 데이터베이스에 대한 일괄 트랜잭션 처리를 의미
    • OLAP : Online Analytical Processing 데이터베이스 자체적으로 운용되는 시스템이라기보다는 데이터 웨어하우스 등의 시스템과 연관되어 데이터를 분석하고 의미 있는 정보로 치환하거나 분석하는 방법

 

가용성 (Availability)

  • 물리적인 partitioning으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
  • 각 분할 영역(partition 별로)을 독립적으로 백업하고 복구할 수 있다.
  • table의 partition 단위로 Disk I/O를 분산하여 경합을 줄이기 때문에 Update 성능을 향상시킨다.

 

관리용이성 (Manageability)

  • 큰 table들을 제거하여 관리를 쉽게 해준다.

 

단점

table 간 JOIN에 대한 비용이 증가한다.

 

table과 index를 별도로 partitioning 할 수 없고 table과 index를 같이 partitioning 해야 한다.

 

 

Partitioning 종류

수평(horiziontal) 파티셔닝

 

  • 샤딩과 동일한 개념
  • 스키마(schema)를 복제한 후 샤드 키를 기준으로 데이터를 나누는 것, 즉 스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것
  • 퍼포먼스, 가용성을 위해 KEY 기반으로 여러 곳에 분산 저장한다.
  • 일반적으로 분산 저장 기술에서 파티셔닝은 수평 분할을 의미한다.

 

Sharding

같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법, 수평 파티셔닝과 동일한 개념이다.

수평 분할 파티셔닝은 스키마가 같은 두 개 이상의 테이블에 나누어 저장하는 방법, 즉 하나의 데이터베이스 안에서 이루어진다.

이와 다르게, 샤딩은 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법이다.

그렇기에 두 개 이상의 샤드에 대한 JOIN이 불가능하다.

 

 

장점

  • 데이터 개수가 작아지고 따라서 index의 개수도 작아져 성능 향상

 

단점

  • 서버 간 연결과정이 많아진다.
  • 데이터를 찾는 과정이 기존보다 복잡하기에 지연시간(latency)이 증가한다.
  • 하나의 서버가 고장 나게 되면 데이터의 무결성이 깨질 수 있다.

 

수직(Vertical) 파티셔닝

 

 

  • 모든 컬럼들 중 특정 컬럼들을 쪼개서 따로 저장하는 형태를 의미한다.
  • 스키마를 나누고 데이터가 따라 옮겨가는 것을 의미한다.
  • 정규화하는 과정과 비슷하지만 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 과정이다.

 

장점

  • 자주 사용하는 컬럼등을 분리시켜 성능을 향상시킬 수 있다.
  • 필요한 컬럼만 메모리에 올려서 Select 하기에 성능상 이점이 있다.
  • 같은 타입의 데이터가 저장되기 때문에 저장 시 데이터 압축률을 높일 수 있다.

 

Partitioning 분할 기준

범위 분할 (range partitioning)

  • 분할 키 값이 범위 내에 있는지 여부로 구분한다.
  • ex) 우편번호, 일별, 월별, 분기별 데이터

 

목록 분할 (list partitioning)

  • 목록에 파티션을 할당하고 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
  • ex) 한국, 일본, 중국 → 아시아 / 노르웨이, 스웨덴, 핀란드 → 북유럽

 

해시 분할 (hash partitioning)

  • 해시 함수의 값에 따라 파티션에 포함할지 여부 결정한다.
  • ex) 4개의 파티션으로 분할하는 경우 해시 함수는 0,1,2,3의 정수를 돌려준다.

 

합성 분할 (composite partitioning)

  • 큰 파티션에 대한 I/O를 여러 partition으로 분산할 수 있다.
  • 서브 파티셔닝을 의미한다. 예를 들어 먼저 범위 분할을 하고, 이후 해시 분할 같은 것을 생각할 수 있다.

 

Reference

 

 

 

 

 

728x90
반응형
LIST