sh.shardAndDistributeCollection()
Definição
sh.shardAndDistributeCollection(namespace, key, unique, options)
Fragmenta uma collection e redistribui imediatamente os dados usando achave de shard fornecida. A redistribuição imediata de dados permite uma movimentação de dados mais rápida e um impacto reduzido nos volumes de trabalho.
Importante
Método mongosh
Esta página documenta um método
mongosh
. Esta não é a documentação de um driver de idioma específico, como Node.js.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Executar
sh.shardAndDistributeCollection()
emmongosh
tem o mesmo resultado que executar consecutivamente os comandosshardCollection
ereshardCollection
.
Parâmetros
sh.shardAndDistributeCollection()
recebe os seguintes parâmetros:
Parâmetro | Tipo | necessidade | Descrição |
---|---|---|---|
| String | Obrigatório | O namespace da collection para fragmentar no formato |
| Documento | Obrigatório | O documento que especifica o campo ou campos a serem usados como a chave de shard.
Defina o valor do campo como:
Consulte também: Índices de chaves de fragmento |
| Boolean | Opcional | Especifique Ao usar hashed shard keys, você não pode especificar |
| Documento | Opcional | Um documento contendo campos opcionais, incluindo |
O argumento options
suporta as seguintes opções:
Parâmetro | Tipo | Descrição |
---|---|---|
| Inteiro | Especifica o número inicial de chunks para criar em todos os shards no cluster ao fragmentar e refragmentar uma collection. O MongoDB então cria e equilibra chunks no cluster. O parâmetro |
| Documento | Se a collection especificada para |
| Boolean | Especifique
|
| Documento | Especifique esta opção para criar uma coleção 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. |
Considerações
Os seguintes fatores podem impacto o desempenho ou a distribuição dos seus dados.
Chaves de fragmentação
Embora você possa alterar sua chave de shard posteriormente, considere cuidadosamente sua escolha de chave de shard para otimizar a escalabilidade e o 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.
Para especificar um campo de chave de fragmento com hash , use field: "hashed"
.
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 recolha de fragmentos (ou seja, shardCollection
e o assistente sh.shardCollection()
) podem executar a criação e a distribuição inicial de chunks para uma collection vazia ou inexistente se as zonas e as zona de zonas 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 obter um exemplo, consulte Pre-definir zonas e faixas de zona para uma collection vazia ou não existente. Ao fragmentar uma collection usando uma chave de fragmento com hash de campo único , a opção numInitialChunks
não terá efeito se as zonas e as faixas de zona tiverem sido definidas para a collection vazia.
Para fragmentar uma coleção usando um índice composto hasheado, consulte Distribuição inicial de chunks 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 zona tiverem sido definidas para a collection vazia, e preSplitHashedZones for false
.
Para obter um exemplo, consulte Pre-definir zonas e faixas de zona para uma collection vazia ou não existente.
Exclusividade
Se você especificar unique: true
, deverá criar o índice antes de usar sh.shardAndDistributeCollection()
.
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 único que esteja na chave de fragmentação.
Agrupamentos
Se a collection tiver um agrupamento padrão , o comando sh.shardAndDistributeCollection
deverá incluir um parâmetro collation
com o valor { locale: "simple" }
. 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.
Escreva preocupação
mongos
usa "majority"
para o preocupação de gravação do comando shardCollection
, seu sh.shardCollection()
assistente e o método sh.shardAndDistributeCollection()
.
Exemplos
Os exemplos seguintes mostram como você pode utilizar o método sh.shardAndDistributeCollection()
com ou sem parâmetros opcionais.
Uso simples
Um banco de dados de dados denominado records
contém uma coleção denominada people
. O comando a seguir fragmenta a coleta pelo campo zipcode
e redistribui imediatamente os dados na coleta records.people
:
sh.shardAndDistributeCollection("records.people", { zipcode: 1 } )
Uso com opções
O banco de banco de dados phonebook
tem uma coleção contacts
sem agrupamento padrão. O exemplo a seguir usa sh.shardAndDistributeCollection()
para fragmentar e redistribuir a coleção phonebook.contacts
com:
Uma chave de shard com hash no campo
last_name
.5
chunks iniciais.simple
Agrupamento.
sh.shardAndDistributeCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )