[데이터베이스 목차]
샤딩(Sharding)
I. DB Scale out을 통한 성능 개선, 가용성 향상 샤딩의 개요
-. 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하고 조회하는 방법
-. 샤드라고 부르는 각각의 파티션이 있는 하나의 데이터베이스의 수평적인 파티셔닝
-. 과거의 샤딩은 어플리케이션 레벨에서 구현하는 경우가 많았는데 최근에는 샤딩 플랫폼에서도 처리 가능
-. 성능향상을 위해 샤딩, 파티셔닝 기법이 사용되고, 가용성을 위해 리플리케이션, 쿼리 오프로딩 기법을 사용
-특징: 데이터분할, 성능개선, 높은 신뢰성, 위치 추상화
-샤딩의 장점:
1) 성능개선: 큰 데이터를 압축, 개별 테이블은 각 샤드에서 더 빠른 작업을 지원
2) 신뢰성 개선: 한 샤드가 실패하더라도 다른 샤드는 데이터서비스를 제공
3) 위치 추상화: 어플리케이션 서버에서 어떤 데이터가 어떤 데이터베이스에 위치해 있는지 알 필요가 없음
II. 샤딩의 개념도 및 구성요소
가. 샤딩의 개념도
나. 샤딩의 구성요소
구분 |
요소 |
설명 |
시스템 구성요소 |
Shard DB |
분할 데이터 저장, 사용자 요청 처리 물리 DB |
Proxy |
Shard metadata 활용 실제 질의 처리를 Shard DB로 전달하는 역할을 하는 미들웨어 프로세스 |
데이터 구성요소 |
Shard metadata |
Shard 동작을 위한 설정정보, 요청된 질의 기반, Shard 선택을 위한 정보 및 세션 생성 정보 포함 |
Shard Key |
Sharding 된 테이블에서 Shard를 선택하기 위한 식별자로 사용되는 칼럼 |
Shard ID |
Shard Database 식별자 |
III. 샤딩 방법
방법 |
설명 |
특징 |
Vertical Partitioning |
- 테이블별로 서버를 분할하는 방식
- 각 서버 데이터 거대화시 추가 샤딩 필요
|
구현 간단, 시스템 구조 변경 최소화 |
Range Based Partitioning |
- 하나의 Feature 나 Table 거대화 시 샤딩
|
데이터 분할방법 예측 가능시 구현 가능 |
Key or Hash Based Partitioning |
- 엔티티를 해쉬함수에 넣어 나오는 값 이용 서버를 결정하는 방식
|
결과값이 균등분포 되게 해쉬 함수 설계 필요 |
Directory Based Partitioning |
|
샤드 키 Look-up 기능 구현 |
데이터의 성격과 특징에 따라 Table 단위를 작게 유지할 수 있는 Shard 분할 방법을 결정해야 하며 적용시 정지없이 데이터 재분배 수행 필요
IV. 쿼리 오프로딩 vs. 샤딩
구분 |
쿼리 오프로딩 |
샤딩 |
개념 |
업데이트 트랜잭션, 트랜잭션 분리 |
분리된 DB 인스턴스에 데이터 분할 |
목적 |
DB 성능 향상 |
용량 한계 극복 |
구성요소 |
Master, Salve, Staging DB |
샤드(Shard) |
분할기준 |
트랜잭션 종류 및 역할 |
샤드 키 |
도메인 |
도메인 동일 혹은 상이 |
도메인 동일 |
복제 솔루션 |
오라클 골든 게이트, 쉐어 플렉스 |
자체 샤드 오픈 솔루션 이용 |
구현방법 |
어플리케이션 활용 구현 |
DBMS 자체, 어플리케이션 |
분할원리 |
트랜잭션의 분할 |
DB의 분할 |
V. 샤딩 파티셔닝 비교
구분 |
샤딩 |
파티셔닝 |
개념 |
여러 인스턴스에 여러 서브셋을 저장하는 기법 물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하는 방법 |
하나의 인스턴스내에서 여러 테이블로 나누어 저장하는 기법 큰 테이블이나 인덱스를 관리하기 쉬운 크기로 분리하는 방법 |
장점 |
쿼리(read, write)를 여러 인스턴스로 분산하여 처리 -> 성능, 확장성 향상 |
데이터를 여러 테이블에 나누어 저장 -> 인덱스의 크기가 작아짐 -> 인덱스를 통한 조회 시간이 줄어들어 성능 향상 이력 데이터의 효울적인 관리 (불필요한 데이터 삭제 작업을 파티션을 추가하거나 삭제하는 방식으로 간단하고 빠르게 해결 가능) |
단점 |
다른 샤드끼리 join 할 수 없다 auto increment가 샤드 별로 달라질 수 있다 하나의 트랜잭션에서 두개 이상의 샤드에 접근할 수 없다 |
테이블 간 join 비용 증가 |
물리망 |
다수의 분산 DB 서버 |
하나의 DB 서버 |
제어 |
마스터(Proxy) |
Master 없음 |
키 |
Shared Key 저장 |
별도 키 없음 |