문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

샤드 키

이 페이지의 내용

  • 샤드 키 인덱스
  • 누락된 샤드 키 필드

샤드 키는 인덱싱된 단일 필드이거나 클러스터의 샤드 간에 컬렉션 문서의 분포를 결정하는 복합 인덱스가 적용되는 여러 필드입니다.

MongoDB는 샤드 키 값(또는 해시된 샤드 키 값)의 범위를 겹치지 않는 샤드 키 값(또는 해시된 샤드 키 값) 범위로 나눕니다. 각 범위는 청크와 연결되며, MongoDB는 cluster의 샤드 간 청크를 균등하게 분포하려고 시도합니다.

더 작은 범위 또는 청크로 분할된 샤드 키 값 공간의 다이어그램.

샤드 키는 청크 분산의 효율성과 직접적인 관계가 있습니다. 샤드 키 선택을 참조하세요.

모든 분할된 컬렉션에는 샤드 키를 지원하는 인덱스가 있어야 합니다. 인덱스는 샤드 키의 인덱스일 수 있으며, 샤드 키가 인덱스의 접두사복합 인덱스일 수도 있습니다.

인덱스가 샤드 키를 지원하는 유일한 숨겨지지 않은 인덱스인 경우, 인덱스를 삭제하거나 숨길 수 없습니다.

MongoDB는 범위가 지정된 샤드 키 인덱스에 고유성 제약 조건을 집행할 수 있습니다. MongoDB는 샤드 키의 고유 인덱스를 사용하여 샤드 키의 개별 구성 요소가 아닌 전체 키 조합에 고유성을 집행합니다.

범위가 지정된 샤딩된 컬렉션의 경우 다음 인덱스만 고유할 수 있습니다.

  • 샤드 키의 인덱스

  • 샤드 키가 접두사 인 복합 인덱스 입니다.

  • 기본 _id 인덱스입니다.

    중요

    샤드 클러스터는 _id 필드가 샤드 키이기도 한 경우 클러스터 전체의 _id 필드에 고유성 제약 조건을 적용합니다.

    _id 필드가 샤드 키가 아니거나 샤드 키의 접두사에 불과한 경우, 고유성 제약 조건은 문서를 저장하는 샤드에만 적용됩니다. 즉, 두 개 이상의 문서가 서로 다른 샤드에 있는 경우 동일한 _id 값을 가질 수 있습니다.

    _id 필드가 샤드 키가 아닌 경우, MongoDB는 애플리케이션이 샤드 전체에 _id 값의 고유성을 적용할 것으로 예상합니다.

고유한 인덱스 제약 조건은 다음을 의미합니다.

  • 샤딩할 collection의 경우 collection에 다른 고유 인덱스가 있으면 collection을 샤딩할 수 없습니다.

  • 이미 샤딩된 collection의 경우 다른 필드에 고유 인덱스를 만들 수 없습니다.

  • 고유 인덱스는 인덱스 필드가 누락된 문서에 대해 null 값을 저장합니다. 즉, 누락된 색인 필드는 null 색인 키 값의 다른 인스턴스로 처리됩니다. 자세한 내용은 고유 단일 필드 인덱스의 문서 필드 누락을 참조하세요.

샤드 키 값에 고유성을 적용하려면 unique 매개변수를 truesh.shardCollection() 메서드에 전달합니다.

  • 컬렉션이 비어 있으면 sh.shardCollection()은 해당 인덱스가 아직 존재하지 않는 경우 샤드 키에 고유 인덱스를 생성합니다.

  • Collection이 비어 있지 않은 경우 sh.shardCollection()를 사용하기 전에 인덱스를 먼저 만들어야 합니다.

샤드 키가 접두사인 고유한 복합 인덱스를 가질 수 있지만 unique 매개변수를 사용하는 경우 컬렉션은 샤드 키에 있는 고유한 인덱스를 보유해야 합니다.

해시 인덱스에는 고유한 제약 조건을 지정할 수 없습니다.

문서 collection의 문서에는 샤드 키 필드가 누락될 수 있습니다. 누락된 샤드 키 필드를 설정하려면 누락된 샤드 키 필드 설정을 참조하세요.

누락된 샤드 키 필드는 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
← mongos