정의
refineCollectionShardKey기존 키에 접미사로 새 필드를 추가하여 컬렉션의 샤드 키 를 수정합니다. 컬렉션의 샤드 키를 수정하면 기존 키가 불충분한 카디널리티로 인해 점보(즉, 분할할 수 없는) 청크 가 되는 상황을 해결할 수 있습니다.
참고
데이터 분산
샤드 키 구체화의 일환으로 refineCollectionShardKey 명령은 기존 키 필드의 범위 값을 수정하지 않고 새 필드를 통합하도록 청크 범위 및 구역 범위 를 업데이트합니다. 즉, 샤드 키 를 세분화해도 샤드 또는 구역에 걸친 청크 분포에 즉시 영향을 미치지 않습니다. 향후 청크 분할 또는 마이그레이션 은 일상적인 샤딩 작업의 일부로 발생합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M10+ 클러스터에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
참고
refineCollectionShardKey 명령을 사용하려면 샤드 클러스터의 기능 호환성 버전(fcv) 이 4.4 이어야 합니다.
명령은 다음과 같은 구문을 가집니다:
db.adminCommand( { refineCollectionShardKey: "<database>.<collection>", key: { <existing key specification>, <suffix1>: <1|"hashed">, ... } } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
|---|---|---|
문자열 |
| |
문서 | 컬렉션의 새 샤드 키로 사용할 필드를 지정하는 문서입니다.
접미사 필드의 경우 필드 값을 다음 중 하나로 설정합니다.
|
팁
액세스 제어
액세스 제어와 함께 실행하는 경우 명령을 실행하려면 사용자에게 데이터베이스 및/또는 refineCollectionShardKey collection 에 대한 권한 조치가 있어야 합니다. 즉, 사용자에게는 다음 권한 을 부여하는 역할 이 있어야 합니다.
{ resource: { db: <database>, collection: <collection> }, actions: [ "refineCollectionShardKey" ] }
기본 제공 clusterManager 역할은 적절한 권한을 제공합니다.
고려 사항
인덱스 고려 사항
- 인덱스 존재 여부
명령을 실행 하기 전에 명령에 지정된 키 를 지원하는 인덱스가 존재해야 합니다.
지원 인덱스는 새 샤드 키 사양으로 시작하는 인덱스입니다. 즉, 인덱스 접두사 가 새 샤드 키 사양과 일치합니다. 즉, 샤드 키를 로 변경하려면
{ x: 1, y: 1 }{ x: 1 }로 시작하는 인덱스가{ x: 1, y: 1 }있어야 합니다. 예{ x: 1, y: 1 }{ x: 1, y: 1, a: 1, b: 1}
참고
지원 인덱스는 부분 인덱스가 될 수 없습니다.
지원 인덱스는 희소 인덱스일 수 없습니다.
If the collection에서
simple이 아닌 데이터 정렬을 사용하는 경우 지원 인덱스는{ locale: "simple" }데이터 정렬을 지정해야 합니다.
- 고유 인덱스
현재 샤드 인덱스에 고유성 제약 조건 이 있는 경우 새 샤드 키 인덱스에도 고유성 제약 조건이 있어야 합니다.
새 샤드 키를 지원하기 위해 고유 인덱스를
refineCollectionShardKey생성한 후 를실행 하기 전에 이전 샤드 키 인덱스를 삭제 합니다.또한 현재 샤드 인덱스에 고유 제약 조건 이 있는 경우 새 샤드 키에는 해당 필드에
"hashed"를 지정할 수 없습니다.Sharded collection 및 고유 인덱스를 참조하세요.
- 인덱스 데이터 정렬
- 샤딩된 collection에
simple이 아닌 기본 데이터 정렬 이 있는 경우 인덱스에는{ locale : "simple" }가 있는 데이터 정렬 문서가 포함 되어야 합니다 . 샤드 키 패턴을 지원하는 필드가 있는 인덱스 중 하나 이상에는 단순 데이터 정렬이 있어야 합니다.
경고
현재 샤드 키 필드의 범위 또는 해시 유형을 수정하지 마세요. 데이터 불일치를 유발합니다. 예를 들어 샤드 키를 { customer_id: 1 }에서 { customer_id: "hashed", order_id: 1 }로 수정하지 마세요.
예시
test 데이터베이스에서 예시를 설정하려면 다음을 수행합니다.
다음
shardCollection작업을 사용하여test데이터베이스에서orderscollection을 샤딩합니다. 이 작업은customer_id필드를 초기 샤드 키로 사용합니다.db.adminCommand( { shardCollection: "test.orders", key: { customer_id: 1 } } )
샤드 키를 customer_id 필드 및 order_id 필드 { customer_id: 1, order_id: 1 } 로 수정하려면 다음을 수행합니다.
Create the index인덱스가 아직 존재하지 않는 경우 새 샤드 키를 지원합니다.db.getSiblingDB("test").orders.createIndex( { customer_id: 1, order_id: 1 } ) refineCollectionShardKey명령을 실행하여order_id필드를 접미사로 추가합니다.db.adminCommand( { refineCollectionShardKey: "test.orders", key: { customer_id: 1, order_id: 1 } } )
명령이 성공적으로 완료되면 collection의 샤드 키가 { customer_id: 1, order_id: 1 } 로 변경됩니다. sh.status() 을(를) 실행하여 확인할 수 있습니다.
팁
샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없는 경우가 있을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조합니다.
샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.
simple 이 아닌 데이터 정렬을 사용한 컬렉션
test 데이터베이스에서 예시를 설정하려면 다음을 수행합니다.
프랑스어
fr를 기본 데이터 정렬로 지정하여test데이터베이스에cafés컬렉션을 만듭니다.db.getSiblingDB("test").createCollection( "cafés", { collation: { locale: "fr" } } ); customer_id필드를 초기 샤드 키로 사용하여 collection을 샤딩합니다. 컬렉션에는 기본fr데이터 정렬이 있고simple데이터 정렬은 없으므로shardCollection명령에는collation: { locale: "simple" }옵션이 포함되어야 합니다.db.adminCommand( { shardCollection: "test.cafés", key: { customer_id: 1 }, collation: { locale: "simple" } } )
샤드 키를 customer_id 필드와 order_id 필드 { customer_id: 1, order_id: 1 } 모두로 수정하려면 다음을 수행합니다.
인덱스가 아직 존재하지 않는 경우
Create the index를 사용하여 새 샤드 키를 지원합니다. 컬렉션에서 비단순 데이터 정렬을 사용하기 때문에 인덱스에collation: { locale: "simple" }옵션이 포함되어야 합니다.db.getSiblingDB("test").cafés.createIndex( { customer_id: 1, order_id: 1 }, { collation: { locale: "simple" } } ) refineCollectionShardKey명령을 실행하여order_id필드를 접미사로 추가합니다.db.adminCommand( { refineCollectionShardKey: "test.cafés", key: { customer_id: 1, order_id: 1 } } )
명령이 성공적으로 완료되면 collection의 샤드 키가 { customer_id: 1, order_id: 1 } 로 변경됩니다. sh.status() 을(를) 실행하여 확인할 수 있습니다.
팁
샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없는 경우가 있을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조합니다.
샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.