CS/Database

[데이터베이스] 샤딩(Sharding)

테리는당근을좋아해 2020. 6. 24. 14:58

샤딩(Sharding)

- 수평 파티셔닝

- 데이터베이스 테이블에 저장된 레코드의 수가 늘어남에 따라 검색 성능이 떨어지거나 용량에 커짐

- 샤딩이란 테이블을 row 단위로 나눠서 저장해 DB 용량을 줄이고 검색을 성능을 올리는 기법

- 즉, 기존 테이블와 똑같은 스키마를 가지는 샤드라는 작은 단위로 나눠 저장하는 방식이다

 

- '샤드키'는 나눠진 샤드 중 어떤 샤드를 선택할 지 결정하는 키로, 샤드키 결정 방식에 따라 샤딩 방법이 나뉘게 된다.

 

1) 해시 샤딩(Hash Sharding)

- 해시 함수를 사용해 샤드 키를 나누는 방식

 

(+) 구현이 간단

(-) 샤드가 늘어나게 되면 해시 함수를 재설정해야하고, 해시 함수를 바꾸게 되면 기존에 저장된 샤드 키도 전부 바꿔야함

(-) 즉, 확장성이 좋지 않음

 

 

2) 다이나믹 샤딩(Dynamic Sharding)

- Locator Service를 통해 샤드키를 구성하는 방식

 

(+) 샤드가 더 추가 된다해도 Locator Service 내 샤드키만 추가해 확장 가능

(-) Locator Service에 종속적

 

 

3) Entity Group

- 관계가 되어있는 엔티티를 같은 샤드내에 구성하는 방식

 

(+) 단일 샤드 내 쿼리가 효율적

(+) 단일 샤드 내 강한 응집도

(-) 다른 shard의 Entity가 연관되어 있는 경우 비효율적