샤딩 소개
- 데이터를 여러 시스템에 분산시키는 방법. 파티셔닝이라는 용어로도 불린다.
- 몽고DB는 샤딩을 통한 수평 확장을 지원한다.
- 샤딩의 목적은 여러 개의 샤드 클러스터가 하나의 장비처럼 보이게 하는 것이다. 이러한 세부 사항을 애플리케이션으로부터 숨기기 위해 샤드 앞단에 있는 mongos라는 라우팅 프로세스를 실행한다.
- mongos에는 어떤 샤드가 어떤 데이터를 포함하는지 알려주는 ‘컨텐츠 목차’가 있다.
복제와 샤딩의 차이
- 복제
- 여러 서버에 데이터 복사본을 생성하므로 모든 서버는 다른 서버의 미러 이미지다.
- 고가용성을 위한 기술
- 샤드
- 각각 서버는 다른 데이터 서브셋을 가지고 있다.
- 분산처리를 위한 기술
샤드 클러스터

- shard
- 각 샤드는 샤딩된 데이터의 하위 집합을 포함한다.
- 각 샤드를 복제 셋으로 배포할 수 있다.
- mongos
- 쿼리 라우터 역할
- 클라이언트 애플리케이션과 샤드 클러스터 간의 인터페이스를 제공한다.
- MongoDB 4.4부터 mongos는 대기 시간(laytency)을 최소화하기 위한 hedged read(?)를 지원한다.
- config servers
- 클러스터에 대한 메타데이터 및 구성 설정을 저장
- 운영 배포에서 config server 복제 셋은 3개 이상의 멤버로 구성해야 하며, 각 config server는 지리적으로 분산된 별도 물리적 장비에 있어야 한다.
몽고DB는 컬렉션 수준에서 데이터를 샤딩하여, 컬렉션 데이터를 클러스터의 샤드 전체에 분산시킨다.
샤드 키
- 몽고 DB는 샤드 키를 사용해 샤드 간 컬렉션의 도큐먼트를 배포한다.
- 컬렉션을 샤딩할 때 샤드 키를 선택한다. 샤드 키는 몽고 DB가 데이터를 분할하는데 사용하는 필드다.
- 샤드 키는 단일 인덱스 필드이거나 복합 인덱스로 커버되는 여러 필드다.