sharedCollection
Definição
shardCollection
Fragmenta uma collection para distribuir seus documentos entre shards. O comando
shardCollection
deve ser executado no banco de dadosadmin
.Observação
Alterado na versão 6.0.
A partir do MongoDB 6.0, o compartilhamento de uma collection não exige que você execute primeiro o comando
enableSharding
para configurar o banco de dados.Dica
Em
mongosh
, esse comando também pode ser executado por meio do método auxiliarsh.shardCollection()
.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
Importante
Este comando não é suportado em instâncias sem servidor. 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
Sintaxe
Para executar shardCollection
, utilize o método db.runCommand( { <command> } )
.
O comando tem o seguinte formato:
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" }, timeseries: <object> } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
| string | O namespace da collection para fragmentar no formato |
| documento | O documento que especifica o campo ou campos a serem usados como a chave de shard.
Defina os valores 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 Consulte também Índices de chaves de shard |
| booleano | Especifique Você não pode especificar |
| inteiro | Especifica o número inicial de chunks para criar em todos os shards no cluster ao compartilhar uma collection vazia com uma hashed shard key. Em seguida, o MongoDB cria e equilibra os chunks no cluster. Se a collection não estiver vazia ou a chave de shard não contiver um campo hashed, a operação retornará um erro.
|
| documento | Opcional. Se a collection especificada para |
booleano | Opcional. Especifique
| |
objeto | 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 Para obter uma sintaxe detalhada, consulte Opções de séries temporais. Novidades na versão 5.1. |
Opções de séries temporais
Novidades na versão 5.1.
Para criar uma nova coleção de séries temporais que seja fragmentada, especifique a opção série temporal como shardCollection
.
A opção de série temporal usa os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
| 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 A partir do MongoDB 8.0, o uso de |
| 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 Embora o campo |
| string | Opcional. Os valores possíveis são:
Por padrão, o MongoDB define Defina manualmente o parâmetro Se você especificar Se você não especificar Se configurar o parâmetro |
Considerações
Chaves de fragmentação
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.
Chaves de shard em collections de séries temporais
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:
metaField
pode ser um:timeField
deve ser:Uma chave fragmentada de longo alcance
No final do padrão de 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:
A partir do MongoDB 8.0, o uso de timeField
como uma chave de fragmento em uma coleção de séries temporais será descontinuado.
Hashed shard keys
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.
Fragmentação de zonas e distribuição inicial de chunks
A operação de coleção de fragmentos (ou seja, o comando shardCollection
e o auxiliar sh.shardCollection()
) podem executar a criação e a distribuição inicial de partes para uma coleção vazia ou inexistente se as zonas e os 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 com hash composto, consulte Fragmentação por zona e índices hashed compostos.
Fragmentação por zona e índices hashed compostos
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.
Exclusividade
Se especificar unique: true
:
Se a coleção estiver vazia,
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
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.
Agrupamentos
Se a coleção tiver um agrupamento padrão, o comando 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.
Escreva preocupação
mongos
usa "majority"
para o preocupação de gravação do comando shardCollection
, seu assistente sh.shardCollection()
e o método sh.shardAndDistributeCollection()
.
Exemplo
A seguinte operação habilita a fragmentação para a collection people
no banco de dados de records
e utiliza o campo zipcode
como a chave de shard:
db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )