Clustering, Sharding, Replication
👉 Clustering이란? 사용이유는? (DB 서버가 죽는 것에 대한 고민)
목표 : 서버를 여러개 만들어 DB SERVER가 죽는 것을 방지하자
종류
- 하나의 큰 STORAGE 안에 2 ACTIVE SERVER => 처리 속도는 더 빠르지만 병목현상 있을 수 있음
- 하나의 큰 STORAGE 안에 ACTIVE-STANDBY => 하나는 대기 상태로 두어 병목현상 X
👉 Replication이란? 사용이유는? (DB 손실에 대한 고민)
목표 : 실제 데이터가 저장되는 저장소도 복제하여, 저장된 데이터 손실을 방지하자
종류 : MASTER-SLAVE 구조
특징
- MASTER-SLAVE 구조로 MASTER로 들어온 데이터를 SLAVE로 동기화하여 데이터를 백업
- MASTER는 수정, 삽입, 삭제 역할
- SLAVE는 조회용으로 사용
Sharding이란? 사용이유는? (DB 검색 효율에 대한 고민)
목표 : DB 테이블을 나누어 데이터가 너무 많아서 검색이 느린것을 해결해보자
종류 : hash sharding (id%db_num) / dynamic sharding / entity group
특징
- 나눠지는 DB 각각을 SHARD라고 하며, SHARD KEY에 따라 SHARD를 선택함
- SHARD KEY 결정 방식에 따라 SHARDING 방법이 나뉨
- 아래 종류 1과 종류 2는 nosql 저장방식에 더 어울리고, 종류 3은 rdb에 좀더 어울림
harding의 주요 고려사항은?
- 분산되는 DB DATA를 어떻게 잘 분산 저장할 것인가
- 분산되는 DB DATA를 어떻게 잘 읽을 것인가
harding의 주요 방법들 설명 (hash sharding / dynamic sharding)
1. hash sharding (id%4)
- 4는 shard 갯수 (저장소 갯수)
- 최초 구현이 간단 but. Shard 확장시 hashing 함수가 달라져 기존 저장된 데이터의 정합성이 깨짐
- 공간에 대한 효율을 고려 하지 않는다.
2. dynamic sharding
- locator service를 두어 id range에 따라서 sharding 하는 방식
- 확장에 유연하지만, locator service를 거쳐야 shard가 정해지므로 의존적임
3. entity group
- shard 각각 마다 관련된 rdb table row들을 모아두는 방식
- 단일 shard 내에선 쿼리가 효율적이지만, 데이터간 강한 응집도를 가짐
- 단점은 다른 shard의 entity와 연관이 되는 쿼리의 경우 비효율적임