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

Dividir grupos em um cluster fragmentado

Normalmente, o MongoDB divide umchunk após uma inserção se o chunk exceder o tamanho máximo de chunk. No entanto, você pode dividir chunks manualmente se:

  • você tem uma grande quantidade de dados em seu cluster e muito poucos parte, como é o caso depois de distribuir um cluster usando dados existentes.

  • você espera adicionar uma grande quantidade de dados que inicialmente residiriam em uma única parte ou shard. Por exemplo, você planeja inserir uma grande quantidade de dados com valores de chave de fragmentação entre 300 e 400, mas todos os valores de suas chaves de fragmentação estão entre 250 e 500 estão em uma única parte.

Observação

O MongoDB fornece o comando mergeChunks para combinar faixas de chunks contíguas em um único chunk. Consulte Mesclar chunks em um cluster fragmentado para obter mais informações.

O balancer pode migrar chunks divididos recentemente para um novo shard imediatamente se a mudança beneficiar inserções futuras. O balancer não faz distinção entre chunks divididos manualmente e chunks divididos automaticamente pelo sistema.

Aviso

Tenha cuidado ao dividir dados em uma collection fragmentada para criar novos parte. Quando você fragmenta uma collection que tem dados existentes, o MongoDB cria automaticamente partes para distribuir uniformemente a collection. Para fazer a divisão dos dados de forma eficaz em um cluster fragmentado, você deve considerar o número de documento em uma parte e o tamanho médio do documento para criar um tamanho uniforme de parte. Quando as partes têm tamanhos irregulares, os fragmentos podem ter um número igual de partes, mas ter tamanhos de dados muito diferentes. Evite criar divisão que levem a uma collection com parte de tamanhos diferentes.

Use sh.status() para determinar as faixas atuais de partes no cluster.

Para dividir chunks manualmente, use o comando split com os campos middle ou find. mongosh fornece os métodos auxiliares sh.splitFind() e sh.splitAt().

splitFind() divide a parte que contém o primeiro documento retornado que corresponde a essa query em duas partes do mesmo tamanho. Você deve especificar o namespace completo (ou seja, "<database>.<collection>") da coleção fragmentada para splitFind(). A query em splitFind() não precisa usar a chave fragmentada, embora quase sempre faça sentido fazer isso.

Exemplo

O seguinte comando divide o chunk que contém o valor de 63109 para o campo zipcode na collection people do banco de dados records:

sh.splitFind( "records.people", { "zipcode": "63109" } )

Use splitAt() para dividir um chunk em dois, usando o documento consultado como o limite inferior no novo chunk:

Exemplo

O seguinte comando divide o bloco que contém o valor de 63109 para o campo zipcode na coleção people do banco de dados records.

sh.splitAt( "records.people", { "zipcode": "63109" } )

Observação

splitAt() não necessariamente divide o pedaço em dois pedaços de tamanhos iguais. A divisão ocorre no local do documento que corresponde à query, independentemente de onde esse documento esteja no bloco.

Dica

Veja também:

Voltar

Criar parte em um cluster fragmentado

Próximo

Mesclar grupos em um cluster fragmentado