reshardCollection
Nesta página
Definição
reshardCollection
Novidades na versão 5.0.
The
reshardCollection
command changes the shard key for a collection and changes the distribution of your data.Dica
Em
mongosh
, esse comando também pode ser executado por meio do método auxiliarsh.reshardCollection()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.
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 | The namespace of the collection to be resharded. Takes
the form |
| 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. |
| documento | Opcional. Se a coleção especificada para |
| array | Optional. To maintain or add zones, specify the zones for your collection in an array. |
Considerações
Index builds that occur during resharding might silently fail.
Do not create indexes during the resharding process.
Do not start the resharding process if there are ongoing index builds.
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
If desired, you can manually force the resharding operation to complete by issuing the
commitReshardCollection
command. This is useful if the current time estimate to complete the resharding operation is an acceptable duration for your collection to block writes. ThecommitReshardCollection
command blocks writes early and forces the resharding operation to complete. During the time period where writes are blocked your application experiences an increase in latency.
Fase de confirmação
Once the resharding process reaches the commit phase, it may no longer be aborted with
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 } })
MongoDB returns the following:
{ ok: 1, '$clusterTime': { clusterTime: Timestamp(1, 1624887954), signature: { hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0), keyId: 0 } }, operationTime: Timestamp(1, 1624887947) }