정보정리

MongoDB A to Z - Sharding

서창호 2022. 2. 9. 17:32

MongoDB의 sharding에 대한 기본 개념을 정리한다.

자료는 아래 출처에서 참고하였다.

https://junghwanta.tistory.com/41

 

MongoDB Sharding(샤딩)

Sharding MongoDB의 샤딩(Sharding)을 알아보기 전에 먼저, 샤딩에 대한 개념을 알아보자. 샤딩은 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있는 기술을 말한다. 복제(Replication)와의 차이점이

junghwanta.tistory.com

Sharding

Sharding은 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있는 기술이다.

Replication과의 차이점으로는, Replication은 고가용성(안정성)을 위한 방법이며, Sharding은 분산 처리를 위한 방법이다.

MongoDB는 Sharding을 통해 Vertical Scaling을 지원한다.

Shard Cluster

Shard Cluster는 다음과 같은 구성요소로 이루어진다.

  • Shard: sharded data의 집합. Shard는 replica set이 될 수 있다.
  • Mongos: mongos는 query router와 같은 역할을 한다. 애플리케이션과 shard cluster 사이의 인터페이스를 제공한다.
  • Config servers: 설정 서버에서는 cluster의 metadata와 configuration들을 저장한다.

MongoDB는 collection의 data를 sharding해서 cluster shard에 collection data를 분배한다.

Shard Keys

기본적으로 Shard key는 Object_id(_id)가 되며, 해당 collection의 모든 document에 존재하는 field index는 shard key로 지정할 수 있다.

이 때, 이미 sharding 된 collection의 shard key는 변경할 수 없으며, shard key의 값은 변경할 수 없다. 

Chuncks

MongoDB는 Sharding된 data를 분할하여 각 shard server에 저장하는데, 이 data 조각을 chunck라고 한다.

이때, 각 shard server에 chunck가 균등하게 저장되어야 좋은 성능을 낼 수 있어, 균등하게 저장하기 위해 chuncks를 split하고 migration하는 과정을 거친다.

Hashed Sharding

shard key로 단조로운 필드 값을 써야한다고 가정한다면, 연속되거나 인접한 데이터들이 모두 하나의 shard server에 몰리는 현상이 발생할 수 있다.

이를 해결하기 위해 hashed index를 활용하여 shard key를 지정해 문제를 해결할 수 있다.

따라서 MongoDB의 shard key를 지정할 때, hashed index를 많이 사용한다.

 

추가로, Sharded cluster balancer는 chunck를 균등하게 재분배하는 역할을 한다.

이는 활성화 및 비활성화가 가능하며, 스케줄 지정을 통해 시작 및 종료 시간을 지정할 수 있다.