sh.shardCollection()
Nesta página
Definição
sh.shardCollection(namespace, key, unique, options)
Fragmenta uma coleção usando
key
como uma chave de fragmento. A chave de fragmento determina como o MongoDB distribui os documentos da coleção 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 de 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.
sh.shardCollection()
recebe os seguintes argumentos:ParâmetroTipoDescriçãonamespace
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 o valor do campo como:
"hashed"
para especificar uma chave de shard com hash.
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
booleanoOpcional. 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 paraunique
.options
documentoOpcional. Um documento contendo campos opcionais, incluindonumInitialChunks
ecollation
.O argumento
options
suporta as seguintes opções:ParâmetroTipoDescriçãonumInitialChunks
inteiroOpcional. 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 que8192
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 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.
Os intervalos de zonas definidos não atendem aos requisitos.
documentoOpcional. 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çãotimeseries
não é especificada, o MongoDB usa os valores que definem a collection de séries temporais existente para preencher o campotimeseries
.Para obter uma sintaxe detalhada, consulte Opções de séries temporais.
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 sh.shardCollection()
.
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 |
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 devem mudar raramente ou nunca. O nome do campo especificado não pode ser |
granularity | 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 |
Considerações
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.
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:
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 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.
Distribuição inicial de chunks 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.
Exclusividade
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.
Agrupamentos
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.
Escreva preocupação
mongos
usa "majority"
como a preocupação de gravação do comando shardCollection
e do seu auxiliar sh.shardCollection()
.
Exemplos
Uso simples
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 } )
Uso com opções
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:
uma chave de fragmento com hash no campo
last_name
,5
chunks iniciais, eum agrupamento de
simple
.
sh.shardCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )