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

Distribuir coleções utilizando zonas

Nesta página

  • Pré-requisitos
  • Cenário
  • Arquitetura
  • Zones
  • Chave de fragmento
  • Balancer
  • Passos
  • Adicione cada shard à zona apropriada.
  • Adicione intervalos de zona para as collection relevantes.
  • Fragmente as coleções.
  • Revise as alterações.
  • Saiba mais

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.

Você pode usar a fragmentação de zona para distribuir coleções em um cluster fragmentado e designar quais fragmentos armazenam dados para cada coleção. Você pode distribuir coleções com base nas propriedades do fragmento, como recursos físicos e memória disponível, para garantir que cada coleção seja armazenada no fragmento ideal para esses dados.

Para concluir este tutorial, você deve:

Você tem um banco de dados denominado shardDistributionDB que contém duas collections fragmentadas:

  • bigData, que contém uma grande quantidade de dados.

  • manyIndexes, que contém muitos índices grandes.

Você deseja limitar cada coleção a um subconjunto de fragmentos para que cada coleção possa usar os diferentes recursos físicos dos fragmentos.

O cluster fragmentado tem três fragmentos. Cada fragmento tem recursos físicos exclusivos:

Nome do fragmento
Recursos físicos
shard0
Alta capacidade de memória
shard1
Armazenamento instantâneo rápido
shard2
Alta capacidade de memória e armazenamento rápido

Para distribuir coleções com base em recursos físicos, use zonas de fragmento. Uma zona de fragmentos associa as coleções a um subconjunto específico de fragmentos, que restringe os fragmentos que armazenam os dados da coleção. Neste exemplo, você precisa de duas zonas de fragmento:

Nome da zona
Descrição
collection nesta zona
HI_RAM
Servidores com alta capacidade de memória.
As collections que exigem mais memória, como as collections com índices grandes, devem estar nos shards HI_RAM .
FLASH
Servidores com pendrives para velocidades de armazenamento elevadas.
Coleções grandes que exigem recuperação de dados rápida devem estar nos fragmentos FLASH .

Neste tutorial, a chave de shard que você usará para fragmentar cada collection é { _id: "hashed" }. Você configurará as zonas de fragmento antes de fragmentar as coleções. Como resultado, os dados de cada coleção só existem nos fragmentos na zona correspondente.

Com a fragmentação com hash, se você fragmentar as coleções antes de configurar as zonas, o MongoDB atribuirá os partes uniformemente entre todos os fragmentos quando a fragmentação estiver habilitada. Isso significa que as partes podem ser atribuídas temporariamente a um fragmento pouco adequado para lidar com os dados desse parte.

O balanceador migra os partes para o devido fragmento, respeitando as zonas configuradas. Quando o balanceamento estiver concluído, os fragmentos conterão apenas partes cujos intervalos correspondam à zona atribuídas.

Importante

Desempenho

Adicionar, remover ou alterar zonas ou faixas de zonas pode resultar em migrações de partes. Dependendo do tamanho do conjunto de dados e do número de partes que uma zona ou faixa de zonas afeta, essas migrações podem impactar o desempenho do cluster. Pense em executar o balanceador durante janelas agendadas específicas. Para saber como definir uma janela de agendamento, consulte Agendar a janela de balanceamento.

Use o procedimento a seguir para configurar zona de fragmentos e distribuir collection com base nos recursos físicos do fragmento.

1

Para configurar os shards em cada zona, utilize o comando addShardToZone .

Adicione shard0 e shard2 à zona HI_RAM:

sh.addShardToZone("shard0", "HI_RAM")
sh.addShardToZone("shard2", "HI_RAM")

Adicione shard1 e shard2 à zona FLASH:

sh.addShardToZone("shard1", "FLASH")
sh.addShardToZone("shard2", "FLASH")
2

Para associar uma faixa de chaves de shard a uma zona, use sh.updateZoneKeyRange().

Neste cenário, você deseja associar todos os documento em uma collection à zona apropriada. Para associar todos os documentos de collection a uma zona, especifique o seguinte intervalo de zona:

  • um limite inferior de { "_id" : MinKey }

  • um limite superior de { "_id" : MaxKey }

Para a coleção bigData, defina:

  • O namespace para shardDistributionDB.bigData,

  • O limite inferior para MinKey,

  • O limite superior para MaxKey,

  • A zona para FLASH

sh.updateZoneKeyRange(
"shardDistributionDB.bigData",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"FLASH"
)

Para a coleção manyIndexes, defina:

  • O namespace para shardDistributionDB.manyIndexes,

  • O limite inferior para MinKey,

  • O limite superior para MaxKey,

  • A zona para HI_RAM

sh.updateZoneKeyRange(
"shardDistributionDB.manyIndexes",
{ "_id" : MinKey },
{ "_id" : MaxKey },
"HI_RAM"
)
3

Para fragmentar ambas as coleções (bigData e manyIndexes), especifique uma chave de fragmento de { _id: "hashed" }.

Execute os seguintes comandos:

sh.shardCollection(
"shardDistributionDB.bigData", { _id: "hashed" }
)
sh.shardCollection(
"shardDistributionDB.manyIndexes", { _id: "hashed" }
)
4

Para visualizar a distribuição de partes e as zona de fragmento, utilize o método sh.status():

sh.status()

Na próxima vez que o balanceador for executado, ele dividirá os blocos quando necessário e migra os blocos entre os fragmentos, respeitando as zonas configuradas. O tempo que o balanceador leva para ser concluído depende de vários fatores, incluindo o número de shards, memória disponível e IOPS.

Quando o balanceamento terminar:

  • Parte para documento na collection manyIndexes residem em shard0 e shard2

  • Partes de documentos na coleção bigData residem em shard1 e shard2.

Para saber mais sobre fragmentação e balanceamento, consulte as seguintes páginas:

Voltar

Escritas locais distribuídas para volumes de trabalho somente de inserção