M103 : Sharding

김하영·2022년 10월 26일
0
  • What is Sharding?

샤딩은 여러 컴퓨터에 데이터를 배포하는 방법.
MongoDB는 샤딩을 사용하여 매우 큰 데이터 세트와 높은 처리량 작업이 포함된 배포를 지원한다.

  • Sharded Cluster

MongoDB Sharded Cluster는 다음 구성 요소로 구성됩니다.

  1. shard: 각 샤드는 샤딩된 데이터의 하위 집합을 포함. 각 샤드는 복제본 세트로 배포할 수 있다.

  2. mongos: mongos는 쿼리 라우터 역할을 하여 클라이언트 애플리케이션과 샤딩된 클러스터 간의 인터페이스를 제공. MongoDB 4.4부터 mongos는 지연 시간을 최소화하기 위해 헤지 읽기를 지원할 수 있다.

  3. config servers: 구성 서버는 클러스터에 대한 메타데이터 및 구성 설정을 저장한다.

참고 : https://www.mongodb.com/docs/manual/sharding/

  • When to Shard
  1. 경제적으로 확장 가능 (scale up)
  2. no downtime
  3. process parallels (sync,backup 등..)
  • vertical and horizontal scaling (수직 확장 / 수평확장)
  1. 수직 확장 : 더 강력한 CPU를 사용하거나 RAM을 추가하거나 저장 공간을 늘리는 등 단일 서버의 용량을 늘리는 작업이 포함

  2. 수평적 확장 : 시스템 데이터세트와 부하를 여러 서버에 나누어 필요에 따라 용량을 늘리기 위해 서버를 추가하는 것을 포함

  • Sharding Architecture

  • Sharded Cluster Metadata

--> metadata 는 config server 에 속해있음.

  • Config DB

참고 : https://university.mongodb.com/mercury/M103/2022_September_13/chapter/Chapter_3_Sharding/lesson/5aa31bc996f30f818591a59c/lecture

  • Shard Keys(샤드 키)

샤드 키는 클러스터의 샤드 사이에서 컬렉션 문서의 분포를 결정하는 복합 인덱스로 덮인 단일 인덱싱된 필드 또는 여러 필드로, 불변하고 영구적이다( 값 또한! ).

MongoDB는 샤드 키 값의 범위를 샤드 키 값의 겹치지 않는 범위로 나눈다.
각 범위는 청크와 연결되며 MongoDB는 클러스터의 샤드 간에 청크를 고르게 분배하려고 시도한다.

  • Hashed Shard Keys

해시된 샤드 키로 선택한 필드에는 좋은 카디널리티 또는 많은 수의 다른 값이 있어야 한다.
해시 키는 ObjectId 값이나 타임스탬프와 같이 단조롭게 변경되는 필드가 있는 분할 키에 이상적이다.

빠른 정렬이 불가능하다.

  • Chunks

collection을 여러 조각으로 파티션하고 각 조각을 여러 샤드 서버에 분산해서 저장하는 데이터 조각

이러한 chunk는 각 샤드서버에 균등하게 저장되어야 좋은 performance를 낼 수 있는데
균등하기 저장하기 위해 큰 chunk 를 작은 chunk로 chunk split 하고, chunk가 많은 샤드에서 적은 샤드로 chunk migration 을 수행한다. (=Balancing)

profile
Back-end Developer

0개의 댓글