안녕하세요, 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 및 테이블 구조에 맞게 적절한 파티셔닝&샤딩을 적용하면 좋을 것 같습니다.
끝.
'그럴듯한 정보' 카테고리의 다른 글
[투자] ETF 투자하는법, 미국 ETF 추천 (0) | 2024.03.17 |
---|---|
[IT 기술] 데이터베이스 트랜잭션(Transaction)이란? (0) | 2024.03.16 |
[IT 기술] 데이터베이스 - DDL, DML, DCL이란? (0) | 2024.03.08 |
[IT 기술] GraphQL 의 개념 및 특징 장단점 (0) | 2024.03.04 |
일본여행 간사이 공항에서 난바역 가는법 총정리 (0) | 2024.02.27 |