setIndexCommitQuorum
setIndexCommitQuorum
setIndexCommitQuorum
명령은 프라이머리 노드가 인덱스를 커밋하기 전에 로컬 인덱스 빌드를 커밋할 준비가 되어야 하는 데이터 보유 멤버의 최소 수를 설정합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 명령은 모든 MongoDB Atlas 클러스터에서 지원됩니다. 모든 명령에 대한 Atlas 지원 에 대한 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
db.runCommand( { setIndexCommitQuorum: <string>, indexNames: [ <document> ], commitQuorum: <int> | <string>, comment: <any> } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 |
---|---|---|
string | 인덱스가 빌드되는 컬렉션의 이름입니다. | |
array | 수정할 진행 중인 인덱스 빌드의 배열입니다. 배열의 각 요소는 인덱스의 이름 이어야 합니다.
| |
int or string | 프라이머리 등 데이터를 보유하는 복제본 세트 멤버의 최소 수(즉, 쿼럼 커밋)이며, 이는 프라이머리가 MongoDB v5.0 부터 쿼럼 커밋이 commitQuorum을 업데이트 하려면 노드 복제본 세트 노드에 는 다음과 같은 값을 지원합니다.
| |
comment | any | 선택 사항. 이 명령에 첨부할 사용자 제공 코멘트입니다. 설정되면 이 설명은 다음 위치에서 이 명령의 레코드와 함께 표시됩니다.
댓글은 유효한 모든 BSON types (문자열, 정수, 객체, 배열 등)이 될 수 있습니다. |
행동
참고
featureCompatibilityVersion 4.4 이상이 필요합니다.
인덱스 생성은 여러 단계의 프로세스 로 이루어집니다. 인덱스 생성 프로세스 는 commit quorum
를 사용하여 세컨더리 노드의 복제 지연 을 최소화합니다.
세컨더리 노드가 commitIndexBuild
oplog 항목을 수신하면 노드는 로컬 인덱스 빌드를 커밋할 수 있을 때까지 추가 oplog 애플리케이션을 중지합니다. 인덱스 빌드는 순간에서 며칠까지 걸릴 수 있으므로 세컨더리 노드가 프라이머리 노드보다 빌드 속도가 느리면 복제 지연이 상당할 수 있습니다.
복제 지연 을 관리 하기 위해 쿼럼 커밋 은 최소한의 보조 노드도 인덱스 빌드 를 커밋 할 준비가 될 때까지 프라이머리 노드 에서 인덱스 빌드 커밋을 지연합니다.
쿼럼 커밋은 명령이 완료될 때 세컨더리 인덱스의 사용할 준비가 되었다고 보장하지 않습니다. 특정 수의 세컨더리를 사용할 준비가 되었는지 확인하려면 적절한 쓰기 고려를 설정합니다.
쿼럼 커밋에 포함되지 않은 세컨더리 노드가 commitIndexBuild
oplog 항목을 수신하는 경우, 노드는 인덱스 빌드가 완료될 때까지 복제를 차단할 수 있습니다.
setIndexCommitQuorum
를 발행해도 0
의 commitQuorum 으로 시작된 인덱스 빌드에는 영향을 주지 않습니다.
중요
buildIndexes 가 false
로 설정된 복제본 세트 노드는 쿼럼 커밋에 포함될 수 없습니다.
쓰기 우려와 대조되는 쿼럼 커밋
쿼럼 커밋과 쓰기 고려 간에는 중요한 차이점이 있습니다.
인덱스 빌드는 쿼럼 커밋 사용합니다.
쓰기 작업은 쓰기 고려 사용합니다.
클러스터 내의 각 데이터 보유 노드는 투표권을 가진 노드입니다.
커밋 쿼럼은 프라이머리 멤버를 포함하여 몇 개의 데이터 보유 투표 멤버 또는 어떤 투표 멤버가 동시 인덱스 빌드를 커밋할 준비가 되어 있어야 하는지를 지정합니다. 이 준비가 완료되면 프라이머리 멤버가 커밋을 실행합니다.
쓰기 고려는 쓰기 작업이 지정된 수의 인스턴스로 전파되었다는 확인 수준입니다.
8.0 버전 변경 사항: 커밋 쿼럼은 프라이머리가 인덱스 빌드를 커밋하기 전에 인덱스 빌드를 완료할 준비가 되어 있어야 하는 노드 수를 지정합니다. 반대로 프라이머리가 인덱스 빌드를 커밋한 경우 쓰기 고려는 명령이 성공을 반환하기 전에 인덱스 빌드 oplog 항목을 복제해야 하는 노드 수를 지정합니다.
이전 릴리스에서는 프라이머리가 인덱스 빌드를 커밋했을 때 쓰기 고려가 명령이 성공적으로 반환되기 전에 인덱스 빌드를 완료해야 하는 노드 수를 지정했습니다.
예시
복제본 세트 또는 샤딩된 클러스터에서 인덱스 빌드가 데이터를 보유한 모든 복제본 세트 멤버에서 동시에 진행됩니다. 샤딩된 클러스터의 경우 인덱스 빌드는 인덱싱되는 컬렉션에 대한 데이터가 포함된 샤드에서만 발생합니다. 프라이머리에는 인덱스를 사용할 준비가 된 것으로 표시하기 전에 빌드를 완료해야 하는 자신을 포함한 최소한의 데이터 보유 voting
멤버(즉, 쿼럼 커밋)가 필요합니다. 자세한 내용은 복제된 환경에서의 인덱스 빌드를 참조하세요.
다음 작업은 두 인덱스의 인덱스 빌드를 시작합니다.
db.getSiblingDB("examples").invoices.createIndexes( [ { "invoices" : 1 }, { "fulfillmentStatus" : 1 } ] )
기본값 으로 인덱스 빌드는 "votingMembers"
쿼럼 커밋 또는 모든 데이터 보유 투표 복제본 세트 멤버를 사용합니다. 다음 작업은 인덱스 빌드 쿼럼 커밋 을 "majority"
또는 데이터 보유 투표 멤버의 단순 과반수로 수정합니다.
db.getSiblingDB("examples").runCommand( { "setIndexCommitQuorum" : "invoices", "indexNames" : ["invoices_1", "fullfillmentStatus_1"], "commitQuorum" : "majority" } )
indexNames
에 지정된 인덱스는 지정된 인덱스 빌더, 즉createIndexes()
작업과 연결된 진행 중인 빌드의 전체 세트여야 합니다.indexNames
필드 는 인덱스의 이름 을 지정합니다. 인덱스는 명시적인 이름 없이 생성 MongoDB 는 인덱싱된 필드의 이름과 정렬 순서를 연결하여 인덱스 이름을 생성했습니다.