샤드 키
이 페이지의 내용
샤드 키는 인덱싱된 단일 필드이거나 클러스터의 샤드 간에 컬렉션 문서의 분포를 결정하는 복합 인덱스가 적용되는 여러 필드입니다.
MongoDB는 샤드 키 값(또는 해시된 샤드 키 값)의 범위를 겹치지 않는 샤드 키 값(또는 해시된 샤드 키 값) 범위로 나눕니다. 각 범위는 청크와 연결되며, MongoDB는 cluster의 샤드 간 청크를 균등하게 분포하려고 시도합니다.
샤드 키는 청크 분산의 효율성과 직접적인 관계가 있습니다. 샤드 키 선택을 참조하세요.
샤드 키 인덱스
모든 분할된 컬렉션에는 샤드 키를 지원하는 인덱스가 있어야 합니다. 인덱스는 샤드 키의 인덱스일 수 있으며, 샤드 키가 인덱스의 접두사인 복합 인덱스일 수도 있습니다.
컬렉션이 비어 있으면
sh.shardCollection()
은 인덱스가 아직 존재하지 않는 경우 샤드 키에 인덱스를 생성합니다.Collection이 비어 있지 않은 경우
sh.shardCollection()
를 사용하기 전에 인덱스를 먼저 만들어야 합니다.
인덱스가 샤드 키를 지원하는 유일한 숨겨지지 않은 인덱스인 경우, 인덱스를 제거하거나 숨길 수 없습니다.
Unique Indexes
MongoDB는 범위가 지정된 샤드 키 인덱스에 고유성 제약 조건을 집행할 수 있습니다. MongoDB는 샤드 키의 고유 인덱스를 사용하여 샤드 키의 개별 구성 요소가 아닌 전체 키 조합에 고유성을 집행합니다.
범위가 지정된 샤딩된 컬렉션의 경우 다음 인덱스만 고유할 수 있습니다.
인덱스가 될 수 있습니다.
기본
_id
인덱스입니다.중요
샤딩된 클러스터는
_id
필드가 샤드 키이기도 한 경우에만 클러스터 전역의_id
필드에 고유성 제약 조건을 적용합니다._id
필드가 샤드 키가 아니거나 샤드 키의 접두사일 뿐인 경우 고유성 제약 조건은 문서를 저장하는 샤드에만 적용됩니다. 즉, 두 개 이상의 문서가 서로 다른 샤드에서 발생하는 경우 동일한_id
값을 가질 수 있습니다._id
필드가 샤드 키가 아닌 경우 MongoDB는 애플리케이션이 샤드 전체에서_id
값의 고유성을 적용할 것으로 예상합니다.
고유한 인덱스 제약 조건은 다음을 의미합니다.
샤딩할 collection의 경우 collection에 다른 고유 인덱스가 있으면 collection을 샤딩할 수 없습니다.
이미 샤딩된 collection의 경우 다른 필드에 고유 인덱스를 만들 수 없습니다.
고유 인덱스는 인덱스 필드가 누락된 문서에 대해 null 값을 저장합니다. 즉, 누락된 색인 필드는
null
색인 키 값의 다른 인스턴스로 처리됩니다. 자세한 내용은 고유 단일 필드 인덱스의 문서 필드 누락을 참조하세요.
샤드 키 값에 고유성을 적용하려면 unique
매개변수를 true
로 sh.shardCollection()
메서드에 전달합니다.
컬렉션이 비어 있으면
sh.shardCollection()
은 해당 인덱스가 아직 존재하지 않는 경우 샤드 키에 고유 인덱스를 생성합니다.Collection이 비어 있지 않은 경우
sh.shardCollection()
를 사용하기 전에 인덱스를 먼저 만들어야 합니다.
샤드 키가 접두사인 고유한 복합 인덱스를 가질 수 있지만 unique
매개변수를 사용하는 경우 컬렉션은 샤드 키에 있는 고유한 인덱스를 보유해야 합니다.
해시 인덱스에는 고유한 제약 조건을 지정할 수 없습니다.
샤드 키 가 아닌 필드 에서 고유성을 유지하려면 임의 필드에 대한 고유 제약 조건을 참조하세요.
누락된 샤드 키 필드
샤딩된 컬렉션의 문서에는 샤드 키 필드가 누락될 수 있습니다. 누락된 샤드 키 필드를 설정하려면 누락된 샤드 키 필드 설정을 참조하세요.
청크 범위 및 누락된 샤드 키 필드
누락된 샤드 키 필드는 null 값이 있는 샤드 키와 동일한 청크 범위 내에 속합니다. 예를 들어, 샤드 키가 { x:
1, y: 1 }
필드에 있는 경우:
샤드 키가 누락된 문서 | 다음과 같은 범위에 속함 |
---|---|
{ x: "hello" } | { x: "hello", y: null } |
{ y: "goodbye" } | { x: null, y: "goodbye" } |
{ z: "oops" } | { x: null, y: null } |
읽기/쓰기 작업 및 누락된 샤드 키 필드
샤드 키 필드가 누락된 문서를 대상으로 하기 위해 샤드 키 필드에 { $exists: false }
필터 조건을 사용할 수 있습니다. 예를 들어 샤드 키가 { x: 1, y: 1
}
필드에 있는 경우 다음 쿼리를 실행하여 샤드 키 필드가 누락된 문서를 찾을 수 있습니다.
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )
Null 동등성 매치 필터 조건을 지정하는 경우(예: { x: null
}
), 필터는 샤드 키 필드가 누락된 문서 및 샤드 키 필드가 null
로 설정된 문서를 모두 일치시킵니다.
upsert
사양의 쓰기와 같은 일부 쓰기 연산에는 샤드 키에 대한 동등성 매치가 요구됩니다. 이러한 경우 샤드 키가 누락된 문서를 대상으로 하려면 null
동등성 매치 외에도 다른 필터 조건을 포함합니다. 예시:
{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key