Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

sh.shardAndDistributeCollection()

Nesta página

  • Definição
  • Parâmetros
  • Considerações
  • Exemplos
  • Saiba mais
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() em mongosh tem o mesmo resultado que executar consecutivamente os comandos shardCollection e reshardCollection .

sh.shardAndDistributeCollection() recebe os seguintes parâmetros:

Parâmetro
Tipo
necessidade
Descrição
namespace
String
Obrigatório
O namespace da collection para fragmentar no formato "<database>.<collection>".
key
Documento
Obrigatório

O documento que especifica o campo ou campos a serem usados como a chave de shard.

{ <field1>: <1|"hashed">, ... }

Defina o valor do campo como:

  • 1 para fragmentação baseada em faixa

  • "hashed" para especificar uma chave de shard com hash.

    As chaves de shard devem ser suportadas por um índice. O índice deve existir antes de você executar o método shardAndDistributeCollection() .

Consulte também: Índices de chaves de fragmento

unique
Boolean
Opcional

Especifique true para garantir que o índice subjacente imponha uma restrição exclusiva. O padrão é false.

Ao usar hashed shard keys, você não pode especificar true.

options
Documento
Opcional
Um documento contendo campos opcionais, incluindo numInitialChunks e collation.

O argumento options suporta as seguintes opções:

Parâmetro
Tipo
Descrição
numInitialChunks
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 numInitialChunks deve resultar em menos de 8192 por shard. O padrão é 1000 chunks por fragmento.
collation
Documento
Se a collection especificada para shardAndDistributeCollection() tiver um agrupamento padrão, você precisa incluir um documento de agrupamento com { locale : "simple" }, senão o método shardAndDistributeCollection() falha.
presplitHashedZones
Boolean

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 .

shardAndDistributeCollection() com presplitHashedZones: true retorna um erro se alguma das seguintes afirmações for verdadeira:

timeseries
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 shardAndDistributeCollection é uma collection de séries temporais e a opção timeseries não é especificada, o MongoDB usa os valores que definem a collection de séries temporais existente para preencher o campo timeseries.

Para obter uma sintaxe detalhada, consulte Opções de séries temporais.

Os seguintes fatores podem impacto o desempenho ou a distribuição dos seus dados.

Embora você possa alterar sua chave de shard posteriormente, considere cuidadosamente sua escolha de chave de shard para otimizar a escalabilidade e o desempenho.

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:

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:

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.

Dica

Veja também:

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.

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.

Dica

Veja também:

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.

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.

mongos usa "majority" para o preocupação de gravação do comando shardCollection , seu sh.shardCollection() assistente e o método sh.shardAndDistributeCollection() .

Os exemplos seguintes mostram como você pode utilizar o método sh.shardAndDistributeCollection() com ou sem parâmetros opcionais.

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 } )

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:

sh.shardAndDistributeCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)

Voltar

sh.setBalancerState