300x250
MongoDB 샤드 키(Shard Key) 선정 정책
MongoDB에서 샤딩(Sharding)을 구성할 때 샤드 키(Shard Key) 는 데이터가 어떻게 분배되는지를 결정하는 중요한 요소입니다. 올바른 샤드 키를 선택하지 않으면 성능 저하, 데이터 불균형(Hotspot), 부하 집중 등의 문제가 발생할 수 있습니다.
샤드 키(Shard Key)의 역할
샤드 키는 데이터를 여러 샤드(Shard)로 분산시키는 기준이 됩니다. 적절한 샤드 키를 선택하면:
- 데이터 균형 유지 (Balanced Distribution)
- 쿼리 성능 향상 (Efficient Query Routing)
- 확장성 확보 (Scalability)
- 고성능 트랜잭션 지원
반대로 잘못된 샤드 키를 선택하면 특정 샤드에 데이터가 집중되는 Hotspot 문제가 발생하고, 시스템 전체의 성능이 저하될 수 있습니다.
샤드 키 선정 시 고려해야 할 주요 요소
1. 높은 카디널리티 (High Cardinality)
- 샤드 키는 고유한 값(Unique Values)이 많을수록 좋음.
- 같은 샤드에 데이터가 몰리는 것을 방지.
- 예시:
- user_id (좋음) → 개별 사용자별 데이터가 샤드에 골고루 분배됨.
- status (나쁨) → 예를 들어 status: active/inactive 같은 값은 2~3개밖에 없어서 샤드가 불균형해짐.
2. 균등한 분포 (Even Distribution)
- 데이터가 각 샤드에 고르게 저장되도록 분포되어야 함.
- 특정 샤드에 데이터가 몰리면 Hotspot 문제 발생.
- 예시:
- timestamp (나쁨) → 최근 데이터가 특정 샤드에 집중될 가능성이 높음.
- email_hash (좋음) → 무작위로 분포되므로 균형 유지.
3. 쿼리 성능 최적화 (Efficient Query Routing)
- 샤드 키는 쿼리에서 자주 사용되는 필드여야 함.
- 샤드 키를 포함한 Targeted Query(특정 샤드에 쿼리하는 방식)를 수행하면 속도가 빠름.
- 예시:
- customer_id → 고객별 데이터 조회 시 특정 샤드로 빠르게 접근 가능.
- random_key → 분포는 균등하나, 특정 데이터를 찾기 어려움 (비효율적).
4. 쓰기 성능 고려 (Write Scalability)
- 샤드 키가 단순 증가하는 값이면 특정 샤드에 부하 집중.
- 예시:
- auto-increment ID (나쁨) → 증가하는 값이므로 특정 샤드에 데이터가 몰림.
- UUID 또는 hashed field (좋음) → 무작위 분포되므로 균형 유지.
5. 데이터 이동 최소화 (Minimize Chunk Migration)
- 샤드 간 데이터 이동(Migration)이 최소화되도록 설계.
- 샤드 키가 너무 비효율적이면, 데이터 분배 후 특정 샤드가 계속 데이터를 이동해야 하는 상황이 발생.
- 예시:
- region (나쁨) → 특정 지역 사용자가 많으면 특정 샤드로 데이터가 몰림.
- region + user_id (좋음) → 특정 지역 내에서도 개별 사용자를 기준으로 분산.
좋은 샤드 키(Shard Key) 예시
샤드 키특징장점단점
user_id | 개별 사용자 기준으로 분배 | 데이터 균등 분포, 쿼리 성능 우수 | 특정 사용자가 많으면 일부 샤드 부하 |
email_hash | 이메일을 해싱한 값 사용 | 데이터 균형 유지, 보안 강화 | 해싱 연산 추가 필요 |
order_id (UUID) | 랜덤한 주문 ID | 쓰기 분산, Hotspot 방지 | 조회 성능 저하 가능 |
customer_id + order_date | 고객 ID + 날짜 조합 | 균형 유지 & 조회 최적화 | 일부 고객이 많으면 편중 가능 |
잘못된 샤드 키(Shard Key) 예시
샤드 키문제점결과
status (ex: active/inactive) | 값이 몇 개 안됨 | 특정 샤드에 쏠림 |
timestamp | 데이터가 최신 순으로 몰림 | 특정 샤드 부하 증가 |
auto-increment ID | 증가하는 값이라 특정 샤드만 사용 | 성능 저하, 확장 어려움 |
region (ex: 국가 코드) | 특정 지역 사용자 집중 | 특정 샤드가 과부하 |
MongoDB 샤드 키 유형
MongoDB에서는 기본적으로 다음 3가지 유형의 샤드 키를 제공합니다.
샤드 키 유형설명장점단점
Ranged Sharding | 일정 범위(Range)로 분할 | 쿼리 최적화 쉬움 | 특정 샤드로 데이터 집중 가능 |
Hashed Sharding | 키를 해싱하여 분산 | 데이터 균형 유지 | 범위 쿼리 성능 저하 |
Zone Sharding | 특정 키 값 범위를 특정 샤드에 할당 | 지역성 데이터 유지 가능 | 복잡한 관리 필요 |
- Ranged Sharding 예시: order_date
- Hashed Sharding 예시: hashed(user_id)
- Zone Sharding 예시: region + user_id
300x250
'IT > 몽고DB' 카테고리의 다른 글
몽고DB - Cache Dirty (1) | 2025.02.13 |
---|---|
몽고DB 쿼리 실행계획 조회 (0) | 2025.02.11 |
MongoDB 클러스터 구성 요건 (0) | 2025.02.06 |
MongoDB 유투브 강의 (0) | 2025.02.04 |
Mongodb 운영시 백업 필요성 이유 (0) | 2025.02.02 |