Ative o balanceador e pré-divida os dados para resolver eficazmente os problemas em que a maior parte dos dados é gravada em um único shard (concentração de dados).
Ative o balanceador
Se o balanceador estiver desativado ou a janela configurada ainda não tiver começado, ative-o ou remova temporariamente a janela para iniciar o balanceamento de dados imediatamente.
Conecte-se à instância do cluster MongoDB com shards.
-
Na janela de comandos do nó mongos, mude para o banco de dados config.
use config -
Execute um dos comandos a seguir conforme a sua necessidade:
-
Ative o balanceador
sh.setBalancerState(true) -
Remova temporariamente a janela do balanceador
db.settings.updateOne( { _id : "balancer" }, { $unset : { activeWindow : true } } )
-
Pré-divisão
O MongoDB é compatível com sharding por intervalo e sharding com hash. A pré-divisão distribui os valores dos chunks entre vários nós de shard da forma mais uniforme possível, ajudando a balancear a carga durante a sincronização ou a migração de dados do DTS.
Sharding com hash
Use o parâmetro numInitialChunks para pré-dividir os dados de forma rápida e simples. O valor padrão é number of shards × 2 e o valor máximo é number of shards × 8192. Para mais informações, consulte sh.shardCollection().
sh.shardCollection("phonebook.contacts", { last_name: "hashed" }, false, {numInitialChunks: 16384})
Sharding por intervalo
Se o MongoDB source também usar uma arquitetura de cluster com shards, consulte os dados em
config.chunkspara obter os intervalos de chunks das coleções correspondentes. Em seguida, use esses intervalos como referência para o<split_value>nos comandos de pré-divisão subsequentes.-
Se o MongoDB source for um replica set, determine o intervalo específico da chave de shard e execute o comando
finde, em seguida, defina pontos de divisão adequados com base nesse intervalo.# Get the minimum value of the shard key db.<coll>.find().sort({<shardKey>:1}).limit(1) # Get the maximum value of the shard key db.<coll>.find().sort({<shardKey>:-1).limit(1)
Sintaxe do comando
O exemplo a seguir usa o comando splitAt. Para mais detalhes, consulte sh.splitAt(), sh.splitFind() e Dividir chunks em um cluster com shards.
sh.splitAt("<db>.<coll>", {"<shardKey>":<split_value>})
Exemplo
sh.splitAt("test.test", {"id":0})
sh.splitAt("test.test", {"id":50000})
sh.splitAt("test.test", {"id":75000})
Após concluir a pré-divisão, execute o comando sh.status() no nó mongos e verifique os resultados.