파티셔닝 (Partitioning)

  • 단일 데이터베이스 내에서 데이터를 테이블로 분할하는 행위 혹은 방법.
  • 같은 데이터베이스 내에서 데이터가 관리된다.
  • 분할된 데이터는 하나의 서버에 저장된다.

수평 파티셔닝

  • 테이블의 행(row)을 기준으로 데이터를 나누어, 여러 테이블로 분산한다.
  • 주로 데이터베이스의 용량이 커지면서 성능 저하가 예상될때, 이를 막기 위해 사용됩니다.

수직 파티셔닝

  • 테이블의 열을 기준으로 데이터를 나누어, 여러 테이블로 분산한다.
  • 자주 사용하는 열과 그렇지 않은 열을 나누어 저장할수 있기에, 쿼리 성능을 향상시킬 수 있다.
  • 민감한 정보에 제한을 걸어서 접근을 방지할 수 있다.

샤딩 (Sharding)

  • 동일한 스키마를 가지고 있는 데이터를 여러 데이터베이스(및 서버) 에 분산한다.
  • 데이터와 트래픽이 많이 쌓이고 몰리는, 규모가 큰 애플리케이션에서 사용.

수평 파티셔닝과 샤딩

  • 데이터를 행으로 나눈다는 점에서 수평 파티셔닝의 일종으로 볼 수 있다.
  • 수평 파티셔닝과 샤딩은 모두 단순히 행을 기준으로 나누는 것 뿐아니라, 다양한 기준으로 데이터를 나눌 수 있다.
    • 특정 키를 해싱한 결과에 따라
    • 범위에 따라 (e.g. 사용자 ID 1 ~ 999 까지)
    • 데이터 값이 특정 목록에 포함된 유무에 따라 (e.g. 한국1, 한국2, 미국 1, 미국2)
  • 하나의 서버에서 관리하는 수평 파티셔닝과 달리, 여러 서버로 분산된 환경에서 관리하는 점에서 주요한 차이점을 가진다.

비교

특징 파티셔닝(Partitioning) 샤딩(Sharding)
데이터 저장 위치 단일 서버 내에서 논리적으로 분리된 파티션 여러 서버에 물리적으로 분산된 샤드
확장성 주로 단일 서버 내 성능 최적화 물리적 확장을 통해 시스템 부하 분산
관리 복잡도 비교적 간단 높은 관리 및 라우팅 복잡도
사용 목적 데이터 접근성과 성능 최적화 대규모 트래픽 처리와 확장성 개선

출처

  • http://theeye.pe.kr/archives/1917
  • https://aiday.tistory.com/123
  • https://www.digitalocean.com/community/tutorials/understanding-database-sharding
  • https://data-mozart.com/partitioning-why-you-need-to-consider-it/