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

sh.shardAndDistributeCollection()

이 페이지의 내용

  • 정의
  • 매개변수
  • 고려 사항
  • 예시
  • 자세히 알아보기
sh.shardAndDistributeCollection(namespace, key, unique, options)

컬렉션 을 샤딩하고 제공된 샤드 키 를 사용하여 데이터를 즉시 재배포합니다. 데이터를 즉시 재배포하면 데이터 이동 속도가 빨라지고 워크로드에 영향 이 줄어듭니다.

중요

Mongo쉬 방법

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

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

mongosh 에서 sh.shardAndDistributeCollection() 를 실행 하면 shardCollectionreshardCollection 명령을 연속으로 실행하는 것과 동일한 결과를 얻습니다.

sh.shardAndDistributeCollection() 다음 매개변수를 사용합니다.

Parameter
유형
필요성
설명
namespace
문자열
필수 사항
"<database>.<collection>" 형식으로 샤드 할 컬렉션 의 네임스페이스 입니다.
key
문서
필수 사항

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

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

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

  • 1 범위 기반 샤딩의경우

  • "hashed" 해시 샤드 키를 지정합니다.

    샤드 키는 인덱스 에서 지원되어야 합니다. shardAndDistributeCollection() 메서드를 실행 하기 전에 인덱스 가 존재해야 합니다.

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

unique
부울
옵션

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

해시 된 샤드 키 를 사용하는 경우 true 을 지정할 수 없습니다.

options
문서
옵션
numInitialChunkscollation을 포함한 선택적 필드가 포함된 문서입니다.

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

Parameter
유형
설명
numInitialChunks
Integer
컬렉션 을 샤딩 및 리샤딩할 때 클러스터 의 모든 샤드에 생성할 초기 청크 수를 지정합니다. 그런 다음 MongoDB 는 클러스터 전체에 청크를 생성하고 균형을 맞춥니다. numInitialChunks 매개변수의 결과는 샤드 당 8192 미만이어야 합니다. 기본값은 샤드 당 1000 청크입니다.
collation
문서
shardAndDistributeCollection() 에 지정된 컬렉션 에 기본값 데이터 정렬 이 있는 경우 { locale : "simple" } 을 사용하여 데이터 정렬 문서 를 포함 해야 하며 , 그렇지 않으면 shardAndDistributeCollection() 메서드가 실패합니다.
presplitHashedZones
부울

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

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

timeseries
문서

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

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

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

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

다음 요소는 성능 또는 데이터 배포에 영향 을 줄 수 있습니다.

나중에 샤드 키 는 변경할 수 있지만, 확장성 성과 성능을 최적화하려면 샤드 키 선택을 신중하게 고려하세요.

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

  • metaField

  • 하위 필드 metaField

  • timeField

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

샤드 키를 지정하는 경우:

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

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

다음도 참조하세요.

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

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

참고

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

다음도 참조하세요.

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

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

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

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

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

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

다음도 참조하세요.

unique: true 을 지정하는 경우 sh.shardAndDistributeCollection() 을 사용하기 전에 인덱스 를 만들어야 합니다.

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

다음도 참조하세요.

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

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

mongos shardCollection 명령, 해당 헬퍼 sh.shardCollection()sh.shardAndDistributeCollection() 메서드의 쓰기 고려 (write concern) 에"majority"를 사용합니다.

다음 예는 선택적 매개변수 유무에 관계없이 sh.shardAndDistributeCollection() 메서드를 사용하는 방법을 보여줍니다.

records 데이터베이스 에는 people 컬렉션 이 포함되어 있습니다. 다음 명령은 zipcode 필드 를 기준으로 컬렉션 을 샤딩하고 records.people 컬렉션 의 데이터를 즉시 재배포합니다.

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

phonebook 데이터베이스 에 기본값 데이터 정렬 이 없는 contacts 컬렉션 이 있습니다. 다음 예시 에서는 sh.shardAndDistributeCollection() 를 사용하여 phonebook.contacts 컬렉션 을 샤드 하고 재배포합니다.

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

돌아가기

sh.setBalancerState