[데이터베이스] Partitioning(Sharding), Replication
Updated: Categories: CS데이터베이스 분리 전략에 대해 알아보자
Partitioning
- DB 규모가 커지면 용량의 한계와 성능 저하가 일어나게 되므로, 테이블 규모를 작은 단위로 나누는 기법
- 큰 테이블이나 인덱스를 파티션이라는 단위로 물리적 분할함
- 장점
- 파티션 단위로 백업/복구 가능
- 파티션별로 조회가능, 조회 쿼리가 가벼워짐
- 단점
- 운영 복잡도 증가
- 테이블간 join 비용 증가
- 테이블과 인덱스를 별도로 파티셔닝 불가
수직(vertical) 파티셔닝
- 3정규화와 비슷하지만, 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 것
- 한 테이블의 특정 컬럼을 쪼개는 방식
- 자주 사용되는 컬럼을 분리시켜 성능 향상 가능
수평(horizontal) 파티셔닝
- 스키마가 동일한 테이블을 여러개로 분리하는 방식
- 인덱스 크기를 줄인다 -> 조회 성능 향상
- 작업 동시성 성능 향상
Clustering
- 하나의 DB를 여러개의 서버가 나눠 처리하도록 함
- 실제 저장되는 스토리지는 하나임
- 하나의 서버가 죽어도 대비가 가능함.
- 병렬처리 및 성능향상
Replication
- 여러개의 DB를 권한에 따라 수직적 구조로 구축하는 방식
- Master / Slave 패턴으로 불린다
- Master : 쓰기 작업만 처리
- Slave : 읽기 작업만 처리
- 무결성 검사 없이 비동기 방식으로 데이터를 동기화함
동작원리
- Master 노드에 쓰기 트랜잭션이 수행된다.
- Master 노드는 데이터를 저장하고 트랜잭션에 대한 로그를 파일에 기록한다.(BIN LOG)
- Slave 노드의 IO Thread는 Master 노드의 로그 파일(BIN LOG)를 파일(Replay Log)에 복사한다.
- Slave 노드의 SQL Thread는 파일(Replay Log)를 한 줄씩 읽으며 데이터를 저장한다.
장단점
- 장점
- Slave 노드는 쓰기 트랜잭션이 없으므로 조회 성능을 높일 수 있음
- 비동기 방식이므로 지연시간이 거의 없음
- 단점
- Master 노드에 문제 발생시 복구 및 대처 어려움
- 노드 간 데이터 동기화가 보장되지 않아 일관성있는 데이터 보장 X
Sharding
- 분산된 테이블과 DB의 조회/저장 처리를 적절히 분산시키는게 중요
- Hash Sharding :
- Dynamic Sharding