티스토리 뷰

Web/Infra

[MongoDB] MongoDB Sharding

Aaron 2025. 6. 27. 18:48
반응형

MongoDB Sharding

MongoDB Sharding에 대한 빠른 이해를 위해 공식 문서를 간략하게 정리하고자 합니다.

Sharding?

데이터를 여러 머신에 분산하는 방법

MongoDB는 샤딩을 통한 수평적 확장을 지원

  • 수평적 확장: 시스템 데이터 세트와 로드를 여러 서버로 나누고 필요에 따라 서버를 추가하여 용량을 늘리는 것

Sharded Cluster

컬렉션 수준에서 데이터를 샤딩하여 클러스터의 샤드 전체에 컬렉션 데이터를 분산

구성 컴포넌트

  • shard: 각 샤드에는 샤드 데이터의 하위 집합이 포함.
    • 각 샤드는 복제본 세트로 배포되어야 함
  • Routing with mongos: mongos는 클라이언트 애플리케이션과 샤딩된 클러스터 간의 인터페이스를 제공하는 쿼리 라우터 역할
  • config servers: config 서버는 클러스터에 대한 메타데이터와 구성 설정을 저장
    • config 서버는 복제본 세트(CSRS)로 배포되어야 함

Shard Keys

MongoDB는 샤드 키를 사용하여 샤드 전반에서 컬렉션 문서를 분산

샤드 키는 문서의 필드 하나 또는 여러 필드로 구성

샤딩된 컬렉션의 문서에는 샤드 키 필드가 누락될 수 있습니다.

  • 누락된 샤드 키 필드는 문서를 여러 샤드에 분산할 때 null 값이 있는 것으로 처리
  • null이 아닌 값으로 채워지도록 설정도 가능

샤드 데이터를 청크로 분할하는데, 각 청크에는 샤드 키에 따라 포괄적인 하위 범위와 배타적인 상위 범위가 있습니다.


Shard Key Index

  • 채워진 컬렉션을 샤딩하려면 컬렉션에 샤드 키로 시작하는 인덱스가 있어야 합니다.
  • 빈 컬렉션을 샤딩할 때, 컬렉션에 지정된 샤드 키에 대한 적절한 인덱스가 아직 없는 경우 MongoDB는 지원 인덱스를 생성힙니다.

Shard Key Strategy

  • 샤드 키 선택은 샤딩된 클러스터의 성능, 효율성 및 확장성에 영향을 줄 수 있습니다.

👉🏻 나중에 컬렉션을 다시 샤딩할 수는 있지만, 확장성 및 성능 관련 문제를 피하려면 샤드 키 선택을 신중하게 고려하는 것이 중요합니다.


Advantages of Sharding

읽기/쓰기

  • 샤딩된 클러스터의 샤드 전반에 읽기 및 쓰기 워크로드를 분산시켜 각 샤드가 클러스터 작업의 하위 집합을 처리할 수 있도록 합니다.
  • 읽기 및 쓰기 워크로드는 더 많은 샤드를 추가하여 클러스터 전반에서 수평으로 확장 가능합니다.

저장 용량

  • 샤딩은 클러스터의 샤드 전반에 데이터를 분산시켜 각 샤드가 전체 클러스터 데이터의 하위 집합을 포함하도록 합니다.
  • 데이터가 증가함에 따라 추가 샤드로 클러스터의 저장 용량을 늘릴 수 있습니다.

고가용성

  • config 서버 및 샤드를 복제본 세트로 배포하면 가용성이 향상됩니다.

Sharding Strategy

MongoDB는 샤딩된 클러스터 전반에 데이터를 분산하기 위한 두 가지 샤딩 전략을 지원

Hashed Sharding

  • 샤드 키 필드 값의 해시를 계산하는 작업이 포함(해시를 자동으로 계산)
    • 그런 다음 각 청크에는 해시 샤드 키 값에 따라 범위가 할당
  • 해시 값이 같은 청크에 있을 가능성이 낮음
  • 해시된 값을 기반으로 하는 데이터 분산은 특히 샤드 키가 단조롭게 변경되는 데이터 세트에서 더욱 균일한 데이터 분산 가능

Ranged Sharding

  • 샤드 키 값을 기준으로 데이터를 범위로 나누는 작업이 포함
    • 샤드 키 값을 기반으로 각 청크에 범위가 할당
  • 샤드 키는 동일한 청크에 존재할 가능성이 높음

👉🏻 범위가 지정된 샤딩의 효율성은 선택한 샤드 키에 따라 달라집니다.

  • 샤드 키를 제대로 고려하지 않으면 데이터가 고르지 않게 분산되어 샤딩의 일부 이점을 무효화하거나 성능 병목 현상을 초래할 수 있습니다.
반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday