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

sh.shardCollection() (método mongosh)

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.

Observação

Alterado na versão 6.0.

A partir do MongoDB 6.0, a fragmentação de uma coleta não exige que você execute primeiro o método sh.enableSharding() para configurar o banco de dados.

Importante

Método mongosh

Esta página documenta um método.mongosh Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, 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.

sh.shardCollection() recebe 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.

Para o Legacy mongo Shell, você deve especificar explicitamente o valor para unique se especificar o options documento . nãomongosh exige unique quando você especifica o options documento.

options

documento

Opcional. Um documento contendo campos opcionais, incluindo collation.

O argumento options suporta as seguintes opções:

Parâmetro
Tipo
Descrição

collation

documento

Opcional. Se a coleta especificada para shardCollection tiver um agrupamento padrão, você deverá incluir um documento de agrupamento com``{ locale : "simple" }``, ou o comando shardCollection falhará. Pelo menos um dos índices cujos campos suportam o padrão de chave de fragmento 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 retorna um erro se alguma das seguintes afirmações for verdadeira:

documento

Opcional. Especifique esta opção para criar uma collection de séries temporais fragmentada.

Para fragmentar uma collection de séries temporais existente, omita este parâmetro.

Quando a collection especificada para shardCollection é uma collection de séries temporais e a opção timeseries não é especificada, o MongoDB usa os valores que definem a collection de séries temporais existente para preencher o campo timeseries.

Para obter uma sintaxe detalhada, consulte Opções de séries temporais.

Novidades na versão 5.1.

Para criar uma nova coleção de séries temporais fragmentada, especifique a opção de série sh.shardCollection() temporal para.

A opção de série temporal utiliza os seguintes campos:

Campo
Tipo
Descrição

timeField

string

Obrigatório. O nome do campo que contém a data em cada documento da série temporal. Os documentos em uma collection de séries temporais devem ter uma data BSON válida como o valor do timeField.

metaField

string

Opcional. O nome do campo que contém metadados em cada documento de série temporal. Os metadados no campo especificado devem ser dados utilizados para rotular uma série exclusiva de documentos. Os metadados raramente devem mudar. O nome do campo especificado não pode ser _id ou o mesmo que o timeseries.timeField. O campo pode ser de qualquer tipo de dados.

Embora o campo metaField seja opcional, o uso de metadados pode melhorar a otimização da query. Por exemplo, o MongoDB cria automaticamente um índice composto nos campos metaField e timeField para novas collections. Se você não fornecer um valor para este campo, os dados serão agrupados exclusivamente com base no tempo.

granularity

string

Opcional. Os valores possíveis são:

  • "seconds"

  • "minutes"

  • "hours"

Por padrão, o MongoDB define granularity como "seconds" para ingestão de alta frequência.

Defina manualmente o parâmetro granularity para melhorar o desempenho, otimizando a forma como os dados da collection de séries temporais são armazenados internamente. Para selecionar um valor para granularity, escolha a correspondência mais próxima do período entre as medições de entrada consecutivas.

Se você especificar timeseries.metaField, considere o período entre as medições de entrada consecutivas que têm o mesmo valor único para o campo metaField. As medições muitas vezes têm o mesmo valor exclusivo para o campo metaField se forem da mesma origem.

Se você não especificar timeseries.metaField, considere o período entre todas as medições inseridas na collection.

Se configurar o parâmetro granularity, você não poderá configurar os parâmetros bucketMaxSpanSeconds e bucketRoundingSeconds.

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

Esse comando não é suportado em clusters M0 e Flex. 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

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.

Ao fragmentar coleções de série temporal, você só pode especificar os seguintes campos na chave de fragmento:

  • O metaField

  • Subcampos de metaField

  • O timeField

Você pode especificar combinações desses campos na chave do fragmento. Nenhum outro campo, incluindo _id, é permitido no padrão da chave de fragmento.

Quando você especifica a chave de fragmento:

Dica

Evite especificar apenas o timeField como a chave de fragmento. Como o timeField aumenta monotonicamente, isso pode fazer com que todas as gravações apareçam em um único bloco dentro do cluster. Idealmente, os dados são distribuídos uniformemente entre os blocos.

Para saber como escolher melhor uma chave de fragmento, consulte:

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.

A operação de collection de fragmentos (ou seja, shardCollection o comando e o assistente) pode executar sh.shardCollection() a criação e a distribuição inicial de chunks para uma collection vazia ou inexistente se as zonas e as faixas de zona tiverem sido definidas para a collection. A distribuição inicial de blocos permite uma configuração mais rápida do zoneamento de fragmentação. Após a distribuição inicial, o balanceador gerenciará normalmente a distribuição de chunks daqui para a frente.

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.

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

Se especificar unique: true:

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.

Se a coleção tiver um agrupamento padrão, o comando deverá incluir sh.shardCollection() um collation parâmetro com o { locale: "simple" } valor. Para collections 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 shard.

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 para "majority" o preocupação de shardCollection gravação do comando, seu sh.shardCollection() assistente sh.shardAndDistributeCollection() e o método.

Ao executar o método, o balanceador começa a distribuir os dados da coleta para outros fragmentos no cluster. Um único shard só pode participar de uma migração de chunk por vez. Quando o MongoDB consegue copiar um intervalo de dados de um fragmento para outro, o intervalo no fragmento do doador é marcado para remoção pelo excluidor do intervalo. Este processo é lento e consome muitos sh.shardCollection() recursos.

A partir do MongoDB 8.0, se a sua implantação atender aos requisitos de recursos, é recomendado que você utilize o método sh.shardAndDistributeCollection() para fazer o fragmento da coleção. Este método envolve os comandos shardCollection e reshardCollection para criar fragmentos na coleção e recriá-los imediatamente na mesma chave. Isso faz com que o MongoDB reequilibrar os dados entre os fragmentos sem esperar no balanceador.

Para obter mais informações, consulte Refragmentar com a mesma chave de fragmento.

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 phonebook banco de dados possui uma contacts coleta sem agrupamento padrão. O exemplo a seguir usa para fragmentar sh.shardCollection() o phonebook.contacts com:

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