Menu Docs

sh.shardCollection()

sh.shardCollection(namespace, key, unique, options)

Fragmenta uma coleta usando key como chave de fragmento. A chave de fragmento determina como o MongoDB distribui os documentos da coleta entre os fragmentos.

O método { mongosh sh.shardCollection() encapsula o comando shardCollection .

Importante

Método mongosh

Esta página documenta um método mongosh. Esta não é a documentação para comandos de banco de dados nem drivers específicos de linguagem, como Node.js.

Para o comando do banco de dados, consulte o comando shardCollection.

Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.

O sh.shardCollection() utiliza os seguintes argumentos:

Parâmetro
Tipo
Descrição

namespace

string

O namespace da collection para fragmentar no formato "<database>.<collection>".

key

documento

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

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

Defina o valor do campo como:

a chave de fragmento deve ser suportada por um índice. A menos que a coleta esteja vazia, o índice deve existir antes do comando shardCollection. Se a coleta estiver vazia, o MongoDB criará o índice antes de fragmentar a coleta se o índice que pode suportar a chave de fragmentação ainda não existir.

Consulte também Índices de chaves de shard

unique

booleano

Opcional. Especifique true para garantir que o índice subjacente imponha uma restrição única. O padrão é false.

Você não pode especificar true ao usar hashed shard keys.

Se especificar o documento options, você deve especificar explicitamente o valor para unique.

options

documento

Opcional. Um documento contendo campos opcionais, incluindo numInitialChunks e collation.

O argumento options suporta as seguintes opções:

Parâmetro
Tipo
Descrição

numInitialChunks

inteiro

Opcional. Especifica o número mínimo de chunks a serem criados inicialmente ao fragmentar uma coleção vazia com uma chave fragmentada com hash. O MongoDB então cria e equilibra chunks no cluster. O parâmetro numInitialChunks deve ser menor que 8192 chunks por fragmentação. O padrão é 2 chunks por fragmento.

Se a collection não estiver vazia ou a chave de shard não contiver um campo hashed, a operação retornará um erro.

  • Se fragmentar com presplitHashedZones: true, o MongoDB tentará distribuir uniformemente o número especificado de chunks pelas zonas do cluster.

  • Se fragmentar com presplitHashedZones: false ou omitido e não houver zona e faixa de zona para a collection vazia, o MongoDB tentará distribuir uniformemente o número especificado de chunks através dos shards no cluster.

  • Se fragmentar com presplitHashedZones: false ou omitido e houver zonas e faixas de zona definidas para a collection vazia, numInitChunks não terá efeito.

collation

documento

Opcional. Se a collection especificada para shardCollection tiver um agrupamento padrão, você precisa incluir um documento de agrupamento com { locale : "simple" }, senão o comando shardCollection falha. Pelo menos um dos índices cujos campos suportam o padrão de chave de shard deve ter o agrupamento simples.

booleano

Opcional. Especifique true para executar a criação e distribuição inicial de chunks para uma collection vazia ou inexistente com base nas zonas e faixas de zonas definidas para a collection. Apenas para fragmentação hashed .

shardCollection() com presplitHashedZones: true retornará um erro se alguma das seguintes afirmações for verdadeira:

Esse método está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Importante

Este comando não é suportado em clusters M0, M2 e M5 . Para obter mais informações, 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

Uma vez que uma coleção tenha sido fragmentada, o MongoDB não fornece nenhum método para desfazer a fragmentação de uma coleção fragmentada.

Embora você possa alterar sua chave de shard posteriormente, é importante considerar cuidadosamente sua escolha de chave de shard para evitar problemas de escalabilidade e desempenho.

As hashed shard keys com índice hashed usam um índice hashed composto como a chave de shard.

Use o formato field: "hashed" para especificar um campo de hashed shard key.

Observação

Se as migrações de chunks estiverem em andamento durante a criação de uma collection de hashed shard keys, a distribuição inicial de chunks poderá ser desigual até que o balanceador equilibre automaticamente a collection.

Dica

Veja também:

A operação de coleção de fragmentos (ou seja, o comando O comando shardCollection e o auxiliar sh.shardCollection() podem executar a criação e distribuição de partes iniciais para uma coleção vazia ou inexistente se zonas e intervalos de zonas tiverem sido definidos para a coleção. A distribuição inicial de partes permite uma configuração mais rápida do zoneamento de fragmentação. Após a distribuição inicial, o balanceador passa a gerenciar a distribuição de partes como de costume.

Consulte Predefinir zonas e faixas de zona para uma collection vazia ou não existente para ver um exemplo.Se estiver fragmentando uma collection usando uma hashed shard key de faixa ou campo único, a opção numInitialChunks não terá efeito se zonas e faixas de zonas tiverem sido definidas para a collection vazia.

Para fragmentar uma coleção usando um índice composto hasheado, consulte Distribuição inicial de partes com índices compostos com hash.

MongoDB oferece suporte à fragmentação de coleção em índices compostos com hash. Ao fragmentar uma coleção vazia ou inexistente usando uma chave de fragmento composta com hash, aplicam-se requisitos adicionais para que o MongoDB execute a criação e a distribuição inicial da parte.

A opção numInitialChunks não tem efeito se zonas e faixas de zonas tiverem sido definidas para a coleção vazia, e preSplitHashedZones for false.

Consulte Predefinir zonas e faixas de zona para uma collection vazia ou não existente para ver um exemplo.

Dica

Veja também:

Se especificar unique: true:

  • Se a coleção estiver vazia, sh.shardCollection() criará o índice único na chave de fragmento se esse índice ainda não existir.

  • Se a coleção não estiver vazia, você deverá criar o índice antes de utilizar sh.shardCollection().

Embora possa existir um índice composto exclusivo onde a chave de fragmentação é um prefixo, se você utilizar o parâmetro unique, a collection deverá ter um índice exclusivo que esteja na chave de fragmentação.

Consulte também Collection fragmentada e índices hashed.

Alterado na versão 3.4.

Se a coleção tiver um agrupamento padrão, o comando sh.shardCollection() precisa incluir um parâmetro collation com o valor { locale: "simple" }. Para coleções não vazias com um agrupamento padrão, você deve ter pelo menos um índice com o agrupamento simples cujos campos ofereçam suporte ao padrão da chave de fragmento.

Você não precisa especificar a opção collation para collections sem agrupamento. Se você especificar a opção de agrupamento para uma coleção sem agrupamento, ela não terá efeito.

mongos usa "majority" como a preocupação de gravação do comando shardCollection e do seu auxiliar sh.shardCollection().

Com uma coleção denominada people em um banco de dados denominada records, o seguinte comando fragmenta a coleção pelo campo zipcode:

sh.shardCollection("records.people", { zipcode: 1 } )

O banco de dados phonebook possui uma coleção contacts sem agrupamento padrão. O exemplo a seguir usa sh.shardCollection() para fragmentar o phonebook.contacts com:

sh.shardCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)