Definição
reshardCollectionNovidade na versĂŁo 5.0.
O comando altera a chave de fragmento de uma coleção e altera a distribuição de seus
reshardCollectiondados.Dica
In
mongosh, this command can also be run through thesh.reshardCollection()helper method.Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.
Compatibilidade
Esse comando está disponĂvel em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Observação
Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versĂŁo autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versĂŁo com cĂłdigo disponĂvel, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O comando tem a seguinte sintaxe:
db.runCommand( { reshardCollection: "<database>.<collection>", key: <shardkey>, unique: <boolean>, numInitialChunks: <integer>, collation: { locale: "simple" }, zones: [ { min: <document with same shape as shardkey>, max: <document with same shape as shardkey>, zone: <string> | null }, ... ] } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
|---|---|---|
| string | O namespace da collection a ser refragmentada. Assume o formato |
| documento | O documento que especifica o novo campo ou campos a serem usados como a chave de shard.
Defina os valores do campo como:
|
| booleano | Opcional. Especifique se há uma restrição de exclusividade na chave de shard. Somente |
| inteiro | Opcional. Especifica o número inicial de chunks para criar em todos os shards no cluster ao refragmentar uma collection. O padrão é o número de blocos que existem para a coleção sob o padrão de chave de shard atual. Em seguida, o MongoDB cria e equilibra os chunks no cluster. Se você ver o erro "A chave de shard fornecida não tem cardinalidade suficiente para criar o número necessário de blocos", refaça a coleta com um valor |
| documento | Opcional. Se a coleção especificada para |
| array | Opcional. Para manter ou adicionar zonas, especifique as zonas da sua collection em uma array. |
Considerações
As compilações de Ăndice que ocorrem durante a refragmentação podem falhar silenciosamente.
NĂŁo crie Ăndices durante o processo de refragmentação.
NĂŁo inicie o processo de refragmentação se houver construções de Ăndice em andamento.
Processo de refragmentação
Em uma operação de refragmentação de collection, um fragmento (shard) pode ser um:
doador, que atualmente armazena chunks para a coleção fragmentada.
receptor, que armazena novos chunks para a coleção fragmentada com base nas chaves de fragmento e nas zonas.
Um shard pode ser doador e um receptor ao mesmo tempo. O conjunto de shards do doador Ă© idĂŞntico aos shards do receptor, a menos que vocĂŞ use zonas.
O servidor de configuração primário é sempre o gerenciador de refragmentação e inicia cada fase da operação de refragmentação.
Fase de inicialização
Durante a fase de inicialização, o coordenador de refragmentação determina a nova distribuição de dados para a collection fragmentada.
Fase do Ăndice
Durante a fase de Ăndice:
Cada destinatário de fragmento cria uma nova coleção fragmentada vazia com as mesmas opções de coleção que a coleção fragmentada existente. Essa nova coleção fragmentada é o destino de onde os fragmentos do destinatário gravam os novos dados.
Cada destinatário de fragmento cria os novos Ăndices necessários. Isso inclui todos os Ăndices existentes na collection fragmentada e um Ăndice compatĂvel com o novo padrĂŁo de chave de shard, se esse Ăndice ainda nĂŁo existir na collection fragmentada.
Fase de clonagem, aplicação e recuperação
Durante a fase de clonagem, aplicação e recuperação:
Cada destinatário de shard clona uma cópia inicial dos documentos que possuiria sob a nova chave de shard.
Cada destinatário de shard começa a aplicar entradas de oplog de operações que aconteceram depois que o destinatário clonou os dados.
Quando a estimativa do tempo restante para concluir a operação de refragmentação é inferior a dois segundos, o coordenador de refragmentação bloqueia as gravações para a coleção.
Observação
Se desejar, você pode forçar manualmente a conclusão da operação de refragmentação emitindo o comando
commitReshardCollection. Isso Ă© Ăştil se a estimativa de tempo atual para concluir a operação de refragmentação for uma duração aceitável para que sua collection bloqueie gravações. O comandocommitReshardCollectionbloqueia as gravações antecipadamente e força a conclusĂŁo da operação de refragmentação. Durante o perĂodo de bloqueio das gravações, seu aplicativo experimenta um aumento na latĂŞncia.
Fase de confirmação
Depois que o processo de refragmentação atingir a fase de confirmação, ele não poderá mais ser abortado com
abortReshardCollection.Quando todos os shards tiverem atingido a consistência estrita, o coordenador de refragmentação confirma a operação de refragmentação e instala a nova tabela de roteamento.
O coordenador de refragmentação instrui cada primary shard doador e destinatário, de forma independente, a renomear a collection fragmentada temporária. A collection temporária torna-se a nova collection refragmentada.
Cada shard doador descarta a antiga coleção fragmentada.
Exemplo
Refragmentar uma collection
O exemplo a seguir refragmenta a coleta sales.orders com a nova chave de fragmento { order_id: 1 }:
db.adminCommand({ reshardCollection: "sales.orders", key: { order_id: 1 } })
O MongoDB retorna o seguinte:
{ ok: 1, '$clusterTime': { clusterTime: Timestamp(1, 1624887954), signature: { hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0), keyId: 0 } }, operationTime: Timestamp(1, 1624887947) }