샤딩(Sharding)
한번에 관리하기 힘든 거대 데이터를 정해진 규칙에 따라 나눠서 분산 저장하는 데이터 처리 기법
수평적 파티셔닝의 일종으로 파티셔닝한 테이블들을 각기 다른 DB에 저장하는 것이 샤딩
샤딩에 의해 나누어진 저장 공간이 샤드
샤드 클러스터, 애플리케이션과 샤드 클러스터 간의 인터페이스를 제공하는 몽고스, 샤딩 관련 설정과 샤드 클러스터의 메타 데이터를 저장하는 설정 서버(Config server)로 구성된다
장점
데이터 처리 속도 향상
I/O를 처리하는 DB가 1개에서 여러개로 증가 -> 병렬 처리
한 DB에서 처리하는 데이터의 양이 줄었기 때문에 속도 향상
확장성
Scale-Out이 쉽다
고가용성
DB 장애가 샤드 단위로 일어나기 때문에 다른 샤드들은 당장의 장애로부터 안전하다
단점
복잡도 상승
프로그래밍 복잡도, 운영 복잡도가 증가한다
예를 들어 여러 샤드에 걸친 데이터를 조인하는 것이 매우 어려워진다
샤딩 기준을 잘 잡아야 한다
데이터가 한쪽 샤딩에만 몰릴 경우 무의미해진다
샤딩 종류
샤드를 나누는 기준을 어떻게 정하는지에 따른 종류
레인지 샤딩
데이터의 PK의 범위에 따라 분류하는 방식
샤드 1에는 PK 0 ~ 20
샤드 2에는 PK 21 ~ 30
샤드 3에는 PK 31 ~ 46
이런 방식으로 샤드를 나누는 방식
범위는 균일할 필요는 없다
증설에 큰 비용이 들지 않는 것이 장점
하지만 특정 샤드에 트래픽이나 데이터 량이 몰릴 여지가 있다
부하가 몰리는 샤드는 분산시키고 부하가 적은 샤드는 통합시키는 작업을 통해 최적화해야 한다
-> 레인지의 범위를 어떻게 설정하는지가 중요
모듈러 샤딩
데이터의 PK를 특정한 연산을 하는 모듈러로 한번 정제 후에 분류하는 방식
Input을 3로 나눈 나머지를 output하는 모듈러를 사용하면
샤드 1에는 PK 0, 3, 6, 9
샤드 2에는 PK 1, 4, 7, 10
샤드 3에는 PK 2, 5, 8, 11
이런 방식으로 샤드를 나누는 방식
레인지 샤딩에 비해 데이터가 균일하게 분산된다
-> 샤딩의 장점을 잘 살릴 수 있다
증설 등의 이유로 모듈러를 바꾸는 경우 데이터들을 재정렬해야한다
-> 데이터가 어느 정도 예상되는 곳에 사용하기 좋다
-> 증설 등이 너무 자주 일어나면 비용이 높아진다
디렉토리 샤딩
별도의 조회 테이블을 사용해서 분류하는 방식
데이터를 테이블에 배치할 때만 계산하면 되기 때문에 좀 무겁지만 효율적인 알고리즘을 사용할 수 있다
샤드를 확장하는 것도 유연한 편이다
데이터 I/O 이전에 테이블 조회를 무조건해야하므로 오버헤드가 발생한다
'기본' 카테고리의 다른 글
A* 알고리즘 (1) | 2024.03.27 |
---|---|
N+1 문제 (0) | 2024.02.29 |
[JavaScript] var, let, const (0) | 2024.02.27 |
객체지향 프로그래밍 (0) | 2024.02.23 |
트랜잭션 격리 수준 (0) | 2024.02.21 |