Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

updateZoneKeyRange

Nesta página

  • Definição
  • Compatibilidade
  • 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 umazona .

Você pode executar o comando de banco de dados 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 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étodo db.runCommand( { <command> } ).

Você deve executar addShardToZone no banco de dados admin.

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

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.

Para usar a fragmentação hashed, o valor do campo de min 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.

Para usar a fragmentação hashed, o valor do campo de max 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:

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 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.

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:

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.

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 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.

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"
}
)

Voltar

unsetSharding