IT/몽고DB

MongoDB 샤드키 선정 정책

IT 블로거 2025. 2. 6. 19:49
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