[데이터베이스] Partitioning(Sharding), Replication

Updated: Categories:

데이터베이스 분리 전략에 대해 알아보자

Partitioning

  • DB 규모가 커지면 용량의 한계와 성능 저하가 일어나게 되므로, 테이블 규모를 작은 단위로 나누는 기법
  • 큰 테이블이나 인덱스를 파티션이라는 단위로 물리적 분할함
  • 장점
    • 파티션 단위로 백업/복구 가능
    • 파티션별로 조회가능, 조회 쿼리가 가벼워짐
  • 단점
    • 운영 복잡도 증가
    • 테이블간 join 비용 증가
    • 테이블과 인덱스를 별도로 파티셔닝 불가

수직(vertical) 파티셔닝

image

  • 3정규화와 비슷하지만, 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 것
  • 한 테이블의 특정 컬럼을 쪼개는 방식
    • 자주 사용되는 컬럼을 분리시켜 성능 향상 가능

수평(horizontal) 파티셔닝

image

  • 스키마가 동일한 테이블을 여러개로 분리하는 방식
    • 인덱스 크기를 줄인다 -> 조회 성능 향상
    • 작업 동시성 성능 향상


Clustering

image

  • 하나의 DB를 여러개의 서버가 나눠 처리하도록 함
    • 실제 저장되는 스토리지는 하나임
  • 하나의 서버가 죽어도 대비가 가능함.
  • 병렬처리 및 성능향상


Replication

image

  • 여러개의 DB를 권한에 따라 수직적 구조로 구축하는 방식
  • Master / Slave 패턴으로 불린다
    • Master : 쓰기 작업만 처리
    • Slave : 읽기 작업만 처리
  • 무결성 검사 없이 비동기 방식으로 데이터를 동기화함

동작원리

image

  1. Master 노드에 쓰기 트랜잭션이 수행된다.
  2. Master 노드는 데이터를 저장하고 트랜잭션에 대한 로그를 파일에 기록한다.(BIN LOG)
  3. Slave 노드의 IO Thread는 Master 노드의 로그 파일(BIN LOG)를 파일(Replay Log)에 복사한다.
  4. Slave 노드의 SQL Thread는 파일(Replay Log)를 한 줄씩 읽으며 데이터를 저장한다.

장단점

  • 장점
    • Slave 노드는 쓰기 트랜잭션이 없으므로 조회 성능을 높일 수 있음
    • 비동기 방식이므로 지연시간이 거의 없음
  • 단점
    • Master 노드에 문제 발생시 복구 및 대처 어려움
    • 노드 간 데이터 동기화가 보장되지 않아 일관성있는 데이터 보장 X


Sharding

  • 분산된 테이블과 DB의 조회/저장 처리를 적절히 분산시키는게 중요
    • Hash Sharding :
    • Dynamic Sharding