MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Coleção fragmentada do MongoDB não reequilibrada


No MongoDB, quando você vai para um sistema fragmentado e não vê nenhum balanceamento, pode ser uma das várias coisas.

  1. Você pode não ter dados suficientes para acionar o balanceamento. Essa definitivamente não era a sua situação, mas algumas pessoas podem não perceber que, com o tamanho padrão do bloco de 64 MB, pode demorar um pouco para inserir dados antes que haja o suficiente para dividir e equilibrar alguns deles com outros pedaços.

  2. O balanceador pode não estar em execução - já que suas outras coleções estavam sendo balanceadas, isso era improvável no seu caso, a menos que esta coleção tenha sido fragmentada por último depois que o balanceador foi interrompido por algum motivo.

  3. Os pedaços da sua coleção não podem ser movidos. Isso pode acontecer quando a chave de fragmentação não é granular o suficiente para dividir os dados em partes pequenas o suficiente. Acontece que esse foi o seu caso porque sua chave de fragmentação acabou não sendo granular o suficiente para essa coleção grande - você tem 105 partes (o que provavelmente corresponde ao número de valores únicos de job_id) e mais de 30 GB de dados. Quando os pedaços são muito grandes e o balanceador não pode movê-los, ele os marca como "jumbo" (para que não gire suas rodas tentando migrá-los).

Como se recuperar de uma má escolha de uma chave de fragmentação? Normalmente, é muito doloroso alterar a chave de fragmentação - como a chave de fragmentação é imutável, você precisa fazer o equivalente a uma migração de dados completa para colocá-la em uma coleção com outra chave de fragmentação. No entanto, no seu caso, a coleção ainda está em um fragmento, portanto, deve ser relativamente fácil "desfragmentar" a coleção e refragmentá-la com uma nova chave de fragmento. Como o número de job_ids é relativamente pequeno, eu recomendaria usar um índice regular para fragmentar job_id,customer_code, já que você provavelmente consulta isso e acho que é sempre definido no momento da criação do documento.