Partitioning, Sharding, Replication은 모두 데이터베이스 규모와 부하를 다루는 기술이지만 데이터를 나누거나 복제하는 범위와 목적이 다릅니다.

Partitioning은 하나의 논리적 테이블을 같은 데이터베이스 서버 안에서 여러 파티션으로 나누는 방식입니다. 날짜나 키 범위를 기준으로 행을 분리하면 조건과 파티션 키가 맞을 때 불필요한 파티션을 제외하는 Partition Pruning을 사용할 수 있고, 오래된 데이터 파티션을 교체하거나 제거하기도 편합니다. 하지만 하나의 서버 자원 한계를 근본적으로 넘거나 고가용성을 제공하는 기술은 아닙니다.

데이터베이스 테이블을 더 작은 테이블들로 나누는 것을 말한다.

  • vertical partitiong: column을 기준으로 table를 나누는 방식
  • horizontal pratitioning: row를 기준으로 table를 나누는 방식

Sharding은 데이터를 Shard Key에 따라 여러 독립적인 데이터베이스 서버에 수평 분산하는 방식입니다. 데이터 크기와 읽기·쓰기 부하를 여러 서버로 나눌 수 있어 단일 서버의 한계를 넘는 데 사용합니다. 대신 애플리케이션의 라우팅, 데이터 재분배, Cross-Shard Join과 트랜잭션, 전역 유일성 관리가 복잡해집니다.

horizontal pratitioning 처럼 동작하되 각 partition이 독립된 DB 서버에 저장

Replication은 동일한 데이터를 하나 이상의 복제 서버에 복사하는 방식입니다. 읽기 부하 분산, 장애 대응, 분석 및 백업 작업 분리에 활용할 수 있습니다. MySQL의 일반적인 Source-Replica 복제는 비동기 방식이므로 복제 지연으로 인해 Replica에서 오래된 데이터를 읽을 수 있으며, 기본 구조에서는 쓰기 부하가 Source에 남습니다.

DB를 복제해서 여러 대의 DB 서버에 저장하는 방식을 말한다.
특정 DB가 죽는 상황에서도 고가용성 보장, 서버 부하(read)를 낮춘다.

정리하면 큰 테이블의 관리와 일부 쿼리 범위 축소에는 Partitioning, 한 서버가 감당하기 어려운 데이터와 쓰기 부하 분산에는 Sharding, 읽기 확장과 고가용성에는 Replication을 주로 사용합니다. 세 기술은 목적에 따라 함께 사용할 수도 있습니다.

출처 및 참고자료