setIndexCommitQuorum
setIndexCommitQuorum
O comando
setIndexCommitQuorum
define o número mínimo de membros portadores de dados que devem estar preparados para confirmar suas construções de índice local antes que o nó primário confirme o índice.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é suportado em todos os clusters do MongoDB Atlas . Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O comando tem a seguinte sintaxe:
db.runCommand( { setIndexCommitQuorum: <string>, indexNames: [ <document> ], commitQuorum: <int> | <string>, comment: <any> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
string | O nome da collection para a qual os índices estão sendo construídos. | |
array | Uma array de construções de índices em andamento para modificar. Cada elemento da array deve ser o nome do índice. Os índices especificados para | |
int ou string | O número mínimo de nós do conjunto de réplicas contendo dados (ou seja, quórum para a confirmação), incluindo o primário, que deve relatar uma construção de índice bem-sucedida antes que o primário marque o A partir de MongoDB v5.0, é possível retomar algumas construções de índice interrompidas quando o commit quorum está definido como Para atualizar o commitQuorum, os nós do conjunto de réplicas de membros devem ter suporta os seguintes valores:
| |
comment | any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
Comportamento
Observação
Exige featureCompatibilityVersion 4.4+
Cada mongod
no conjunto de réplica ou agrupamento fragmentado deve ter featureCompatibilityVersion configurado para pelo menos 4.4
para iniciar construções de índice simultaneamente entre membros do conjunto de réplicas.
A criação de índices é um processo de várias etapas. O processo de criação do índice usa o commit quorum
para minimizar o atraso de replicação em nós secundários.
Quando um nó secundário recebe uma entrada de oplog commitIndexBuild
, o nó interrompe outros aplicativos de oplog até que a construção do índice local possa ser confirmada. As compilações de índices podem levar de momentos a dias para serem concluídas, portanto, o atraso de replicação pode ser significativo se o nó secundário for construído mais lentamente do que o primary.
Para gerenciar o atraso de replicação, o quórum para a confirmação atrasa a confirmação da criação do índice no nó primário até que um número mínimo de secundários também esteja pronto para confirmar a criação do índice.
O quórum para a confirmação não garante que os índices nos secundários estejam prontos para uso quando o comando for concluído. Para garantir que um número específico de secundários esteja pronto para uso, defina uma referência de escrita apropriada.
Se um nó secundário que não estiver incluído no quorum para o commit receber uma entrada commitIndexBuild
no oplog, o nó poderá bloquear a replicação até que a criação do índice seja concluída.
A emissão setIndexCommitQuorum
não tem efeito sobre as compilações de índice iniciadas com commitQuorum de 0
.
Importante
Nós do conjunto de réplicas com buildIndexes definido como false
não podem ser incluídos em um commit quorum.
Quorum para o Commit Comparado com Write Concern
Existem diferenças importantes entre quóruns de commit e preocupações de gravação:
Construções de índice usam quóruns para a confirmação.
As operações de gravação usam preocupações de gravação.
Cada nó portador de dados em um cluster é um membro votante.
O quorum para o commit especifica quantos membros votantes com dados, ou quais membros votantes, incluindo o primário, devem estar preparados para confirmar uma construção de índice simultânea. antes que o primário execute o commit.
A preocupação de gravação é o nível de reconhecimento de que a gravação se propagou para o número especificado de instâncias.
Alterado na versão 8.0: O quorum de confirmação especifica quantos nós devem estar prontos para concluir a criação do índice antes que o primário faça a confirmação da criação do índice. Em contraste, quando o primário tiver confirmado a criação do índice, a preocupação de gravação especifica quantos nós devem replicar a entrada do oplog de criação do índice antes que o comando retorne sucesso.
Em versões anteriores, quando o primário confirmava a criação do índice, a preocupação de gravação especificava quantos nós deveriam finalizar a criação do índice antes que o comando retornasse sucesso.
Exemplos
Construir índices em um conjunto de réplicas ou cluster particionado é feito simultaneamente em todos os membros do conjunto de réplicas que contêm dados. Para clusters fragmentados, a construção de índices ocorre somente em fragmentos que contêm dados para a coleção que está sendo indexada. O primário requer um número mínimo de membros de dados voting
(ou seja, quórum para a confirmação), incluindo ele próprio, que deve concluir a construção antes de marcar o índice como pronto para uso. Consulte Construções de Índice em Ambientes Replicados para obter mais informações.
A seguinte operação inicia uma construção de índice de dois índices:
db.getSiblingDB("examples").invoices.createIndexes( [ { "invoices" : 1 }, { "fulfillmentStatus" : 1 } ] )
Por padrão, as compilações de índice usam o quórum para a confirmação "votingMembers"
ou todos os membros do conjunto de réplicas votantes portadores de dados. A operação a seguir modifica o quórum para a confirmação de criação de índice para "majority"
ou para uma maioria simples dos nós votantes portadores de dados:.
db.getSiblingDB("examples").runCommand( { "setIndexCommitQuorum" : "invoices", "indexNames" : ["invoices_1", "fullfillmentStatus_1"], "commitQuorum" : "majority" } )
Os índices especificados para
indexNames
devem ser o conjunto inteiro de construções em andamento associadas a um determinado construtor de índice, ou seja, a operaçãocreateIndexes()
.O campo
indexNames
especifica os nomes dos índices. Como os índices foram criados sem um nome explícito, o MongoDB gerou um nome de índice concatenando os nomes dos campos indexados e a ordem de classificação.