Docs Menu

sh.shardCollection()

이 페이지의 내용

sh.shardCollection(namespace, key, unique, options)

key샤드 키로 사용하여 컬렉션을 샤딩합니다. 샤드 키는 MongoDB가 컬렉션 문서를 샤드에 배포하는 방법을 결정합니다.

참고

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

MongoDB 6.0부터는 컬렉션을 샤딩할 때 sh.enableSharding() 메서드를 먼저 실행하여 데이터베이스를 구성할 필요가 없습니다.

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령 또는 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다.

데이터베이스 명령에 대해서는 shardCollection 명령을 참조하십시오.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

sh.shardCollection() 다음 인수를 사용합니다.

Parameter
유형
설명

namespace

문자열

"<database>.<collection>" 형식으로 샤딩할 컬렉션의 네임스페이스입니다.

key

문서

샤드 키로 사용할 필드를 지정하는 문서입니다.

{ <field1>: <1|"hashed">, ... }

필드 값을 둘 중 하나로 설정합니다.

샤드 키는 인덱스에서 지원되어야 합니다. 컬렉션이 비어 있는 경우가 아니라면 shardCollection 명령 이전에 인덱스가 존재해야 합니다. 컬렉션이 비어 있는 경우, 샤드 키를 지원할 수 있는 인덱스가 아직 존재하지 않으면 MongoDB는 컬렉션을 샤딩하기 전에 인덱스를 생성합니다.

샤드 키 인덱스도 참조하세요.

unique

부울

선택 사항입니다. 기본 인덱스가 고유한 제약 조건을 실행하도록 하려면 true를 지정합니다. 기본값은 false입니다.

해시 샤드 키를 사용할 때는 true를 지정할 수 없습니다.

레거시 mongo shell 의 경우 options 문서 를 지정하는 경우 unique 값을 명시적으로 지정해야 합니다. mongoshoptions 문서 를 지정할 때 unique 이 필요하지 않습니다.

options

문서

선택 사항. numInitialChunkscollation을 포함한 선택적 필드가 포함된 문서입니다.

options 인수는 다음 옵션을 지원합니다.

Parameter
유형
설명

numInitialChunks

integer

선택 사항입니다. 해시 샤드 키 컬렉션을 샤딩할 때 처음에 생성할 청크의 최소 개수를 지정합니다. 그런 다음 MongoDB는 클러스터 전체에 청크를 생성하고 균형을 맞춥니다. numInitialChunks 매개변수는 샤드당 8192 청크보다 작아야 합니다. 기본값은 샤드당 2 청크입니다.

컬렉션이 비어 있지 않거나 샤드 키에 해시된 필드가 포함되어 있지 않으면 작업에서 오류를 반환합니다.

  • presplitHashedZones: true 로 샤딩 하는 경우, MongoDB 는 클러스터 의 구역에 지정된 수의 청크를 균등하게 분산하려고 시도합니다.

  • presplitHashedZones: false 또는 생략으로 샤딩 하고 빈 컬렉션 에 대해 구역 및 구역 범위가 정의되지 않은 경우, MongoDB 는 클러스터 의 샤드 전체에 지정된 수의 청크를 균등하게 분산된 하려고 시도합니다.

  • presplitHashedZones: false 또는 생략을 사용하여 샤딩 하고 빈 컬렉션 에 대해 구역 및 구역 범위가 정의된 경우numInitialChunks 는 효과가 없습니다.

collation

문서

선택 사항입니다. shardCollection에 지정된 collection에 기본값 데이터 정렬이 있는 경우 ``{ locale : "simple" }``(이)가 포함된 데이터 정렬 문서를 포함해야 하며, 그렇지 않으면 shardCollection 명령이 실패합니다. 샤드 키 패턴을 지원하는 필드가 있는 인덱스 중 하나 이상에는 단순 데이터 정렬이 있어야 합니다.

부울

선택 사항입니다. 컬렉션에 정의된 구역 및 구역 범위를 기반으로 비어 있거나 존재하지 않는 컬렉션에 대해 초기 청크 생성 및 배포를 수행하려면 true를 지정합니다. 해시된 샤딩에만 해당됩니다.

shardCollection() presplitHashedZones: true는 다음 중 하나라도 참이면 오류를 반환합니다.

문서

선택 사항입니다. 새로운 분할된 Time Series 컬렉션을 생성하려면 이 옵션을 지정합니다.

기존 Time Series 컬렉션을 샤딩하려면 이 매개변수를 생략합니다.

shardCollection에 지정된 컬렉션이 Time Series 컬렉션이고 timeseries 옵션이 지정되지 않은 경우 MongoDB는 기존 Time Series 컬렉션을 정의하는 값을 사용하여 timeseries 필드를 채웁니다.

자세한 구문은 Time Series 옵션을 참조하세요.

버전 5.1에 추가되었습니다.

샤딩된 새 time series 컬렉션을 생성하려면 timeseries 옵션을 sh.shardCollection()으로 지정합니다.

timeseries 옵션은 다음 필드를 사용합니다.

필드
유형
설명

timeField

문자열

필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 timeField 값으로 유효한 BSON 날짜가 있어야 합니다.

metaField

문자열

선택 사항. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정된 필드의 이름은 _id이(가) 아니거나 timeseries.timeField 이름과 같지 않을 수 있습니다. 필드는 모든 데이터 유형이 가능합니다.

metaField 필드는 선택 사항이지만 메타데이터를 사용하면 쿼리 최적화를 개선할 수 있습니다. 예를 들어 MongoDB는 새 컬렉션에 대해 metaFieldtimeField 필드에 복합 인덱스를 자동으로 생성합니다 . 이 필드에 값을 제공하지 않으면 데이터는 시간을 기준으로만 버킷됩니다.

granularity

문자열

선택 사항입니다. 가능한 값은 다음과 같습니다.

  • "seconds"

  • "minutes"

  • "hours"

기본적으로 MongoDB는 고빈도 수집을 위해 granularity"seconds"로 설정합니다.

Time Series 컬렉션의 데이터가 내부적으로 저장되는 방식을 최적화하여 성능을 향상시키려면 granularity 매개변수를 수동으로 설정합니다. granularity의 값을 선택하려면 연속 수신 측정값 사이의 시간 범위와 가장 일치하는 값을 선택합니다.

timeseries.metaField를 지정하는 경우 metaField 필드에 대해 동일한 고유 값을 갖는 연속 수신 측정값 사이의 시간 범위를 고려합니다. 측정값이 동일한 소스에서 나온 경우 metaField 필드에 대해 동일한 고유 값을 갖는 경우가 많습니다.

timeseries.metaField를 지정하지 않는 경우 컬렉션에 삽입된 모든 측정값 사이의 시간 범위를 고려합니다.

granularity 매개변수를 설정하면 bucketMaxSpanSecondsbucketRoundingSeconds 매개변수를 설정할 수 없습니다.

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

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

중요

이 명령은 M0, M2 및 M5 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

이후에 샤드 키는 변경할 수 있지만, 확장성 및 성능 문제를 피하려면 샤드 키 선택을 신중하게 고려하는 것이 중요합니다.

시계열 컬렉션을 샤딩할 때 샤드 키에 다음 필드만 지정할 수 있습니다.

  • metaField

  • 하위 필드 metaField

  • timeField

샤드 키에 이러한 필드의 조합을 지정할 수 있습니다. 샤드 키 패턴에는 _id를 포함한 다른 필드가 허용되지 않습니다.

샤드 키를 지정하는 경우:

샤드 키로 timeField 지정하지 마세요. timeField단조롭게 증가하기 때문에 클러스터 내의 단일 청크에 모든 쓰기가 표시될 수 있습니다. 이상적으로는 데이터가 여러 청크에 고르게 분산되어 있는 것이 좋습니다.

샤드 키를 가장 잘 선택하는 방법을 알아보려면 다음을 참조하세요.

다음도 참조하세요.

해시 샤드 키해시 인덱스 또는 복합 해시 인덱스를 샤드 키로 사용합니다.

field: "hashed" 형식을 사용하여 해시 샤드 키 필드를 지정합니다.

참고

해시 샤드 키 컬렉션을 생성하는 동안 청크 마이그레이션이 진행 중인 경우, 밸런서가 자동으로 컬렉션의 균형을 맞출 때까지 초기 청크 분포가 고르지 않을 수 있습니다.

다음도 참조하세요.

샤드 컬렉션 작업(예: shardCollection 명령 및 sh.shardCollection() 헬퍼)은 컬렉션에 대한 구역 및 구역 범위가 정의된 경우 비어 있거나 존재하지 않는 컬렉션에 대한 초기 청크 생성 및 배포를 수행할 수 있습니다. 초기 청크 배포를 통해 구역별 샤딩을 더 빠르게 설정할 수 있습니다. 초기 배포 후에는 밸런서가 평소대로 청크 배포를 관리합니다.

예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요. 범위 지정 또는 단일 필드 해시 샤드 키를 사용하여 컬렉션을 분할할 때 빈 컬렉션에 대해 구역 및 구역 범위가 정의된 경우 numInitialChunks 옵션은 효과가 없습니다.

복합 해시 인덱스를 사용하여 컬렉션을 샤딩하려면 복합 해시 인덱스를 사용한 초기 청크 분산을 참조하세요.

MongoDB는 복합 해시 인덱스에 대한 샤딩 컬렉션을 지원합니다. 복합 해시 샤드 키를 사용하여 비어 있거나 존재하지 않는 컬렉션을 샤딩하는 경우 MongoDB가 초기 청크 생성 및 분산을 수행하려면 추가 요구 사항이 적용됩니다.

빈 컬렉션에 대해 구역 및 구역 범위가 정의되어 있고 presplitHashedZonesfalse인 경우 numInitialChunks 옵션은 효과가 없습니다.

예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.

다음도 참조하세요.

unique: true를 지정하는 경우:

  • sh.shardCollection()은 컬렉션이 비어 있으면 해당 인덱스가 아직 존재하지 않는 경우 샤드 키에 고유 인덱스를 생성합니다.

  • 컬렉션이 비어 있지 않은 경우 sh.shardCollection()을 사용하기 전에 인덱스를 먼저 만들어야 합니다.

샤드 키가 접두사인 고유한 복합 인덱스를 가질 수 있지만 unique 매개변수를 사용하는 경우 컬렉션은 샤드 키에 있는 고유한 인덱스를 보유해야 합니다.

샤딩 컬렉션 및 고유 인덱스도 참조하세요.

컬렉션에 기본 데이터 정렬이 있는 경우 sh.shardCollection() 명령에는 { locale: "simple" } 값을 가진 collation 매개변수가 포함되어야 합니다. 기본 데이터 정렬이 있는 비어 있지 않은 컬렉션의 경우 필드가 샤드 키 패턴을 지원하는 단순 데이터 정렬이 있는 인덱스가 하나 이상 있어야 합니다.

데이터 정렬이 없는 컬렉션의 경우 collation 옵션을 지정할 필요가 없습니다. 데이터 정렬이 없는 컬렉션에 대해 데이터 정렬 옵션을 지정하면 아무런 효과가 없습니다.

mongosshardCollection 명령의 쓰리 고려에 대한 "majority", 해당 헬퍼 sh.shardCollection(), sh.shardAndDistributeCollection() 메서드를 사용합니다.

records이라는 데이터베이스에 people이라는 컬렉션이 주어지면 다음 명령은 zipcode필드를 기준으로 컬렉션을 샤드합니다.

sh.shardCollection("records.people", { zipcode: 1 } )

phonebook 데이터베이스에는 기본 데이터 정렬이 없는 contacts 컬렉션이 있습니다. 다음 예시에서는 sh.shardCollection()을 사용하여 phonebook.contacts를 다음과 같이 샤딩합니다.

  • last_name 필드의 해시 샤드 키

  • 5 개의 이니셜 청크

  • simple의 데이터 정렬입니다.

sh.shardCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)

이 페이지의 내용