close
[IT 기술] DB 데이터베이스 파티셔닝, 샤딩
본문 바로가기
그럴듯한 정보

[IT 기술] DB 데이터베이스 파티셔닝, 샤딩

by SweetFist 2024. 3. 16.
반응형

안녕하세요, SweetFist 입니다.

 

이번 시간에는 데이터베이스의 주요 용어 중 파티셔닝(Partitioning), 샤딩(Sharding)에 대해 알아보려고 합니다.

 

파티셔닝(Partitioning)

 

1. 파티셔닝의 정의

 

- SQL문이나 어플리케이션의 수정없이, 거대한 테이블이나 인덱스를 관리하기 쉬운 작은 단위로 분할하여 관리하기 위한

물리적인 분할 관리 기법입니다.

 

2. 파티셔닝의 목적

 

1) 가용성(Availability) - 특정 파티션에 문제가 발생하여 사용 불가 상태가 되어도 다른 파티션들은 사용에 영향을 미치지 않음으로 가용성 증대

2) 관리용이성 - 파티션 별 데이터 로드, 백업 및 복구 작업 수행 가능, 파티션 레벨에서 DML 작업 수행 가능

3) 성능 - 데이터에 엑세스시 엑세스하는 범위를 줄여 성능이 향상, 파티션별 병렬 처리를 통한 성능 향상

 

3. 파티셔닝 기법의 종류

 

1) 레인지 파티셔닝

- 파티션 키 값의 범위로 분할

- 가장 일반적인 형태의 파티셔닝이며 날짜 범위를 기준으로 분할

 

2) 해쉬 파티셔닝

- 파티션 키 값에 해시 함수 적용, 해쉬 테이블로 파티션 매핑

- 데이터가 모든 파티션에 고르게 분산

- 병렬 처리시 성능 향상 기대

 

3) 리스트 파티셔닝

- 불연속적인 값의 목록을 각 파티션에 지정

- 순서와 연관성이 없는 데이터의 그룹핑

 

4) 컴포지트 파티셔닝

- 레인지 파티셔닝 후 각 파티션내에서 해쉬, 혹은 리스트 기법으로 서브 파티션 구성

- 각 기법의 장점을 결합할 수 있음(레인지 + 해시/레인지 + 리스트)

 

4. 효과적인 DB 테이블 파티션 수행을 위한 절차

 

1) 파티션 대상 선정

- 대량의 건수 및 크기를 보유한 테이블

- 주기적인 데이터 정리 또는 새로운 주기 별 데이터 추가가 필요한 테이블

- 대량 데이터 정렬 및 조인이 자주 발생하는 테이블

 

2) 파티션 방식 선정

- 테이블의 성격 조사가 필요

- Transaction 성격 -> 레인지 파티셔닝 -> 서브 파티셔닝 여부 확인

- Master 성격 -> 해시/리스트 파티셔닝

 

3) 파티션 키 설정

가. 성능향상 관점에서의 키 선정 

    - 데이터 접근 방법에 대한 고려 필요(인덱스 스캔, full 스캔)

    - 데이터 분포도에 따른 스캔방법에 대해 고려 필요(균등 혹은 쏠림)

 

나. 관리 용이성 관점에서의 키 선정

    - 데이터의 성격에 따라 파티셔닝이 되도록 키 설정

    - 이력 데이터의 경우 생성주기 또는 소멸 주기가 파티션과 일치하도록 키 선정

 

샤딩(Sharding)

 

1. 샤딩(Sharding)의 정의

 

- 관계형 데이터베이스에서 대량의 데이터를 처리하기 위해 데이터를 파티셔닝 하는 기법(어플리에키션 레벨에서 발생)입니다.

- 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법입니다.

- 데이터 보존방식을 통하여 여러 대 서버가 갖고 있는 데이터의 일부분, 샤드라고 부르는 각각의 개별 파티션이 있는 하나의 데이터베이스의 수평적인 파티셔닝입니다.

 

2. 샤딩의 특징

 

1)성능 개선

- 큰 데이터를 압축, 개별 테이블은 갹 샤드에서 더 빠른 작업 지원

 

2) 신뢰성 개선

- 한 샤드가 실패하더라고 다른 샤드는 데이터 서비스를 제공

 

3) 위치추상화

- 어플리케이션 서버에서 어떤 데이터가 어떤 데이터베이스에 위치해 있는지 알 필요가 없다.

 

<샤딩의 개념도>

 

3. 샤딩 적용 시 고려사항

 

가. 데이터 재분배 - 서비스 정 정지 없이 scale-up 할 수 있어야 한다

나. 조인 - Sharding-DB 간에 조인이 불가능하기에 처음부터 역정규화도 고려해야 한다

다. 파티션 -  Shard 해쉬 함수 설계가 중요하다

라. 트랜잭션 - Global Transaction 을 사용하면 Shard DB 간의 트랜잭션도 가능하다

마. Global Unique key - DBMS에서 제공하는 Auto-Increment 를 사용하면 key가 중복 될 수 있기 때문에, Application 레벨에서 Guide를 생성해야 한다

 


 

데이터베이스의 파티셔닝 및 샤딩에 대해 알아보았는데요

 

사용하는 DB 및 테이블 구조에 맞게 적절한 파티셔닝&샤딩을 적용하면 좋을 것 같습니다.


 

끝.