split
정의
split
샤딩된 클러스터 의청크 를 두 개의 청크로 분할합니다. 샤드는 유지 관리하는 청크 크기 통계를 기반으로 청크를 관리 하고 분할 합니다.
예외적인 경우
split
명령을 사용하면 관리자가 수동으로 분할을 만들 수 있습니다. 이러한 상황과 를 래핑하는 MongoDB shell 명령에 대한 자세한 내용 은 샤드 클러스터의split
청크 분할을 참조하세요.split
명령은admin
데이터베이스에서 실행해야 합니다.팁
mongosh
에서 이 명령은sh.splitAt()
및sh.splitFind()
헬퍼 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 서버리스 인스턴스에서는 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.adminCommand( { split: <database>.<collection>, <find|middle|bounds> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 | |
| 문서 | 샤드 키에서 동등성 매치를 지정하는 쿼리 문입니다. 일치 항목은 지정된 문서가 포함된 청크를 선택합니다. 빈 collection에는 |
| 배열 |
빈 collection에는 |
| 문서 |
고려 사항
find
또는 bounds
옵션과 함께 사용하면 split
명령은 중앙값을 따라 청크를 분할합니다. 따라서 빈 청크에는 중앙값이 없으므로 명령은 find
또는 bounds
옵션을 사용하여 빈 청크를 분할할 수 없습니다.
빈 청크로 분할을 만들려면 split
명령과 함께 middle
옵션을 사용하거나 sh.splitAt()
명령을 사용합니다.
명령 형식
청크 분할을 생성하려면 mongos
인스턴스에 연결하고 admin
데이터베이스에 대해 다음 명령을 실행합니다.
db.adminCommand( { split: <database>.<collection>, find: <document> } )
또는:
db.adminCommand( { split: <database>.<collection>, middle: <document> } )
또는:
db.adminCommand( { split: <database>.<collection>, bounds: [ <lower>, <upper> ] } )
해시 샤드 키 를 사용하는 컬렉션에 대한 분할을 생성하려면 bounds
매개변수를 사용합니다. 이 목적에는 middle
매개변수를 사용하지 마세요 .
경고
새로운 청크를 생성하기 위해 샤드 collection의 데이터를 분할할 때는 주의하세요. 기존 데이터가 있는 collection을 샤딩하면 MongoDB는 자동으로 청크를 생성하여 collection을 균등하게 분산합니다. 샤드 클러스터에서 데이터를 효과적으로 분할하려면 청크 내 문서 수와 평균 문서 크기를 고려하여 균일한 청크 크기를 만들어야 합니다. 청크의 크기가 고르지 않은 경우, 샤드는 동일한 수의 청크를 가질 수 있지만 매우 다른 데이터 크기를 가질 수 있습니다. 크기가 다른 청크를 가진 collection으로 연결되는 분할을 만들지 마세요.
예시
다음 섹션에서는 split
명령의 예시를 제공합니다.
청크를 반으로 분할
db.adminCommand( { split : "test.people", find : { _id : 99 } } )
split
명령은 test
데이터베이스의 people
컬렉션에서 {
_id : 99 }
와 일치하는 문서가 있는 청크를 식별합니다. split
는 적절한 청크를 식별하기 위해 일치 항목이 존재할 필요가 없습니다. 그런 다음 명령은 이를 동일한 크기의 두 청크로 분할합니다.
참고
split
은(는) 크기가 아닌 범위 별로 동일한 청크 두 개를 생성하고, 선택한 점 을 새 청크의 경계로 사용하지 않습니다.
임의 분할점 정의
임의 분할점을 정의하려면 다음 형식을 사용합니다.
db.adminCommand( { split : "test.people", middle : { _id : 99 } } )
split
명령은 test
데이터베이스의 people
컬렉션에서 쿼리 { _id : 99 }
와 일치하는 문서를 보유할 청크를 식별합니다. split
는 적절한 청크를 식별하기 위해 일치 항목이 존재할 필요가 없습니다. 그런 다음 명령은 문서를 두 개의 청크로 분할하고, 일치하는 문서를 분할된 청크 중 하나의 하한으로 설정합니다.
이 양식은 일반적으로 collection의 데이터를 사전 분할 할 때 사용됩니다.
해시 샤드 키 값을 사용하여 청크 분할
이 예제에서는 test
데이터베이스의 people
collection에서 해시 샤드 키 userid
를 사용합니다. 다음 명령은 두 개의 단일 필드 문서를 포함하는 배열을 사용하여 청크를 분할하는 해시 샤드 키의 최소값과 최대값을 나타냅니다.
db.adminCommand( { split: "test.people", bounds : [ { userid: NumberLong("-5838464104018346494") }, { userid: NumberLong("-5557153028469814163") } ] } )
참고
MongoDB는 64비트 NumberLong 유형을 사용하여 해시된 값을 나타냅니다.
sh.status()
을(를) 사용하여 샤드 키의 기존 경계를 확인합니다.
메타데이터 잠금 오류
밸런서 프로세스와 같은 다른 프로세스가 split
가 실행되는 동안 메타데이터를 변경하면 metadata lock error
가 표시될 수 있습니다.
errmsg: "The collection's metadata lock is already taken."
이 메시지는 분할이 부작용 없이 실패했음을 나타냅니다. split
명령을 다시 시도합니다.