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

Zonas

Nesta página

  • Comportamento e operações

Em clusters fragmentados, você pode criar zonas de dados fragmentados com base na chave de shard. Você pode associar cada zona a um ou mais shards no cluster. Um shard pode se associar a qualquer número de zonas. Em um cluster balanceado, o MongoDB migra os chunks cobertos por uma zona somente para os shards associados à zona.

Veja alguns padrões de sistemas comuns onde zonas podem ser aplicadas:

  • Isole um subconjunto específico de dados em um conjunto específico de shards.

  • Garanta que os dados mais relevantes residam em shards geograficamente mais próximos dos servidores de aplicativos.

  • Direcione dados para os shards com base no hardware/desempenho do hardware do shard.

A imagem a seguir ilustra um cluster fragmentado com três fragmentos e duas zonas. A zona A representa um intervalo com um limite inferior de 1 e um limite superior de 10. A zona B representa um intervalo com um limite inferior de 10 e um limite superior de 20. Os fragmentos Alpha e Beta têm a zona A. O fragmento Beta também possui a zona B . O fragmento Charlie não tem zonas associadas a ele. O aglomerado está em estado constante e nenhum pedaço viola qualquer uma das zonas.

Diagrama de distribuição de dados baseado em zonas de um cluster fragmentado
clique para ampliar

Cada zona abrange uma ou mais faixas de valores de chave de shard para uma collection. Cada faixa coberta por uma zona sempre inclui seu limite inferior e exclui seu limite superior. As zonas não podem compartilhar as faixas, nem podem ter faixas sobrepostas.

Por exemplo, considere uma chave de shard no {"x": 1}. O cluster tem as seguintes faixas de zona:

{ "x" : 5 } --> { "x" : 10 } // Zone A
{ "x" : 10} --> { "x" : 20 } // Zone B
  • Um documento com um valor da chave de shard de 7 é encaminhado para a zona A.

  • Um documento com um valor da chave de shard de 10 é encaminhado para a zona B.

Para collections cuja chave de shard inclui um campo hashed, as faixas de zonas e a distribuição de dados nesse campo estão em valores hashed. A zona contém documentos cujo valor da chave de shard hashed está dentro da faixa definida. Uma faixa de zonas em um campo hashed não tem o mesmo comportamento previsível de roteamento de documentos que uma faixa de zonas em um campo sem hash.

Por exemplo, considere uma chave de shard no {"x" : "hashed"}. A faixa a seguir representa o intervalo com hash entre 5 e 10:

{ "x": NumberLong("4470791281878691347") } --> { "x": NumberLong("7766103514953448109") } // Zone A
  • Um documento com um valor de chave de shard de 1 é roteado para a Zona A, uma vez que o valor com hash de 1 se enquadrar na faixa definida.

  • Um documento com um valor de chave de shard de 15 é roteado para a Zona A, uma vez que o valor com hash de 15 se enquadrar na faixa definida.

  • Um documento com um valor da chave de shard de 8 não será roteado para a Zona A, pois o valor de hash de 8 não se enquadra no intervalo definido.

mongosh fornece o convertShardKeyToHashed() para computar o valor pós-hash do parâmetro especificado.

Um uso válido das faixas de zona em um campo com hash é restringir os dados para uma collection ao shard ou shards em uma única zona. Crie uma faixa de zona que abranja todo o intervalo dos possíveis valores de chave de shard com hash usando MinKey como limite inferior e MaxKey como limite superior.

Para definir as faixas, o MongoDB fornece o comando updateZoneKeyRange e os métodos auxiliares associados sh.updateZoneKeyRange() e sh.addShardTag().

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.

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

Alterado na versão 4.0.3: Ao definir as zonas e as faixas de zonas antes de fragmentar uma collection vazia ou inexistente, a operação de collection de fragmentação cria chunks para as faixas de zonas definidas, bem como quaisquer chunks adicionais para cobrir toda a faixa dos valores da chave de shard e executar uma distribuição inicial de chunks com base nas faixas de zonas. Essa criação e distribuição inicial de chunks permite uma configuração mais rápida da fragmentação por zonas. Após a distribuição inicial, o balancer gerenciará a distribuição de chunks.

O MongoDB oferece suporte para as collection de fragmentação em índices compostos com hash. Ao fragmentar uma collection vazia ou inexistente usando uma chave de fragmento com hash, aplicam-se requisitos adicionais para que o MongoDB execute a criação e a distribuição inicial da parte.

Consulte Predefinir zonas e faixas de zona para uma collection vazia ou inexistente para obter um exemplo.

Dica

Veja também:

O balancer tenta distribuir uniformemente os chunks de uma collection fragmentada em todos os shards do cluster.

Para cada chunk para migração, o balancer verifica cada shard de destino possível para qualquer zona configurada. Se a faixa do chunk se enquadrar em uma zona, o balancer migra o chunk para um shard dentro dessa zona. Os chunks que não se enquadram em uma zona podem existir em qualquer shard no cluster e são migrados normalmente.

Durante as rodadas de balanceamento, se o balancer detectar que qualquer chunk viola as zonas configuradas para um determinado shard, o balancer migra esses chunks para um shard onde não existe conflito.

Depois de associar uma zona a um shard ou shards e configurar a zona com uma faixa de chave de shard para uma coleção fragmentada, o cluster pode levar algum tempo para migrar os dados afetados para a coleção fragmentada. Isso depende da divisão de chunks e da distribuição atual de dados no cluster. Quando o balanceamento estiver concluído, as leituras e escritas de documentos em uma determinada zona serão roteadas apenas para o shard ou shards dentro dessa zona.

Uma vez configurado, o balancer respeita as zonas durante as futuras rodadas de balanceamento.

Você deve usar os campos contidos na chave de shard ao definir uma nova faixa para uma zona cobrir. Se estiver usando uma chave de shard composta, a faixa deve incluir o prefixo da chave de shard.

Por exemplo, dada uma chave de shard { a : 1, b : 1, c : 1 }, criar ou atualizar uma faixa para cobrir valores de b requer a inclusão de a como o prefixo. Criar ou atualizar uma faixa para cobrir valores de c requer a inclusão de a e b como o prefixo.

Não é possível criar faixas utilizando campos não incluídos na chave de shard. Por exemplo, se você quisesse usar zonas para dividir os dados com base na localização geográfica, a chave de shard precisaria do primeiro campo para conter os dados geográficos.

Ao escolher uma chave de shard para uma collection, considere quais campos você deseja utilizar para configurar as zonas. Consulte Escolher uma chave de shard para ver as considerações sobre como escolher uma chave de shard.

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

← Implementar um cluster fragmentado