샤딩된 클러스터의 청크 분할
일반적으로 MongoDB 는 청크 가 최대 청크 크기 를 초과하는 경우 삽입 후 청크 를 분할합니다. 그러나 다음과 같은 경우에는 청크를 수동으로 분할 할 수 있습니다.
기존 데이터를 사용하여 클러스터 를 배포한 후의 경우처럼 클러스터 에 많은 양의 데이터가 있고 청크 가 매우 적습니다.
즉, 처음에는 단일 청크 또는 샤드 에 존재하는 많은 양의 데이터를 추가해야 합니다. 예를 예시, 샤드 키 값이
300
에서400
사이인 대량의 데이터를 삽입하려고 하지만 샤드 키의 모든 값이250
에서500
사이에 있는 경우 단일 청크 에 있습니다.
참고
MongoDB는 연속된 청크 범위를 단일 청크로 결합하는 mergeChunks
명령을 제공합니다. 자세한 내용 은 샤드 클러스터의 청크 병합 을 참조하세요.
이동이 향후 삽입에 도움이 되는 경우 밸런서 는 최근에 분할된 청크를 새 샤드로 즉시 마이그레이션할 수 있습니다. 밸런서는 수동으로 분할된 청크와 시스템에 의해 자동으로 분할된 청크를 구분하지 않습니다.
경고
새로운 청크를 생성하기 위해 샤드 collection의 데이터를 분할할 때는 주의하세요. 기존 데이터가 있는 collection을 샤딩하면 MongoDB는 자동으로 청크를 생성하여 collection을 균등하게 분산합니다. 샤드 클러스터에서 데이터를 효과적으로 분할하려면 청크 내 문서 수와 평균 문서 크기를 고려하여 균일한 청크 크기를 만들어야 합니다. 청크의 크기가 고르지 않은 경우, 샤드는 동일한 수의 청크를 가질 수 있지만 매우 다른 데이터 크기를 가질 수 있습니다. 크기가 다른 청크를 가진 collection으로 연결되는 분할을 만들지 마세요.
sh.status()
를 사용하여 클러스터 전체의 현재 청크 범위를 확인합니다.
청크를 수동으로 분할하려면 middle
또는 find
필드와 함께 split
명령을 사용합니다. mongosh
는 sh.splitFind()
및 sh.splitAt()
도우미 메서드를 제공합니다.
splitFind()
는 이 쿼리와 일치하는 첫 번째 반환 문서가 포함된 청크를 동일한 크기의 청크 두 개로 분할합니다. 샤드 컬렉션의 전체 네임스페이스(예: '<database>.<collection>
')를 splitFind()
로 지정해야 합니다. splitFind()
의 쿼리는 샤드 키를 사용할 필요가 없지만, 대부분의 경우에 샤드 키를 사용하는 것이 합리적입니다.
예시
다음 명령은 records
데이터베이스의 people
컬렉션에 있는 zipcode
필드에 대한 63109
값을 포함하는 청크를 분할합니다.
sh.splitFind( "records.people", { "zipcode": "63109" } )
splitAt()
을 사용하여 청크를 둘로 분할하고, 쿼리된 문서를 새 청크의 하한으로 사용합니다:
예시
다음 명령은 records
데이터베이스의 people
컬렉션에 있는 zipcode
필드에 대한 63109
값이 포함된 청크를 분할합니다.
sh.splitAt( "records.people", { "zipcode": "63109" } )
참고
splitAt()
: 청크를 반드시 동일한 크기의 두 개 청크로 분할하지는 않습니다. 분할은 해당 문서가 청크의 어디에 있는지에 관계없이 쿼리와 일치하는 문서 위치에서 발생합니다.