MongoDB는 컬렉션에 연결된 샤드 키를 사용하여 데이터를 특정 샤드가 소유한 청크로 분할합니다. 청크는 샤딩된 데이터 범위로 구성됩니다. 각 청크에는 샤드 키에 따라 포괄적 하한과 배타적 상한이 있습니다.
청크가 나타낼 수 있는 가장 작은 데이터 단위는 하나의 고유한 샤드 키 값입니다.
초기 청크
채워진 컬렉션
샤딩 작업은 모든 샤드 키 값을 포함하는 하나의 큰 초기 청크를 생성합니다.
초기 청크 생성 후 밸런서는 데이터 밸런싱을 시작해야 할 때 초기 청크에서 범위를 이동합니다.
빈 컬렉션
비어 있거나 존재하지 않는 컬렉션에 대해 구역 및 영역 범위가 정의되어 있는 경우.
샤딩 작업은 정의된 구역 범위에 대한 빈 청크와 샤드 키 값의 전체 범위 포함하는 추가 청크를 생성하고 구역 범위에 따라 초기 청크 분산을 수행합니다. 이러한 청크의 초기 생성 및 배포를 통해 구역 샤딩 을 더 빠르게 설정 수 있습니다.
초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
비어 있거나 존재하지 않는 컬렉션에 대해 정의된 구역 및 구역 범위가 없는 경우:
해시 샤딩의 경우:
샤딩 작업은 샤드 키 값의 전체 범위를 포함하는 빈 청크를 생성하고 초기 청크 분산을 수행합니다. 기본적으로 이 작업은 샤드당 2개의 청크를 생성하고 클러스터 전체에 마이그레이션됩니다.
초기 분배 이후에는 밸런서가 앞으로의 청크 분배를 관리합니다.
원거리 샤딩의 경우:
샤딩 작업은 샤드 키 값의 전체 범위를 포괄하는 빈 단일 청크를 생성합니다.
초기 청크 생성 후 밸런서 초기 청크 샤드 전체에 적절하게 마이그레이션하고 향후 청크 분포를 관리합니다.
범위 크기
MongoDB의 기본 범위 크기는 128MB입니다. 청크 크기를 늘리거나 줄일 수 있습니다. 기본 청크 크기를 변경하는 것이 어떤 영향을 미치는지 생각해 보세요:
범위가 작을수록 마이그레이션이 더 빈번해지는 대신 데이터가 더 고르게 분산되어 쿼리 라우팅(
mongos) 계층에 오버헤드 추가됩니다.범위가 크면 마이그레이션 횟수가 줄어들어 쿼리 라우팅 계층의 네트워킹 및 내부 오버헤드 줄어들지만 데이터가 고르지 않게 분산될 수 있습니다.
범위 크기는 마이그레이션할 범위당 최대 문서 수에 영향을 줍니다.
대부분의 배포에서는 빈번한 마이그레이션보다 약간 고르지 않은 데이터 분산이 선호됩니다.
범위 마이그레이션
MongoDB는 샤딩된 클러스터의 데이터 범위를 마이그레이션하여 샤드 컬렉션의 데이터를 샤드 간에 균등하게 분산시킵니다. 마이그레이션은 다음 중 하나일 수 있습니다.
수동입니다. 대량 삽입 중 데이터를 배포하는 등 제한된 경우에만 수동 마이그레이션을 사용합니다. 자세한 내용은 청크 수동 마이그레이션을 참조하세요.
자동화 분산 밸런서 프로세스는 분할된 데이터베이스 간에 분할된 컬렉션의 데이터가 고르지 않게 분산되어 있는 경우 데이터를 자동으로 마이그레이션합니다. 자세한 내용은 마이그레이션 역치 를 참조하십시오.
샤딩된 클러스터 밸런서에 대한 자세한 내용은 샤딩된 클러스터 밸런서를 참조하십시오.
밸런싱
밸런서 는 데이터 마이그레이션을 관리하는 배경 프로세스 입니다. 가장 큰 샤드와 가장 작은 샤드 간의 데이터 불균형이 마이그레이션 임계값을 초과하면 밸런서 클러스터 전체에서 데이터를 마이그레이션하기 시작합니다.
밸런서의 특정 측면을 관리할 수 있습니다. 밸런서는 또한 샤딩된 클러스터에서 구역을 구성할 때 생성된 모든 구역을 존중합니다.
밸런서에 대한 자세한 내용은 샤딩된 클러스터 밸런서를 참조하십시오.
균형을 맞추기 위한 리샤딩
sh.shardCollection() 메서드를 실행 하면 밸런서 컬렉션 데이터를 클러스터 의 다른 샤드에 배포하기 시작합니다. 단일 샤드 한 번에 하나의 청크 마이그레이션 에만 참여할 수 있습니다. MongoDB 한 샤드 에서 다른 샤드로 데이터 범위 를 복사하는 데 성공하면 기증자 샤드 의 범위 범위 삭제기에 의해 제거 대상으로 표시됩니다. 이 프로세스 속도가 느리고 리소스 많이 사용합니다.
MongoDB 8.0부터 배포서버가 리소스 요구 사항을 충족하는 경우 sh.shardAndDistributeCollection() 메서드를 사용하여 컬렉션 샤드 것이 좋습니다. 이 메서드는 shardCollection 및 reshardCollection 명령을 래핑하여 컬렉션을 샤드하고 즉시 동일한 키로 다시 샤딩합니다. 이렇게 하면 MongoDB 밸런서 에서 기다리지 않고 샤드 전체에서 데이터를 리밸런싱합니다.
자세한 내용은 동일한 샤드 키로 리샤딩을 참조하세요.
분할 불가능/점보 청크
지정된 청크 크기 이상으로 커지지만 분할 할 수 없는 청크를 점보 청크라고 합니다. 가장 일반적인 원인은 청크 단일 샤드 키 값 나타내는 경우입니다. 점보 청크는 특히 샤드 키 값 높은 빈도로 발생하는 경우 성능 병목 현상이 발생할 수 있습니다.
MongoDB 5.0부터는 문서의 샤드 키를 변경하여 컬렉션을 리샤할 수 있습니다.
refineCollectionShardKey 명령을 사용하면 데이터를 보다 세분화하여 배포할 수 있으며 샤드 키 카디널리티 부족으로 인한 점보 청크를 해결할 수 있습니다.
컬렉션을 리샤딩해야 하는지 또는 샤드 키를 세분화해야 하는지 알아보려면 샤드 키 변경을 참조하세요.
자세한 내용은 다음을 참조하세요.