문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

샤드 클러스터의 청크 분할

일반적으로 MongoDB는 청크가 최대 청크 크기 를 초과하는 경우 삽입 후 청크 를 분할합니다. 그러나 다음과 같은 경우에는 청크를 수동으로 분할해야 할 수 있습니다.

  • 기존 데이터를 사용하여 cluster를 배포한 후의 경우처럼, cluster에 대량의 데이터가 있고 청크 가 거의 없는 경우.

  • 즉, 처음에는 단일 청크 또는 샤드에 존재하는 많은 양의 데이터를 추가해야 합니다. 예를 들어, 샤드 키 값이 300400 사이에 있는 대량의 데이터를 삽입하려고 계획 하지만 샤드 키의 모든 값이 250 ~ 500 사이에 있고 단일 청크에 있습니다.

참고

MongoDB는 연속된 청크 범위를 단일 청크로 결합하는 mergeChunks 명령을 제공합니다. 자세한 내용 은 cluster의 청크 병합 을 참조하세요.

이동이 향후 삽입에 도움이 되는 경우 밸런서 는 최근에 분할된 청크를 새 샤드로 즉시 마이그레이션할 수 있습니다. 밸런서는 수동으로 분할된 청크와 시스템에 의해 자동으로 분할된 청크를 구분하지 않습니다.

경고

새로운 청크를 생성하기 위해 샤드 collection의 데이터를 분할할 때는 주의하세요. 기존 데이터가 있는 collection을 샤딩하면 MongoDB는 자동으로 청크를 생성하여 collection을 균등하게 분산합니다. 샤드 클러스터에서 데이터를 효과적으로 분할하려면 청크 내 문서 수와 평균 문서 크기를 고려하여 균일한 청크 크기를 만들어야 합니다. 청크의 크기가 고르지 않은 경우, 샤드는 동일한 수의 청크를 가질 수 있지만 매우 다른 데이터 크기를 가질 수 있습니다. 크기가 다른 청크를 가진 collection으로 연결되는 분할을 만들지 마세요.

sh.status() 를 사용하여 cluster 전체의 현재 청크 범위를 확인합니다.

청크를 수동으로 분할하려면 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() : 청크를 반드시 동일한 크기의 두 개 청크로 분할하지는 않습니다. 분할은 해당 문서가 청크의 어디에 있는지에 관계없이 쿼리와 일치하는 문서 위치에서 발생합니다.

다음도 참조하세요.

← 샤드 cluster에 청크 생성