Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

updateZoneKeyRange

Nesta página

  • Definição
  • Sintaxe
  • Campos de comando
  • Comportamento
  • Segurança
  • Exemplo
updateZoneKeyRange

O comando administrativo updateZoneKeyRange pode criar ou remover a associação entre um intervalo de valores de chave de shard e uma zona.

A partir do MongoDB 4.0.2, você pode executar o comando de banco de dados do updateZoneKeyRange e seus auxiliares sh.updateZoneKeyRange() e sh.addTagRange() em uma coleção não compartilhada ou uma coleção não existente.

Dica

Em mongosh, esse comando também pode ser executado por meio do método auxiliar sh.updateZoneKeyRange() .

Os métodos auxiliares são convenientes para os usuários mongosh , mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a conveniência não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.

Para executar updateZoneKeyRange, use o método db.runCommand( { <command> } ).

Você deve executar addShardToZone no banco de dados admin.

O comando tem a seguinte sintaxe:

db.adminCommand(
{
updateZoneKeyRange: <string>,
min: <document>,
max: <document>,
zone: <string> | <null>
}
)

O comando utiliza os seguintes campos:

Parâmetro
Tipo
Descrição
updateZoneKeyRange
string

O namespace da collection para associar ao intervalo.

A collection deve ser fragmentada para que o comando seja bem-sucedido.

min
documento

O limite inferior inclusivo do intervalo de valores de chave de fragmento .

Especifique cada campo da chave de fragmento na forma de <fieldname> : <value>. O valor deve ser do mesmo tipo ou tipos de BSON que a chave de shard.

Observação

Para usar a fragmentação hashed, o valor do campo precisa ser do tipo NumberLong.

max
documento

O limite superior exclusivo do intervalo de valores da chave de fragmento .

Especifique cada campo da chave de fragmento na forma de <fieldname> : <value>. O valor deve ser do mesmo tipo ou tipos de BSON que a chave de shard.

Observação

Para usar a fragmentação hashed, o valor do campo precisa ser do tipo NumberLong.

zone
string

O nome da zona a ser associada à faixa limitada por min e max.

Se o valor não corresponder a uma zona existente, o comando falhará.

Especifique null para remover a associação entre o intervalo com limites inferiores de min e limite superior de max e a collection updateZoneKeyRange . Os valores de min e max devem corresponder exatamente ao intervalo alvo.

Se nenhuma faixa de zona corresponder aos limites mínimo e máximo passados para updateZoneKeyRange, nada será removido.

Emita updateZoneKeyRange somente quando conectado a uma instância mongos .

mongosh fornece dois métodos de ajuda:

  • sh.updateZoneKeyRange() para adicionar um intervalo de valores de chave de fragmento a uma zona.

  • sh.removeRangeFromZone() para remover um intervalo de valores da chave de fragmento de uma zona.

Você não pode criar uma faixa de valores de chave de shard cujos limites inferior e superior se sobreponham a uma faixa existente para a collection fragmentada. Por exemplo, dado um intervalo existente de 1 a 10, você não pode criar um novo intervalo de 5 a 20, pois o novo intervalo se sobreporia ao intervalo existente.

Uma zona pode ter vários intervalos de dados associados a ela, mas um intervalo pode, no máximo, ser associado a uma única zona.

Ao remover a associação entre um intervalo e uma zona, o updateZoneKeyRange não remove a zona. Utilize o comando removeShardFromZone para remover a associação entre uma zona e um shard.

Consulte a página do manual de zonas para obter mais informações sobre zonas em clusters fragmentados.

Se você estiver considerando realizar a fragmentação de zonas em uma collection vazia ou inexistente, use updateZoneKeyRange para criar as zonas e os intervalos de zonas antes de fragmentar a collection (desde 4,0,2). A partir da versão 4.0.3, a criação de zonas e intervalos de zonas em collections vazias ou inexistentes permite que o MongoDB otimize o processo inicial de criação e distribuição de chunks ao fragmentar a collection. Esse processo otimizado permite uma configuração mais rápida da fragmentação por zonas com menos sobrecarga do balanceador do que a criação de zonas após a fragmentação. O balanceador executa todo o gerenciamento de blocos após a criação e distribuição otimizadas do bloco inicial.

Para obter um exemplo de definição de zona e zona para distribuição inicial de parte, consulte Predefinir zona e zona para uma Collection vazia ou não existente.

O MongoDB oferece suporte para as collection de fragmentação em índices compostos com hash. O MongoDB pode executar criação e distribuição inicial otimizada de parte ao fragmentar a collection vazia ou inexistente em uma chave de fragmento com hash.

Para obter um exemplo mais completo da definição de zona e zona para a distribuição inicial de parte em uma chave de fragmento com hash, consulte Pre-definir zona e zona para uma Collection vazia ou não existente.

Depois de executar com sucesso updateZoneKeyRange, pode haver migrações de chunks durante a próxima rodada do balancer.

Depois de adicionar uma faixa a uma zona, o balancer deve primeiro executar para migrar quaisquer chunks cujos intervalos sejam cobertos pela zona para shards dentro dessa zona. Até que o balanceamento seja concluído, alguns chunks podem residir no fragmento errado, dadas as zonas configuradas para o cluster fragmentado.

A remoção da associação entre uma faixa e uma zona remove as restrições que mantêm as partes cobertas pela faixa nos shards dentro dessa zona. Durante a próxima rodada do balanceador, o balanceador pode migrar partes que foram cobertos anteriormente pela zona.

Consulte a documentação do balanceador de cluster fragmentado para obter mais informações sobre como as migrações funcionam em um cluster fragmentado.

As faixas de zona estão sempre inclusas no limite inferior e exclusivas do limite superior.

A eliminação de uma coleção exclui seus intervalos de zonas/tags associados.

Nas versões anteriores, o MongoDB não remove as associações de tags para uma collection descartada e, se posteriormente você criar uma nova collection com o mesmo nome, as associações de tags antigas serão aplicadas à nova collection.

Para clusters fragmentados em execução com autenticação, você deve autenticar como:

  • um usuário cujos privilégios incluem as ações especificadas em várias coleções no banco de dados config :

    ou, alternativamente,

  • um usuário cujos privilégios incluem enableSharding no recurso de cluster (disponível a partir da versão 4.2.2, 4.0.14, 3.6.16).

As roles embutidas clusterAdmin ou clusterManager updateZoneKeyRange as permissões apropriadas para emitir . Consulte a página de documentação do Controle de acesso baseado em funções para obter mais informações.

Dada uma collection fragmentada exampledb.collection com uma chave de shard de { a : 1 }, a operação a seguir cria uma faixa com um limite inferior de 1 e um limite superior de 10 na zona alpha :

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : "alpha"
}
)

A seguinte operação remove o intervalo criado anteriormente passando null para o campo zone .

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : null
}
)

Os min e max devem corresponder exatamente aos limites do intervalo alvo. A operação a seguir tenta remover o intervalo criado anteriormente, mas especifica { a : 0 } como o limite min :

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 0 },
max : { a : 10 },
zone : null
}
)

Embora a faixa de { a : 0 } e { a : 10 } abranja a faixa existente, não é uma correspondência exata e, portanto, updateZoneKeyRange não remove nada.

Dada uma collection fragmentada exampledb.collection com uma chave de shard de { a : 1, b : 1 }, a operação a seguir cria uma faixa que cobre o limite inferior de { a: 1, b : 1 } e um limite superior de { a : 10, b : 10} , e a associa à zona alpha :

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1, b : 1 },
max : { a : 10, b : 10 },
zone : "alpha"
}
)
← unsetSharding