O MongoDB usa a chave de fragmento associada à coleção para particionar os dados em partes pertencentes a um fragmento específico. Uma parte consiste em uma faixa de dados fragmentados. Cada parte tem limites inferiores inclusivos e superiores exclusivos com base na chave de fragmento.
A menor unidade de dados que um bloco pode representar é um único valor de chave de fragmento único.
Blocos Iniciais
Coleção Preenchida
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.
Collection Vazia
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 zona 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 zona . 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 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
numInitialChunkspara 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 e gerencia a distribuição do chunk daqui para frente.
Tamanho do Intervalo
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:
Pequenas faixas levam a uma distribuição mais uniforme de dados às custas de migrações mais frequentes, o que adiciona sobrecarga na camada de roteamento de query ( ).
mongosGrandes intervalos levam a menos migrações, reduzindo a rede e a sobrecarga interna na camada de roteamento de query, mas podem resultar em uma distribuição desigual de dados.
O tamanho do intervalo afeta o número máximo de documentos por intervalo a serem migrados.
Para a maioria dos sistemas, uma distribuição de dados ligeiramente desigual é preferível a migrações frequentes.
Migração de faixa
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.
Equilíbrio
O balanceador é um processo em segundo plano que gerencia migrações de dados. Se o desequilíbrio de dados entre o maior e o menor fragmento exceder os limites de migração, o balanceador começará a migrar dados pelo cluster.
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.
Blocos Indivisíveis/Jumbo
Os chunks que crescem além do tamanho de bloco especificado, mas não podem ser divisão são chamados de chunks jumbo. A causa mais comum é quando um chunk representa um valor chave de shard único. Os chunks jumbo podem se tornar um gargalo de desempenho, 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 refineCollectionShardKey comando permite uma distribuição de dados mais refinada e pode resolver jumbo chunks causados por cardinalidade insuficiente da chave de shard.
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: