정의
shardCollectionShards a collection to distribute its documents across shards. The
shardCollectioncommand must be run against theadmindatabase.팁
In
mongosh, this command can also be run through thesh.shardCollection()helper method.Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
To run shardCollection, use the db.runCommand( { <command> } ) method.
명령의 형식은 다음과 같습니다.
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" }, timeseries: <object> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
|---|---|---|
| 문자열 |
|
| 문서 | 샤드 키로 사용할 필드를 지정하는 문서입니다.
필드 값을 다음 중 하나로 설정합니다. shard key must be supported by an index. Unless the collection is empty, the index must exist prior to the 샤드 키 인덱스도 참조하세요. |
| 부울 | 기본 인덱스가 고유한 제약 조건을 실행하도록 하려면 해시 샤드 키를 사용할 때는 |
| integer | 해시 샤드 키로 빈 컬렉션을 샤딩할 때 클러스터의 모든 샤드에 걸쳐 생성할 초기 청크 수를 지정합니다. 그런 다음 MongoDB는 클러스터 전체에 청크를 생성하고 균형을 맞춥니다. 컬렉션이 비어 있지 않거나 샤드 키에 해시된 필드가 포함되어 있지 않으면 작업에서 오류를 반환합니다.
|
| 문서 | 선택 사항입니다. |
부울 | 선택 사항입니다. 컬렉션에 정의된 구역 및 구역 범위를 기반으로 비어 있거나 존재하지 않는 컬렉션에 대해 초기 청크 생성 및 배포를 수행하려면
| |
객체 | 선택 사항입니다. 새로운 분할된 Time Series 컬렉션을 생성하려면 이 옵션을 지정합니다. 기존 Time Series 컬렉션을 샤딩하려면 이 매개변수를 생략합니다.
자세한 구문은 Time Series 옵션을 참조하세요. 버전 5.1에 추가 되었습니다. |
Time Series 옵션
버전 5.1에 추가 되었습니다.
To create a new time series collection that is sharded, specify the timeseries option to shardCollection.
Time Series 옵션에는 다음 필드가 필요합니다.
필드 | 유형 | 설명 |
|---|---|---|
| 문자열 | 필수입니다. 각 time series 문서에서 날짜를 포함하는 필드의 이름입니다. time series 컬렉션의 문서에는 |
| 문자열 | 선택 사항. 각 time series 문서에 메타데이터가 포함된 필드의 이름입니다. 지정된 필드의 메타데이터는 고유한 문서 시리즈에 레이블을 지정하는 데 사용되는 데이터여야 합니다. 메타데이터는 거의 변경되지 않아야 합니다. 지정된 필드의 이름은
|
| 문자열 | 선택 사항입니다. 가능한 값은 다음과 같습니다.
기본적으로 MongoDB는 고빈도 수집을 위해 Time Series 컬렉션의 데이터가 내부적으로 저장되는 방식을 최적화하여 성능을 향상시키려면
|
고려 사항
샤드 키
이후에 샤드 키는 변경할 수 있지만, 확장성 및 성능 문제를 피하려면 샤드 키 선택을 신중하게 고려하는 것이 중요합니다.
Time Series 컬렉션의 샤드 키
시계열 컬렉션을 샤딩할 때 샤드 키에 다음 필드만 지정할 수 있습니다.
그
metaField하위 필드
metaField그
timeField
샤드 키에 이러한 필드의 조합을 지정할 수 있습니다. 샤드 키 패턴에는 _id를 포함한 다른 필드가 허용되지 않습니다.
샤드 키를 지정하는 경우:
timeField다음과 같아야 합니다.샤드 키 패턴의 끝에
팁
샤드 키로 timeField만 지정하지 마세요. timeField이 단조롭게 증가하기 때문에 클러스터 내의 단일 청크에 모든 쓰기가 표시될 수 있습니다. 이상적으로는 데이터가 여러 청크에 고르게 분산되어 있는 것이 좋습니다.
샤드 키를 가장 잘 선택하는 방법을 알아보려면 다음을 참조하세요.
해시 샤드 키
해시 샤드 키는 해시 인덱스 또는 복합 해시 인덱스를 샤드 키로 사용합니다.
field: "hashed" 형식을 사용하여 해시 샤드 키 필드를 지정합니다.
참고
해시 샤드 키 컬렉션을 생성하는 동안 청크 마이그레이션이 진행 중인 경우, 밸런서가 자동으로 컬렉션의 균형을 맞출 때까지 초기 청크 분포가 고르지 않을 수 있습니다.
구역 샤딩 및 초기 청크 배포
The shard collection operation (i.e. shardCollection command and the sh.shardCollection() helper) can perform initial chunk creation and distribution for an empty or a non-existing collection if zones and zone ranges have been defined for the collection. Initial chunk distribution allows for a faster setup of zoned sharding. After the initial distribution, the balancer manages the chunk distribution going forward per usual.
예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요. 범위 지정 또는 단일 필드 해시 샤드 키를 사용하여 컬렉션을 분할할 때 빈 컬렉션에 대해 구역 및 구역 범위가 정의된 경우 numInitialChunks 옵션은 효과가 없습니다.
복합 해시 인덱스를 사용하여 컬렉션을 샤딩하려면 구역 샤딩 및 복합 해시 인덱스를 참조하세요.
구역 샤딩 및 복합 해시 인덱스
MongoDB는 복합 해시 인덱스에 대한 샤딩 컬렉션을 지원합니다. 복합 해시 샤드 키를 사용하여 비어 있거나 존재하지 않는 컬렉션을 샤딩하는 경우 MongoDB가 초기 청크 생성 및 분산을 수행하려면 추가 요구 사항이 적용됩니다.
The numInitialChunks option has no effect if zones and zone ranges have been defined for the empty collection and presplitHashedZones is false.
예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.
고유성
unique: true를 지정하는 경우:
If the collection is empty,
shardCollectioncreates the unique index on the shard key if such an index does not already exist.If the collection is not empty, you must create the index first before using
shardCollection.
샤드 키가 접두사인 고유한 복합 인덱스를 가질 수 있지만 unique 매개변수를 사용하는 경우 컬렉션은 샤드 키에 있는 고유한 인덱스를 보유해야 합니다.
샤딩 컬렉션 및 고유 인덱스도 참조하세요.
데이터 정렬
If the collection has a default collation, the shardCollection command must include a collation parameter with the value { locale: "simple" }. For non-empty collections with a default collation, you must have at least one index with the simple collation whose fields support the shard key pattern.
데이터 정렬이 없는 컬렉션의 경우 collation 옵션을 지정할 필요가 없습니다. 데이터 정렬이 없는 컬렉션에 대해 데이터 정렬 옵션을 지정하면 아무런 효과가 없습니다.
쓰기 고려
mongos uses "majority" for the write concern of the shardCollection command and its helper sh.shardCollection().
예시
다음 작업은 records 데이터베이스의 people 컬렉션에 대해 샤딩을 사용하도록 설정하고 zipcode 필드를 샤드 키로 사용합니다.
db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )