updateZoneKeyRange
Definição
updateZoneKeyRange
The
updateZoneKeyRange
administrative command can either create or remove the association between a range of shard key values and a zona.You can run
updateZoneKeyRange
database command and its helperssh.updateZoneKeyRange()
andsh.addTagRange()
on an unsharded collection or a non-existing collection.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> } )
.You must run
addShardToZone
on the admin database.
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 | The namespace of the collection to associate with the range. The collection must be sharded for the command to succeed. |
| documento | O limite inferior inclusivo do intervalo de valores de chave de fragmento . Especifique cada campo da chave de fragmento na forma de To use hashed sharding, the field value of |
| documento | O limite superior exclusivo do intervalo de valores da chave de fragmento . Especifique cada campo da chave de fragmento na forma de To use hashed sharding, the field value of |
| string | The name of the zone to associate with the range bounded by the
If the value does not match an existing zone, the command fails. Specify |
Comportamento
If no zone range matches the minimum and maximum bounds passed to
updateZoneKeyRange
, nothing is removed.
Emita updateZoneKeyRange
somente quando conectado a uma instância mongos
.
mongosh
provides two helper methods:
sh.updateZoneKeyRange()
for adding a range of shard key values to a zone.sh.removeRangeFromZone()
for removing a range of shard key values from a zone.
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.
When removing the association between a range and a zone,
updateZoneKeyRange
does not remove the zone. Use the
removeShardFromZone
command to remove the association between a
zone and a 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.
For an example of defining zones and zone ranges for initial chunk distribution, see Predefinir zonas e faixas de zona para uma collection vazia ou inexistente.
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 .
For a more complete example of defining zones and zone ranges for initial chunk distribution on a compound hashed shard key, see Predefinir zonas e faixas de zona para uma collection vazia ou inexistente.
Balancer
After successfully running updateZoneKeyRange
, there may be chunk
migrations during the next balancer round.
After adding a range to a zone, the balancer must first run in order to migrate any chunks whose ranges are covered by the zone to shards inside of that zone. Until balancing completes, some chunks may reside on the wrong shard given the configured zones for the sharded cluster.
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 } )
While the range of { a : 0 }
and { a : 10 }
encompasses the existing
range, it is not an exact match and therefore updateZoneKeyRange
does not remove anything.
Chave de shard composta
Given a sharded collection exampledb.collection
with a shard key of { a
: 1, b : 1 }
, the following operation creates a range covering the lower
bound of { a: 1, b : 1 }
and an upper bound of { a : 10, b : 10}
and
associates it with the alpha
zone:
admin = db.getSiblingDB("admin") admin.runCommand( { updateZoneKeyRange : "exampledb.collection", min : { a : 1, b : 1 }, max : { a : 10, b : 10 }, zone : "alpha" } )