Skip to content

Latest commit

 

History

History
69 lines (35 loc) · 3.23 KB

shard.md

File metadata and controls

69 lines (35 loc) · 3.23 KB

MongoDB 샤딩

샤딩

샤딩은 데이터를 분산하여 저장하는 개념이다.

한 대의 서버에 모든 데이터를 저장하게 되면 I/O 작업은 한 대에 서버에서 모두 일어나게 된다. 그러나 여러 개의 서버를 두게 된다면 I/O가 여러 대에서 일어나기 때문에 효율이 좋아진다.

다음과 같은 목적을 가진다.

  • 데이터 분산: 데이터를 분산하여 순차적으로 저장한다면 한 대 이상의 트래픽을 감당히기 때문에 부하 분산의 효과가 있다.
  • 백업과 복구 전략: 미리 데이터를 부하 분선하여 저장하게 된다면 리스크로부터 보호받고 효과적인 시스템 운영이 가능하다.
  • 빠른 성능: 여러 대의 독립적인 프로세스가 병렬로 작업을 동시에 수행하기 때문에 이상적으로 빠른 처리 성능을 보장한다.

MongoDB 샤딩 구성요소

몽고디비에서는 샤딩 구성요소가 존재한다.

이로인해 다른 데이터베이스보다 샤딩의 효율이 좋다 (scale out에 용이)

Shard

분산된 데이터 저장 공간으로 실제 데이터가 저장되는 데이터베이스들의 영역이다.

Mongos

라우트 서버로 해야할 일을 샤드 서버한테 알맞게 분배해준다.

즉 각각의 요청된 일을 알맞는 샤드로 라우팅하는 기능을 하는 곳이다.

Config servers

샤드에 대한 메타 데이터(인덱싱)을 저장하고 관리한다.

샤드에 있는 데이터베이스의 인덱스라고 보면 된다.

빠른 데이터 처리

1~9를 저장하는 작업을 해야한다고 했을 때 빠르게 처리하고 싶다.

이럴때는 분산 저장을 사용한다.

분산 저장은 1~9까지 123, 456, 789로 나눠서 저장해 일을 나눠서 하는 것이다. 그렇기 때문에 빠르다.

123, 456, 789는 같은 데이터가 아니라 다른 데이터 가지고 있기 때문에 분산 저장이라고 한다. (복제가 아님)

Mongos(라우트 서버)는 어떻게 일을 분배해줄까?

클라이언트가 5번의 데이터가 어디 데이터베이스에 들어있는지 궁금해한다면 어떻게 라우트 서버가 관련 클라이언트를 5번데이터가 있는 곳으로 라우트해줄까?

정답은 Config server에 정보들을 저장(인덱싱) 해두기 때문이다.

라우터는 샤드에 어떤 것들이 저장되어 있는지 알아야한다. 그래서 라우터 서버는 Config server에다가 정보들을 인덱싱해둔다.

5는 456 데이터가 있는 B서버에 있기 때문에 B서버로 라우트한다.

만약 5번을 찾는 요청이 들어올 경우
Mongos(라우트 서버) -> Config Server (5번 위치 요청) -> Mongos(라우터 서버에게 5번은 B에 존재한다고 응답)

Mongos는 요청된 일을 분배하여 이동시키는 일을 하기 때문에 직접 데이터에 접근할 수 없다. 물론 직접 접근할 수 있다고해도 속도가 굉장히 느릴 것이다. 그렇기 때문에 Config server에 메타데이터(데이터 정보 인덱싱)를 저장하여 요청하는 것이다.