Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

refineCollectionShardKey

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 명령 필드
  • 액세스 제어
  • 고려 사항
  • 예시
refineCollectionShardKey

기존 키에 접미사로 새 필드 를 추가하여 컬렉션의 샤드 키 를 수정합니다. 컬렉션의 샤드 키 를 수정하면 기존 키가 불충분한 카디널리티 로 인해 점보(즉, 분할할 수 없는) 청크 가 되는 상황을 주소 수 있습니다.

참고

데이터 분산

샤드 키 수정의 일환으로 refineCollectionShardKey 명령은 기존 키 필드의 범위 값을 수정하지 않고 새 필드를 통합하도록 청크 범위구역 범위 를 업데이트합니다. 즉, 샤드 키를 세분화해도 샤드 또는 구역에 걸친 청크 분포에 즉시 영향을 미치지 않습니다. 향후 청크 분할 또는 마이그레이션은 일상적인 샤딩 작업의 일부로 발생합니다.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

중요

이 명령은 M10+ 클러스터 또는 서버리스 인스턴스에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

참고

refineCollectionShardKey 명령을 사용하려면 샤드 클러스터의 기능 호환성 버전(fcv)4.4 이어야 합니다.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
refineCollectionShardKey: "<database>.<collection>",
key: { <existing key specification>, <suffix1>: <1|"hashed">, ... }
}
)

이 명령은 다음 필드를 사용합니다.

필드
유형
설명
문자열

"<database>.<collection>" 형식의 샤드 collection의 네임스페이스 입니다.

문서

컬렉션의 새 샤드 키로 사용할 필드를 지정하는 문서입니다.

{ <existing key specification>, <suffix1>: <1|"hashed">, ... }

  • 새 키는 기존 샤드 키로 시작해야 합니다.

  • 명령을 실행 refineCollectionShardKey 하기전에 에 존재해야 하는 인덱스에서 새 키를 지원해야 합니다. 자세한 내용은 인덱스 고려 사항 을 참조하세요.

접미사 필드의 경우 필드 값을 다음 중 하나로 설정합니다.

다음도 참조하세요.

액세스 제어와 함께 실행하는 경우 명령을 실행하려면 사용자에게 데이터베이스 및/또는 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}

    참고

  • 고유 인덱스

    현재 샤드 인덱스에 고유성 제약 조건 이 있는 경우 새 샤드 키 인덱스에도 고유성 제약 조건이 있어야 합니다.

    After creating the unique index to support the new shard key, drop the old shard key index before running refineCollectionShardKey.
    Also, if the current shard index has a unique constraint, then the new shard key cannot specify "hashed" for any of its fields.
  • 인덱스 데이터 정렬
    샤딩된 collection에simple 이 아닌 기본 데이터 정렬 이 있는 경우 인덱스에는 { locale : "simple" } 가 있는 데이터 정렬 문서가 포함 되어야 합니다 . 샤드 키 패턴을 지원하는 필드가 있는 인덱스 중 하나 이상에는 단순 데이터 정렬이 있어야 합니다.

경고

현재 샤드 키 필드의 범위 또는 해시 유형을 수정하지 마세요. 데이터 불일치를 유발합니다. 예를 들어 샤드 키를 { customer_id: 1 }에서 { customer_id: "hashed", order_id: 1 }로 수정하지 마세요.

test 데이터베이스에서 예시를 설정하려면 다음을 수행합니다.

  1. 다음 shardCollection 작업을 사용하여 test 데이터베이스에서 orders collection을 샤딩합니다. 이 작업은 customer_id 필드를 초기 샤드 키로 사용합니다.

    db.adminCommand( { shardCollection: "test.orders", key: { customer_id: 1 } } )

샤드 키를 customer_id 필드 및 order_id 필드 { customer_id: 1, order_id: 1 } 로 수정하려면 다음을 수행합니다.

  1. Create the index 인덱스가 아직 존재하지 않는 경우 새 샤드 키를 지원합니다.

    db.getSiblingDB("test").orders.createIndex( { customer_id: 1, order_id: 1 } )
  2. refineCollectionShardKey 명령을 실행하여 order_id 필드를 접미사로 추가합니다.

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { customer_id: 1, order_id: 1 }
    } )

명령이 성공적으로 완료되면 collection의 샤드 키가 { customer_id: 1, order_id: 1 } 로 변경됩니다. sh.status() 을(를) 실행하여 확인할 수 있습니다.

샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없는 경우가 있을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조합니다.

샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.

test 데이터베이스에서 예시를 설정하려면 다음을 수행합니다.

  1. cafés collection을 test fr 기본 데이터 정렬 로 지정하여 데이터베이스에 만듭니다.

    db.getSiblingDB("test").createCollection( "cafés", { collation: { locale: "fr" } } );
  2. 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 } 모두로 수정하려면 다음을 수행합니다.

  1. 인덱스가 아직 존재하지 않는 경우 Create the index 를 사용하여 새 샤드 키를 지원합니다. collection이 비단순 데이터 정렬 을 사용하기 때문에 인덱스에 collation: { locale: "simple" } 옵션이 포함되어야 합니다.

    db.getSiblingDB("test").cafés.createIndex(
    { customer_id: 1, order_id: 1 },
    { collation: { locale: "simple" } }
    )
  2. 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() 을(를) 실행하여 확인할 수 있습니다.

샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없는 경우가 있을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조합니다.

샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.

다음도 참조하세요.

돌아가기

mergeChunks