sharedCollection
Definição
shardCollection
Fragmenta uma collection para distribuir seus documentos entre shards. Você deve executar
enableSharding
em um banco de dados antes de executar o comandoshardCollection
. O comandoshardCollection
deve ser executado no banco de dadosadmin
.Para executar
shardCollection
, utilize o métododb.runCommand( { <command> } )
.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 recebe o seguinte formulário:
{ shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" } }
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
|
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.
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
Alterado na versão 3.4.
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
O mongos
usa "majority"
na preocupação de gravação do comando shardCollection
e seu auxiliar sh.shardCollection()
.
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 } } )