티스토리 뷰
반응형
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
- 샤드 키 값을 기준으로 데이터를 범위로 나누는 작업이 포함
- 샤드 키 값을 기반으로 각 청크에 범위가 할당
- 샤드 키는 동일한 청크에 존재할 가능성이 높음
👉🏻 범위가 지정된 샤딩의 효율성은 선택한 샤드 키에 따라 달라집니다.
- 샤드 키를 제대로 고려하지 않으면 데이터가 고르지 않게 분산되어 샤딩의 일부 이점을 무효화하거나 성능 병목 현상을 초래할 수 있습니다.
반응형
'Web > Infra' 카테고리의 다른 글
[Kafka Streams] 정산 데이터, 이제 스트리밍으로 즐기세요! (feat. Kafka streams) 2편 (0) | 2025.08.07 |
---|---|
[Kafka Streams] 정산 데이터, 이제 스트리밍으로 즐기세요! (feat. Kafka streams) 1편 (0) | 2025.08.06 |
쉽고 빠르게 서비스 배포하기(JIB, EC2, Docker ..) (0) | 2025.03.18 |
[Kafka] Kafka Streams (0) | 2025.01.31 |
대규모 시스템 설계 독서 후 링크드인 시스템 분석하기 (0) | 2024.03.01 |
댓글