Menu Docs

reshardCollection

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 auxiliar sh.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.

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

The namespace of the collection to be resharded. Takes the form <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.

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

Optional. To maintain or add zones, specify the zones for your collection in an array.

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.

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

    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. The commitReshardCollection 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.

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

    Dica

    Veja também:

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

Dica

Veja também: