1. 개요

샤딩이란?

관계형 데이터베이스에서 대량 데이터 분산처리를 위한 스키마 복제 후 샤딩 키 기준으로 데이터를 수평적으로 분할하는 기법이다.


2. Sharding

Horizontal Partitioning과 동일하다.  스키마가 같은 데이터를 두 개 이상의 테이블에 나누어 저장한다. 예를 들어 0~10000번의 사용자 정보를 하나의 샤드, 10001~20000번의 사용자를 또 하나의 샤드에 저장한다. 로드 분산, 데이터의 균등 저장 등을 고려하여 Shard Key를 선정한다.

  • DB 확장성의 scale-out : 동일장비를 수평적으로 확장, 클러스터 구조 확장
  • write가 빈번한 경우 별도의 데이터베이스 자체를 분할 사용한다.
  • 응용 레벨에서 수현 : 샤드 구조에 대해 알 필요가 없고 구조 변경에 따른 수정도 필요 없다.

3. Vertical Sharding

  • 테이블별로 분할
  • 형태에 따른 분류 : 사용자 ID별, 텍스트, 사운드, 비디오 등 데이터 별로 분류
  • 샤딩 구현이 쉽지만 데이터가 늘어나면 추가 샤딩이 필요함

4. Range based Sharding

  • 특정 기능(테이블) 별로 분할
  • 데이터 분할 방법이 예측할 수 있는 것이어야 함
  • 예를 들어 사용자 ID별로 Range Partitioning을 했을 때 초기 샤드는 데이터량은 많지만 처리량이 적고, 최근에 추가된 샤드는 데이터량은 적지만 처리량이 많음.

5. Key (Hash) based Sharding

  • 엔티티를 Hash 함수에 넣어 나오는 output을 기준으로 분할
  • 특정 영역으로 데이터 값이 몰린 경우 성능 저하
  • Hash 결과가 균등하게 분포되도록 Hash 함수 선정 필요