샤딩된 클러스터 고유 인덱스 샤드 키 에 있거나 샤드 키 접두사로 포함하는 경우에만 샤드 간에 고유 제약 조건을 적용합니다. 이 페이지에서는 컬렉션 샤드 때 고유성을 유지하는 방법을 설명합니다.
이미 샤딩된 컬렉션 에 고유 인덱스 생성하려면 기존 샤드 컬렉션에 고유 인덱스 생성을 참조하세요. 샤드 키 값에 고유성을 시행하다 하려면 샤드 키 값에 고유성 적용을 참조하세요. 샤드 키 의 일부가 될 수 없는 필드 에 고유성을 시행하다 하려면 샤드 키가 아닌 필드에 고유성 적용을 참조하세요.
고유성 제약 조건이 있는 컬렉션 리샤딩하려면 새 샤드 키 기존 고유 인덱스에 대한 고유 인덱스 요구 사항을 충족해야 합니다. 자세한 내용은 컬렉션 리샤딩을 참조하세요.
이 작업에 대하여
고유 인덱스 인덱싱된 필드에 중복된 값이 저장 않도록 합니다. 샤딩된 컬렉션 에서 각 샤드 자체 데이터의 중복만 확인할 수 있으므로 MongoDB 지정된 인덱스 키 값을 가진 모든 문서 동일한 샤드 에 존재하는 것이 보장되는 경우에만 클러스터 전체에 제약 조건을 시행하다 할 수 있습니다. 샤드 키 인덱스 의 접두사로 포함하면 이러한 보장이 제공됩니다.
범위가 지정된 샤딩된 컬렉션의 경우 다음 인덱스만 고유할 수 있습니다.
인덱스가 될 수 있습니다.
_id기본값 인덱스; 그러나_id인덱스 필드_id샤드 키 아닌 경우에만 샤드 당 고유성 제약 조건을 적용합니다.
고유한 인덱스 제약 조건은 다음을 의미합니다.
샤딩할 컬렉션 의 경우, 컬렉션 여러 개의 고유 인덱스가 있는 경우 샤드 키 모든 고유 인덱스의 접두사가 아닌 이상 컬렉션 샤드 할 수 없습니다.
이미 샤딩된 컬렉션 의 경우, 샤드 키 접두사로 포함되어 있지 않으면 다른 필드에 고유 인덱스를 생성할 수 없습니다.
고유 인덱스 인덱스된 필드 누락된 문서 에 대해 null 값을 저장합니다. 누락된 인덱스 필드
null인덱스 키 값의 다른 인스턴스 로 처리됩니다. 자세한 내용은 고유한 단일 필드 인덱스에서 누락된 문서 필드를 참조하세요.
다음과 같은 제약 조건도 적용.
해시 인덱스에는 고유한 제약 조건을 지정할 수 없습니다.
인덱스 키에 데이터 정렬이 있는 경우, MongoDB 데이터 정렬이 간단한 경우에만 고유성을 보장할 수 있습니다.
샤드 키 의 고유 인덱스 샤드 키 의 개별 구성 요소가 아닌 전체 키 조합에 고유성을 적용합니다.
중요
_id 필드가 샤드 키가 아닐 경우 샤딩된 클러스터는 클러스터 전역의 _id 필드에 고유성 제약 조건을 적용하지 않습니다.
_id 필드 샤드 키 아닌 경우 고유성 제약 조건은 문서 저장하는 샤드 에만 적용됩니다. 즉, 두 개 이상의 문서가 서로 다른 샤드에 있는 경우 동일한 _id 값을 가질 수 있습니다.
예시 를 들어, 두 개의 샤드 A와 B에 걸쳐 있는 샤드 키 {x: 1} 이 있는 샤딩된 컬렉션 생각해 보겠습니다. _id 키는 샤드 키 아니므로 컬렉션 샤드 A에 _id 값 1 을 가진 문서 가질 수 있습니다. 샤드 B에 _id 값이 1 인 다른 문서 있습니다.
_id 필드 샤드 키 아닌 경우, MongoDB 애플리케이션이 _id 필드 채우기 위해 고유 식별자를 사용하여 샤드 전체에서 _id 값의 고유성을 보장할 것으로 예시 합니다.
시작하기 전에
컬렉션 의 샤드 키 식별합니다. 샤딩된 컬렉션 의 샤드 키 보려면
sh.status()메서드를 실행 하고 출력에서 컬렉션 찾습니다.기존 문서가 필드의 고유성 제한 조건을 위반하지 않는지 확인합니다. 샤드에 중복 값이 있는 문서가 포함되어 있는 경우 인덱스 생성 작업이 중복이 없는 샤드에서는 성공할 수 있지만 중복이 있는 샤드에서는 실패하여 샤드 간 인덱스가 일치하지 않게 됩니다.
단계
다음 예시 region_id에서 accounts.names 컬렉션 샤딩하고 region_id와 email의 조합에 고유 제약 조건을 적용합니다.
컬렉션을 샤딩합니다.
컬렉션 샤드 하려면 sh.shardCollection() 메서드를 실행 .
sh.shardCollection( "accounts.names", { region_id: 1 } )
{ collectionsharded: 'accounts.names', ok: 1, '$clusterTime': { clusterTime: Timestamp( { t: 1759260515, i: 58 } ), signature: { hash: Binary.createFromBase64( 'AAAAAAAAAAAAAAAAAAAAAAAAAAA=', 0 ), keyId: Long( '0' ) } }, operationTime: Timestamp( { t: 1759260515, i: 57 } ) }
샤드 키 접두사로 포함하지 않는 고유 인덱스 포함된 컬렉션 샤드 경우,shardCollection 명령을 실행 때 MongoDB 오류를 반환합니다.