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

Partição de dados com blocos

Nesta página

  • Blocos Iniciais
  • Tamanho do Intervalo
  • Migração de faixa
  • Blocos Indivisíveis/Jumbo

O MongoDB usa a chave de shard associada à collection para particionar os dados em chunks pertencentes a um shard específico. Um chunk consiste em uma range de dados fragmentados. Uma faixa pode ser uma parte do chunk ou todo o chunk. O balanceador migra dados entre shards. Cada chunk tem limites inferiores inclusivos e superiores exclusivos com base na chave de shard.

Diagrama do espaço de valor da chave de fragmentação segmentado em intervalos ou blocos.

A menor unidade de dados que um bloco pode representar é um único valor de chave de fragmento único.

  • A operação de fragmentação cria um bloco inicial grande para cobrir todos os valores chave de fragmento.

  • Após a criação do bloco inicial, o balanceador move intervalos para fora do bloco inicial quando precisa iniciar o balanceamento de dados.

  • Se você tiver zonas e faixas de zona definidas para uma collection vazia ou não existente.

    • A operação de fragmentação cria chunks vazios para as faixas de zonas definidas e chunks adicionais para cobrir toda a faixa de valores das chaves de shard e executa uma distribuição inicial de chunks com base nas faixas de zonas. A criação e distribuição inicial de chunks agiliza a configuração da fragmentação por zonas.

    • Após a distribuição inicial, o balancer passa a gerenciar a distribuição de chunks.

  • Se você não tiver zonas e intervalos de zonas definidos para uma collection vazia ou inexistente:

    • Para fragmentação com hash:

      • A operação de fragmentação cria chunks vazios para cobrir todo o intervalo dos valores de chave de fragmentação e executa uma distribuição inicial de chunk. Por padrão, a operação cria dois chunks por shard e migra pelo cluster. Você pode utilizar a opção numInitialChunks para especificar um número diferente de chunks iniciais. Esta criação e distribuição inicial de chunks permite uma configuração mais rápida de fragmentação.

      • Após a distribuição inicial, o balancer passa a gerenciar a distribuição de chunks.

    • Para fragmentação à distância:

      • A operação de fragmentação cria um único chunk vazio para cobrir todo o intervalo dos valores de chave de shard.

      • Após a criação inicial do chunk, o balanceador migra o chunk inicial através dos shards, conforme apropriado, bem como gerencia a distribuição do chunk daqui para frente.

Dica

Veja também:

O tamanho do intervalo padrão no MongoDB é 128 megabytes. Você pode aumentar ou reduzir o tamanho do bloco. Considere as implicações de alterar o tamanho padrão do bloco:

  1. Pequenas faixas levam a uma distribuição mais uniforme de dados às custas de migrações mais frequentes. Isto cria despesas na camada de roteamento de query (mongos).

  2. Grandes intervalos levam a menos migrações. Isso é mais eficiente tanto da perspectiva de rede e em termos de sobrecarga interna na camada de roteamento de query. Mas, estas eficiências ocorrem à custa de uma distribuição potencialmente desigual de dados.

  3. O tamanho do intervalo afeta o número máximo de documentos por intervalo a serem migrados.

Para muitos sistemas, faz sentido evitar migrações frequentes e potencialmente espúrias às custas de um definir um pouco menos uniformemente distribuído.

O MongoDB migra intervalos de dados em um cluster fragmentado para distribuir os dados de uma coleção fragmentada uniformemente entre os fragmentos. As migrações podem ser:

  • Manual. Utilize a migração manual apenas em casos limitados, como para distribuir dados durante inserções em massa. Consulte Migrando Blocos Manualmente para obter mais detalhes.

  • Automático. O processo do balanceador migra automaticamente os dados quando há uma distribuição desigual dos dados de uma coleção fragmentada entre os fragmentos. Consulte Limites de Migração para obter mais detalhes.

Para obter mais informações sobre o balanceador de cluster fragmentado, consulte Balanceador de cluster fragmentado.

O balanceador é um processo em segundo plano que gerencia migrações de dados. Se a diferença na quantidade de dados entre o maior e o menor fragmento exceder os limites de migração, o balanceador começará a migrar dados pelo cluster para garantir uma distribuição uniforme.

Diagrama de uma coleção distribuído em três fragmentos. Para esta coleção, a diferença no número de blocos entre os fragmentos atinge os *limites de migração* (neste caso, 2) e aciona a migração.

Você pode gerenciar certos aspectos do balanceador. O balanceador também respeita quaisquer zonas criadas como parte da configuração de zonas em um cluster fragmentado.

Consulte Balanceador de Cluster Fragmentado para obter mais informações sobre o balanceador.

Em alguns casos, os chunks podem crescer além do tamanho de chunk especificado, mas não podem ser divididos. O cenário mais comum é quando um chunk representa um valor chave de shard único. Como o chunk não pode ser dividido, ele continua a crescer além do tamanho do chunk, tornando-se um jumbo chunk. Esses jumbo chunks podem se tornar um gargalo de desempenho à medida que continuam crescendo, especialmente se o valor da chave de shard ocorrer com alta frequência.

A partir do MongoDB 5.0, você pode fazer o reshard de uma collection alterando a chave de shard de um document.

O MongoDB fornece o comando refineCollectionShardKey. O aperfeiçoamento da chave de fragmento em uma coleção garante uma distribuição mais precisa de dados e pode resolver problemas de chaves com baixa cardinalidade que causam o agrupamento excessivo de dados, conhecido como partes jumbo.

Para saber se você deve reestruturar sua collection ou refinar sua chave de shard, consulte Alterar uma chave de shard.

Para mais informações, veja:

← Distribuir coleções utilizando zonas