sharedCollection
Nesta página
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.shardCollection
tem o seguinte formato:{ shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" } } shardCollection
tem os seguintes campos:CampoTipoDescriçãoshardCollection
stringO namespace da collection para fragmentar no formato<database>.<collection>
.key
documentoO documento que especifica o campo ou campos a serem usados como a chave de shard.
{ <field1>: <1|"hashed">, ... }
Defina os valores do campo como:
"hashed"
para especificar uma hashed shard key.
A chave de fragmento deve ser suportada por um índice. A menos que a coleção esteja vazia, o índice deve existir antes do comando
shardCollection
. Se a coleção estiver vazia, o MongoDB criará o índice antes de fragmentar a coleção se o índice que pode suportar a chave de fragmentação ainda não existir.Consulte também Índices de chaves de shard
unique
booleanoEspecifique
true
para garantir que o índice subjacente imponha uma restrição exclusiva. O padrão éfalse
.Você não pode especificar
true
ao usar hashed shard keys.numInitialChunks
inteiroEspecifica 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.
numInitialChunks
deve resultar em menos de8192
por shard.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 partes pelas zonas do cluster.
Se fragmentar com presplitHashedZones: false ou omitido e não houver zona e faixa de zona para a coleção vazia, o MongoDB tentará distribuir uniformemente o número especificado de partes através dos fragmentos no cluster.
Se fragmentar com presplitHashedZones: false ou omitido e houver zonas e faixas de zona definidas para a coleção vazia,
numInitChunks
não terá efeito.
collation
documentoOpcional. Se a collection especificada parashardCollection
tiver um agrupamento padrão, você precisa incluir um documento de agrupamento com{ locale : "simple" }
, senão o comandoshardCollection
falha. Pelo menos um dos índices cujos campos suportam o padrão de chave de shard deve ter o agrupamento simples.booleanoOpcional. 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
compresplitHashedZones: true
retorna um erro se alguma das seguintes afirmações for verdadeira:A chave de shard não contém um campo hashed (ou seja, não é um índice hashed de campo único ou um índice hashed composto).
A collection não tem zonas ou faixas de zonas definidas.
As faixas de zona definidas não atendem aos requisitos.
Considerações
Usar
Não execute mais de um comando shardCollection
na mesma coleção ao mesmo tempo.
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.
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 } } )