updateZoneKeyRange
Definição
updateZoneKeyRange
O comando administrativo
updateZoneKeyRange
pode criar ou remover a associação entre um intervalo de valores de chave de shard e umazona .Você pode executar o comando de banco de dados de dados do
updateZoneKeyRange
e seus auxiliaressh.updateZoneKeyRange()
esh.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 auxiliarsh.updateZoneKeyRange()
.Os métodos auxiliares são práticos 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 praticidade 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étododb.runCommand( { <command> } )
.Você deve executar
addShardToZone
no banco de dados admin.
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
Importante
Este comando não é suportado em instâncias sem servidor. Para obter mais informações, 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.adminCommand( { updateZoneKeyRange: <string>, min: <document>, max: <document>, zone: <string> | <null> } )
Campos de comando
O comando utiliza os seguintes campos:
Parâmetro | Tipo | Descrição |
---|---|---|
| string | O namespace da collection para associar ao intervalo. A collection deve ser fragmentada para que o comando seja bem-sucedido. |
| documento | O limite inferior inclusivo do intervalo de valores de chave de fragmento . Especifique cada campo da chave de fragmento na forma de Para usar a fragmentação hashed, o valor do campo de |
| documento | O limite superior exclusivo do intervalo de valores da chave de fragmento . Especifique cada campo da chave de fragmento na forma de Para usar a fragmentação hashed, o valor do campo de |
| string | O nome da zona a ser associada à faixa limitada por Se o valor não corresponder a uma zona existente, o comando falhará. Especifique |
Comportamento
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.
Distribuição inicial de chunks para collections vazias ou inexistentes
Se você estiver considerando realizar a fragmentação de zonas em uma collection vazia ou inexistente, use updateZoneKeyRange
para criar as zonas e as faixas 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 faixas 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.
Distribuição inicial de chunks com chaves de shard com hash compostas
O MongoDB oferece suporte a collections de fragmentação em índices com hash compostos. O MongoDB pode executar a criação e a distribuição otimizadas do chunk inicial ao fragmentar a collection vazia ou inexistente em uma chave shard com hash composto.
Se o campo com hash for o prefixo da chave de fragmento (ou seja, o primeiro campo na chave de fragmento), todos os itens a seguir deverão ser verdadeiros para que o MongoDB execute a criação e a distribuição inicial do chunk:
A collection tem um único intervalo de zona com
MinKey
para todos os campos de limite inferior eMaxKey
para todos os campos de limite superior.sh.shardCollection()
especifica a opção presplitHashedZones: true .
Se o campo hashed não for o prefixo da chave de shard (ou seja, a chave de shard tem um ou mais campos principais não hasheados), todos os itens a seguir deverão ser verdadeiros para que o MongoDB execute a criação e a distribuição inicial do chunk:
A coleção tem uma faixa de zona para cada combinação de valores de campo de prefixo distintos (ou seja, todos os campos que precedem o campo hashed).
Para o limite inferior de cada faixa de zona , especifique
MinKey
para o campo hashed e todos os campos subsequentes.Para cada faixa de zona, pelo menos um campo de prefixo de limite superior deve diferir de sua contraparte de limite inferior.
sh.shardCollection()
especifica a opção presplitHashedZones: true .
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.
Balancer
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.
Limites
As faixas de zona estão sempre inclusas no limite inferior e exclusivas do limite superior.
Coleções descartadas
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.
Segurança
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 do cluster .
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.
Exemplo
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.
Chave de shard composta
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" } )