Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

updateZoneKeyRange

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 명령 필드
  • 행동
  • 보안
  • 예시
updateZoneKeyRange

updateZoneKeyRange 관리 명령은 샤드 키 값 범위 와 구역간의 연결을 만들거나 제거 할 수 있습니다.

updateZoneKeyRange 데이터베이스 명령 과 해당 헬퍼 sh.updateZoneKeyRange()sh.addTagRange() 를 샤딩되지 않은 컬렉션 또는 존재하지 않는 컬렉션 에서 실행 수 있습니다.

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

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

updateZoneKeyRange를 실행하려면 db.runCommand( { <command> } ) 메서드를 사용합니다.

관리 데이터베이스에서 addShardToZone 을(를) 실행해야 합니다.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

중요

이 명령은 서버리스 인스턴스에서는 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

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

db.adminCommand(
{
updateZoneKeyRange: <string>,
min: <document>,
max: <document>,
zone: <string> | <null>
}
)

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

Parameter
유형
설명

updateZoneKeyRange

문자열

범위와 연결할 collection의 네임스페이스입니다.

명령이 성공하려면 collection을 샤딩해야 합니다.

min

문서

샤드 키 값 범위의 포괄적 하한입니다.

샤드 키의 각 필드를 <fieldname> : <value> 형식으로 지정합니다. 값은 샤드 키와 동일한 BSON 유형이어야 합니다.

해시 샤딩 을 사용하려면 min 의 필드 값이 NumberLong 유형이어야 합니다.

max

문서

샤드 키 값 범위의 배타적 상한입니다.

샤드 키의 각 필드를 <fieldname> : <value> 형식으로 지정합니다. 값은 샤드 키와 동일한 BSON 유형이어야 합니다.

해시 샤딩 을 사용하려면 max 의 필드 값이 NumberLong 유형이어야 합니다.

zone

문자열

minmax 으로 묶인 범위와 연결할 구역의 이름입니다.

값이 기존 구역과 일치하지 않으면 명령이 실패합니다.

min 의 하한과 max 의 상한이 있는 범위와 updateZoneKeyRange collection 간의 연결을 제거하려면 null 을 지정합니다. minmax 값은 대상 범위와 정확히 일치해야 합니다.

updateZoneKeyRange 에 전달된 최소 및 최대 경계와 일치하는 구역 범위가 없는 경우 아무것도 제거되지 않습니다.

updateZoneKeyRange 인스턴스에 연결된 경우에만 를 실행합니다.mongos

mongosh 는 두 가지 헬퍼 메서드를 제공합니다.

샤드 컬렉션의 기존 범위와 하한선 및 상한선이 겹치는 샤드 키 값 범위는 생성할 수 없습니다. 예를 들어 기존 범위가 1 ~ 10 인 경우 새 범위가 기존 범위와 겹치므로 5 ~ 20 의 새 범위를 만들 수 없습니다.

구역은 여러 범위의 데이터와 연결될 수 있지만 범위는 최대 단일 구역과 연결될 수 있습니다.

범위와 구역 간의 연결을 제거할 때 updateZoneKeyRange 는 구역을 제거하지 않습니다. removeShardFromZone 명령을 사용하여 구역과 샤드 간의 연결을 제거합니다.

샤드 클러스터의 구역에 대한 자세한 내용은 구역 매뉴얼 페이지를 참조하세요.

비어 있거나 존재하지 않는 컬렉션에 대해 구역 샤딩 을 수행하려는 updateZoneKeyRange 경우, 컬렉션을 샤딩 하기 전에 를 사용하여 구역 및 구역 범위를 생성합니다(이후 4.0.2). 버전 4 부터.0.3, 비어 있거나 존재하지 않는 컬렉션에 구역 및 구역 범위를 생성하면 MongoDB가 컬렉션을 샤딩할 때 초기 청크 생성 및 배포 프로세스를 최적화할 수 있습니다. 이 최적화된 프로세스는 샤딩 후 구역을 생성하는 것보다 적은 밸런서 오버헤드로 구역 샤딩을 더 빠르게 설정할 수 있도록 지원합니다. 밸런서 는 최적화된 초기 청크 생성 및 배포 후 모든 청크 관리를 수행합니다.

초기 청크 배포를 위한 구역 및 구역 범위를 정의하는 예 는 비어 있거나 존재하지 않는 collection에 대한 구역 및 구역 범위 사전 정의를 참조하세요.

MongoDB는 복합 해시 인덱스 에서 컬렉션 샤딩을 지원합니다. MongoDB는 복합 해시 샤드 키에서 비어 있거나 존재하지 않는 컬렉션을 샤딩할 때 최적화된 초기 청크 생성 및 배포를 수행할 수 있습니다.

해시된 필드가 샤드 키의 접두사(즉, 샤드 키의 첫 번째 필드)인 경우, MongoDB가 초기 청크 생성 및 배포를 수행하려면 다음 사항이 모두 충족되어야 합니다.

해시 된 필드 가 샤드 키 의 접두사가 아닌 경우(즉, 샤드 키 에 해시되지 않은 선행 필드가 하나 이상 있는 경우) MongoDB 가 초기 청크 생성 및 배포를 수행하려면 다음 사항이 모두 충족되어야 합니다.

  • 컬렉션에는 고유한 접두사 필드 값의 각 조합에 대해 하나의 구역 범위가 있습니다(예: 해시된 필드 앞에 오는 모든 필드).

  • 각 구역 범위 의 하한에 대해 해시 필드 와 모든 후속 필드에 대해 MinKey 를 지정합니다.

  • 각 구역 범위에 대해 하나 이상의 상한 접두사 필드는 하한 접두사 필드와 달라야 합니다 .

  • sh.shardCollection()presplitHashedZones: true 옵션을 지정합니다.

복합 해시 샤드 키의 초기 청크 배포를 위한 구역 및 구역 범위를 정의하는 더 완전한 예시 는 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.

updateZoneKeyRange 성공적으로 실행한 후 다음 밸런서 라운드에서 청크 마이그레이션이 있을 수 있습니다.

구역에 범위를 추가한 후에는 먼저 밸런서 를 실행해야 구역에 포함되는 범위의 청크를 해당 구역 내부의 샤드로 마이그레이션할 수 있습니다. 밸런싱이 완료될 때까지 샤드 클러스터에 대해 구성된 구역을 고려할 때 일부 청크가 잘못된 샤드에 있을 수 있습니다.

범위와 구역 간의 연결을 제거하면 제약 조건이 제거되어 청크가 해당 구역 내부의 샤드 범위에 포함되도록 유지됩니다. 다음 밸런서 라운드에서 밸런서는 이전에 해당 구역에 포함된 청크를 마이그레이션할 수 있습니다.

샤드 cluster에서 마이그레이션이 작동하는 방식에 대한 자세한 내용은 샤드 cluster 밸런서 설명서를 참조하세요.

구역 범위는 항상 하한 경계를 포함하고 상한 경계를 제외합니다.

컬렉션을 제거하면 관련된 영역/태그 범위가 삭제됩니다.

이전 버전에서는 MongoDB가 삭제된 컬렉션에 대한 태그 연결을 제거하지 않았으며, 나중에 같은 이름으로 새 컬렉션을 만들면 이전 태그 연결이 새 컬렉션에 적용됩니다.

authentication 으로 실행되는 샤드 클러스터의 경우 다음 중 하나를 사용하여 인증해야 합니다.

  • config 데이터베이스의 다양한 컬렉션에 대해 지정된 작업이 포함된 권한을 가진 사용자입니다.

    또는,

  • 클러스터 리소스에 대한 가 enableSharding 포함된 권한을 가진 사용자입니다.

clusterAdmin 또는 clusterManager 기본 제공 역할에는 updateZoneKeyRange 발급에 적합한 권한이 있습니다. 자세한 내용은 역할 기반 액세스 제어 에 대한 설명서 페이지를 참조하세요.

샤드 키가 { a : 1 } 인 샤드 컬렉션 exampledb.collection 이 주어지면 다음 작업은 alpha 구역에 하한이 1 이고 상한이 10 인 범위를 생성합니다.

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : "alpha"
}
)

다음 작업은 nullzone 필드에 전달하여 이전에 생성된 범위를 제거합니다.

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : null
}
)

minmax 는 대상 범위의 경계와 정확히 일치해야 합니다. 다음 작업은 이전에 생성된 범위를 제거하려고 시도하지만 { a : 0 }min 바운드로 지정합니다.

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 0 },
max : { a : 10 },
zone : null
}
)

{ a : 0 }{ a : 10 } 범위는 기존 범위를 포함하지만 정확히 일치하지 않으므로 updateZoneKeyRange 는 아무것도 제거하지 않습니다.

샤드 키가 { a : 1, b : 1 } 인 샤드된 컬렉션 exampledb.collection 이 주어지면 다음 작업은 { a: 1, b : 1 } 의 하한과 { a : 10, b : 10} 의 상한을 포함하는 범위를 생성하고 이를 alpha 구역과 연결합니다.

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1, b : 1 },
max : { a : 10, b : 10 },
zone : "alpha"
}
)

돌아가기

unsetSharding