Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

reshardCollection (comando de banco de dados)

reshardCollection

Novidade na versĂŁo 5.0.

The reshardCollection command changes the shard key for a collection and changes the distribution of your data.

Dica

In mongosh, this command can also be run through the sh.reshardCollection() helper method.

Helper methods are convenient for mongosh users, 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.

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

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
},
...
]
}
)

O comando utiliza os seguintes campos:

Campo
Tipo
Descrição

reshardCollection

string

O namespace da collection a ser refragmentada. Assume o formato <database>.<collection>.

key

documento

O documento que especifica o novo campo ou campos a serem usados como a chave de shard.

{ <field1>: <1|"hashed">, ... }

Defina os valores do campo como:

unique

booleano

Opcional. Especifique se há uma restrição de exclusividade na chave de shard. Somente false é suportado. O padrão é false.

numInitialChunks

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. numInitialChunks deve resultar em menos de 8192 por shard.

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 numInitialChunks menor.

collation

documento

Opcional. Se a coleção especificada para reshardCollection tiver um agrupamento padrão, você precisa incluir um documento de agrupamento com { locale : "simple" }, senão o comando reshardCollection falha.

zones

array

Opcional. Para manter ou adicionar zonas, especifique as zonas da sua collection em uma array.

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.

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.

Durante a fase de inicialização, o coordenador de refragmentação determina a nova distribuição de dados para a collection fragmentada.

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.

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 comando commitReshardCollection bloqueia 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.

  • 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.

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)
}