shardCollection
정의
shardCollection
컬렉션을 샤드 하여 여러 샤드에 문서를 배포합니다. 명령을
shardCollection
실행하기 전에 데이터베이스에서enableSharding
를 실행해야 합니다.shardCollection
명령은admin
데이터베이스에 대해 실행해야 합니다.shardCollection
를 실행하려면db.runCommand( { <command> } )
메서드를 사용합니다.팁
mongosh
에서 이 명령을sh.shardCollection()
헬퍼 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 서버리스 인스턴스에서는 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
shardCollection
를 실행하려면 db.runCommand( { <command> } )
메서드를 사용합니다.
명령은 다음과 같은 형식을 취합니다.
{ shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" } }
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
| 문자열 |
|
| 문서 | 샤드 키로 사용할 필드를 지정하는 문서입니다.
필드 값을 다음 중 하나로 설정합니다.
샤드 키는 인덱스에서 지원되어야 합니다. 컬렉션이 비어 있는 경우가 아니라면 샤드 키 인덱스도 참조하세요. |
| 부울 | 기본 인덱스가 고유한 제약 조건을 실행하도록 하려면 해시 샤드 키를 사용할 때는 |
| integer | 해시 샤드 키로 빈 컬렉션을 샤딩할 때 클러스터의 모든 샤드에 걸쳐 생성할 초기 청크 수를 지정합니다. 그런 다음 MongoDB는 클러스터 전체에 청크를 생성하고 균형을 맞춥니다. 컬렉션이 비어 있지 않거나 샤드 키에 해시된 필드가 포함되어 있지 않으면 작업에서 오류를 반환합니다.
|
| 문서 | 선택 사항입니다. |
부울 | 선택 사항입니다. 컬렉션에 정의된 구역 및 구역 범위를 기반으로 비어 있거나 존재하지 않는 컬렉션에 대해 초기 청크 생성 및 배포를 수행하려면
|
고려 사항
샤드 키
이후에 샤드 키는 변경할 수 있지만, 확장성 및 성능 문제를 피하려면 샤드 키 선택을 신중하게 고려하는 것이 중요합니다.
해시 샤드 키
해시 샤드 키는 해시 인덱스 또는 복합 해시 인덱스를 샤드 키로 사용합니다.
field: "hashed"
형식을 사용하여 해시 샤드 키 필드를 지정합니다.
참고
해시 샤드 키 컬렉션을 생성하는 동안 청크 마이그레이션이 진행 중인 경우, 밸런서가 자동으로 컬렉션의 균형을 맞출 때까지 초기 청크 분포가 고르지 않을 수 있습니다.
구역 샤딩 및 초기 청크 배포
샤드 컬렉션 작업(예: shardCollection
명령 및 sh.shardCollection()
헬퍼)은 컬렉션에 대한 구역 및 구역 범위 가 정의된 경우 비어 있거나 존재하지 않는 컬렉션에 대한 초기 청크 생성 및 배포를 수행할 수 있습니다. 초기 청크 배포를 통해 구역별 샤딩을 더 빠르게 설정할 수 있습니다. 초기 배포 후에는 밸런서가 평소대로 청크 배포를 관리합니다.
예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요. 범위 지정 또는 단일 필드 해시 샤드 키를 사용하여 컬렉션을 분할할 때 빈 컬렉션에 대해 구역 및 구역 범위가 정의된 경우 numInitialChunks
옵션은 효과가 없습니다.
복합 해시 인덱스를 사용하여 컬렉션을 샤딩하려면 구역 샤딩 및 복합 해시 인덱스를 참조하세요.
구역 샤딩 및 복합 해시 인덱스
MongoDB는 복합 해시 인덱스에 대한 샤딩 컬렉션을 지원합니다. 복합 해시 샤드 키를 사용하여 비어 있거나 존재하지 않는 컬렉션을 샤딩하는 경우 MongoDB가 초기 청크 생성 및 분산을 수행하려면 추가 요구 사항이 적용됩니다.
빈 컬렉션에 대해 구역 및 구역 범위가 정의되어 있고 presplitHashedZones가 false
인 경우 numInitialChunks
옵션은 효과가 없습니다.
예를 보려면 비어 있거나 존재하지 않는 컬렉션에 대한 구역 및 구역 범위 사전 정의를 참조하세요.
고유성
unique: true
를 지정하는 경우:
shardCollection
은 컬렉션이 비어 있으면 해당 인덱스가 아직 존재하지 않는 경우 샤드 키에 고유 인덱스를 생성합니다.컬렉션이 비어 있지 않은 경우
shardCollection
을 사용하기 전에 인덱스를 먼저 만들어야 합니다.
샤드 키가 접두사인 고유한 복합 인덱스를 가질 수 있지만 unique
매개변수를 사용하는 경우 컬렉션은 샤드 키에 있는 고유한 인덱스를 보유해야 합니다.
샤딩 컬렉션 및 고유 인덱스도 참조하세요.
데이터 정렬
버전 3.4에서 변경됨.
컬렉션에 기본 데이터 정렬이 있는 경우 shardCollection
명령에는 { locale: "simple" }
값을 가진 collation
매개변수가 포함되어야 합니다. 기본 데이터 정렬이 있는 비어 있지 않은 컬렉션의 경우 필드가 샤드 키 패턴을 지원하는 단순 데이터 정렬이 있는 인덱스가 하나 이상 있어야 합니다.
데이터 정렬이 없는 컬렉션의 경우 collation
옵션을 지정할 필요가 없습니다. 데이터 정렬이 없는 컬렉션에 대해 데이터 정렬 옵션을 지정하면 아무런 효과가 없습니다.
쓰기 고려
mongos
는 shardCollection
명령과 해당 헬퍼 sh.shardCollection()
의 쓰기 고려에 "majority"
를 사용합니다.
예시
다음 작업은 records
데이터베이스의 people
컬렉션에 대해 샤딩을 사용하도록 설정하고 zipcode
필드를 샤드 키로 사용합니다.
db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )