문서 메뉴

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

split

이 페이지의 내용

  • 정의
  • 구문
  • 명령 필드
  • 고려 사항
  • 명령 형식
  • 예제
  • 메타데이터 잠금 오류
split

버전 4.2에서 변경되었습니다.

샤드 클러스터청크 를 두 개의 청크로 분할합니다. MongoDB 4.2부터 샤드는 유지 관리하는 청크 크기 통계를 기반으로 청크를 관리하고 분할합니다.

예외적인 경우 split 명령을 사용하면 관리자가 수동으로 분할을 만들 수 있습니다. 이러한 상황과 를 래핑하는 MongoDB Shell 명령에 대한 자세한 내용 은 샤드 클러스터의 청크 split 분할을 참조하세요.

split 명령은 admin 데이터베이스에서 실행해야 합니다.

mongosh 에서 이 명령은 sh.splitAt()sh.splitFind() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 않을 수 있습니다. 편의가 필요하지 않거나 추가 반환 필드가 필요한 경우 database 명령을 사용합니다.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
split: <database>.<collection>, <find|middle|bounds>
}
)

이 명령은 다음 필드를 사용합니다.

필드
유형
설명
split
문자열
청크 가 존재하는 컬렉션 의 이름입니다. 데이터베이스 이름을 포함하여 컬렉션의 전체 네임스페이스 를 지정합니다.
find
문서

샤드 키에서 동등성 매치를 지정하는 쿼리 문입니다. 일치 항목은 지정된 문서가 포함된 청크를 선택합니다. find, bounds 또는 middle 중 하나만 지정해야 합니다.

빈 collection에는 find 옵션을 사용할 수 없습니다.

bounds
배열

bounds 해시 샤드 키 를 사용하여 분할된 collection의 청크에 적용됩니다. 매개변수의 배열은 청크의 하위 및 상위 샤드 키 값을 지정하는 두 개의 문서로 구성되어야 합니다. 이 값은 기존 청크의 최소값 및 최대값과 일치해야 합니다. find, bounds 또는 middle 중 하나만 지정합니다.

빈 collection에는 bounds 옵션을 사용할 수 없습니다.

middle
문서
두 개의 청크를 만들기 위한 분할 지점으로 사용할 문서입니다. split 에는 find, bounds 또는 middle 옵션 중 하나가 필요합니다.

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 는 적절한 청크를 식별하기 위해 일치 항목이 존재할 필요가 없습니다. 그런 다음 명령은 이를 동일한 크기의 두 청크로 분할합니다.

참고

임의 분할점을 정의하려면 다음 형식을 사용합니다.

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 명령을 다시 시도합니다.

← shardingState