Sharding
- 데이터를 여러 머신에 분산하는 방법
- 대규모 데이터 세트와 높은 처리량 작업의 배포를 지원
- 단일 지점 서버의 용량 한계의 문제점을 극복하기 위한 방법
- 쿼리 속도가 높으면 서버의 CPU 용량 고갈 문제
- 시스템의 RAM보다 작업 세트 크기가 크면 디스크 드라이브의 I/O 용량에 부담
- 단일 지점에 수직 확장을 하는 것이 아닌, 수평적 확장을 통해서 로드를 분산하고 서버를 추가하는 작업
- 각 머신이 전체 워크로드의 일부를 분산 처리하면서, 단일 고속 대용량 서버보다 더 나은 효율성을 제공하는 방법
- 컬렉션 수준에서 데이터를 샤딩하여 클러스터의 샤드 전체에 컬렉션 데이터를 분산
Shard Key
- 샤드 키를 사용해서 샤드 전반에서 컬렉션 문서를 분산
- 샤드 키는 문서의 필드 하나 또는 여러 필드로 구성
- 샤드 키 선택
- Cardiniality
- 밸런서가 생성할 수 있는 최대 청크 수를 결정
- 카디널리티가 높은 샤드 키를 선택해서 클러스터의 수평 규모 조정
- 데이터 모델에서 카디널리티가 낮은 키에 샤딩이 필요한 경우 샤드 키의 인덱싱된 필드 조합을 사용하여 카디널리티를 높이는 것이 중요
- Frequency
- 지정된 샤드 키 값이 데이터에서 발생하는 빈도
- 특정 샤드에 몰리는 경우 병목 현상이 발생
- 특정 샤드에 골고루 데이터가 발생하는 것이 중요
- 단조롭게 변경되는 샤드 키 (증가 OR 감소)
- 해시 샤딩을 적용해서 균일한 데이터 분배를 보장하도록 변경