Gerencias áreas de fragmentos
Nesta página
Em clusters de fragmentos, você pode criar zonas que representam um grupo de fragmentos e associar um ou mais intervalos de valores dechave de fragmento a essa zona. O MongoDB roteia leituras e gravações que se enquadram em um intervalo de zona apenas para os fragmentos dentro da zona.
Dica
Ao definir as zonas e as faixas de zonas antes de fragmentar uma collection vazia ou não existente, a operação de collection de shards cria chunks para as faixas de zonas definidas, bem como quaisquer chunks adicionais para cobrir todo a faixa dos valores da chave de shard e executa uma distribuição inicial de shards 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 dali para a frente.
Consulte Predefinir zonas e faixas de zona para uma collection vazia ou não existente para ver um exemplo.
Adicionar fragmentos a uma zona
Associar uma zona com um fragmento específico utilizando o método sh.addShardToZone()
quando conectado a uma instância do mongos
. Um único fragmento pode ter múltiplas zonas, e vários fragmentos também podem ter a mesma zona.
Exemplo
O exemplo a seguir adiciona a zona NYC
a dois fragmentos e as zonas SFO
e NRT
a um terceiro fragmento:
sh.addShardToZone("shard0000", "NYC") sh.addShardToZone("shard0001", "NYC") sh.addShardToZone("shard0002", "SFO") sh.addShardToZone("shard0002", "NRT")
Você pode remover a zona de um fragmento específico utilizando o método sh.removeShardFromZone()
quando conectado a uma instância do mongos
, como no exemplo seguinte, que remove a zona do NRT
de um fragmento:
sh.removeShardFromZone("shard0002", "NRT")
Crie um intervalo de zona
Para definir a faixa de chaves de shard da zona, use o método sh.updateZoneKeyRange()
quando conectado a uma instância do mongos
. As faixas de chaves de shard só podem ter uma zona atribuída. Não é possível sobrepor as faixas definidas.
Exemplo
Dada uma collection chamada users
no banco de dados de records
, fragmentada pelo campo zipcode
. As seguintes operações atribuem:
dois intervalos de códigos postais em Manhattan e Brooklyn na zona
NYC
um intervalo de códigos postais em São Francisco, na zona
SFO
sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC") sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
Observação
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.
Remover um intervalo de zona
Use o método do ajudante de shell sh.removeRangeFromZone()
para remover uma faixa de uma zona.
Exemplo
O exemplo a seguir remove a atribuição de NYC
zonas para o intervalo de códigos postais em Manhattan:
sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})
Observação
A eliminação de uma coleção exclui seus intervalos de zonas/tags associados.
Visualizar zonas existentes
Use sh.status()
para listar as zonas associadas a cada fragmento no cluster. Você também pode ver uma zona de shards consultando a collection shards
no banco de dados de config
.
O exemplo a seguir utiliza o método find()
para retornar todos os shards com a zona NYC
.
use config db.shards.find({ tags: "NYC" })
Você pode encontrar intervalos de zone para todos namespace na coleção tags
do config
banco de dados database. A saída de sh.status()
também exibe todos os intervalos de zona.
O exemplo seguinte utiliza o método find()
para retornar qualquer intervalo associado à zona NYC
.
use config db.tags.find({ tag: "NYC" })