Definição
shardCollectionShards a collection to distribute its documents across shards. The
shardCollectioncommand must be run against theadmindatabase.Dica
In
mongosh, this command can also be run through thesh.shardCollection()helper method.Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
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
To run shardCollection, use the db.runCommand( { <command> } ) method.
O comando tem o seguinte formato:
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, presplitHashedZones: <boolean>, collation: { locale: "simple" }, timeseries: <object> } )
Observação
Alterado na versão 6.0.
A partir do MongoDB 6.0, o compartilhamento de uma collection não exige que você execute primeiro o comando enableSharding para configurar o banco de dados.
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:
shard key must be supported by an index. Unless the collection is empty, the index must exist prior to the Consulte também Índices de chaves de shard |
| booleano | Especifique Você não pode especificar |
| documento | Opcional. Se a collection especificada para |
booleano | Opcional. Especifique
| |
objeto | Opcional. 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 For detailed syntax, see Time Series Options. Novidades na versão 5.1. |
Opções de séries temporais
Novidades na versão 5.1.
To create a new time series collection that is sharded, specify the timeseries option to shardCollection.
The timeseries option takes the following fields:
Campo | Tipo | Descrição |
|---|---|---|
| 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 AVISO: a partir do MongoDB 8.0, o uso do |
| 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 raramente devem mudar. O nome do campo especificado não pode ser Embora o campo |
| 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 Se configurar o parâmetro |
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.
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
metaFieldSubcampos de
metaFieldO
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:
metaFieldpode ser um:timeFielddeve 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:
Aviso
A partir do MongoDB 8.0, as chaves de fragmento que contêm timeField ficaram obsoletas para coleções de séries temporais.
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.
Refragmente para balancear
When you run the shardCollection command, the balancer begins distributing the collection data to other shards in the cluster. A single shard can only participate in one chunk migration at a time. When MongoDB succeeds in copying a range of data from one shard to another, the range on the donor shard is marked for removal by the range deleter. This process is slow and resource intensive.
Starting in MongoDB 8.0, se sua implantação atender aos requisitos de recursos, é recomendável usar o comando reshardCollection para executar esse balanceamento inicial de dados refragmentando para a mesma chave. Isso faz com que o MongoDB reequilibrar os dados entre os fragmentos sem esperar no balanceador.
Para utilizar o comando reshardCollection para executar o balanceamento inicial:
Use the
shardCollectioncommand to configure the collection as a sharded collection.Use o
reshardCollectionpara refragmentar na mesma chave de fragmento configurando a opçãoforceRedistributionparatrue. O MongoDB então equilibra os dados entre os fragmentos.
Para obter mais informações, consulte Refragmentar com a mesma chave de fragmento.
Fragmentação de zonas e distribuição inicial de chunks
The shard collection operation (i.e. shardCollection command and the sh.shardCollection() helper) can perform initial chunk creation and distribution for an empty or a non-existing collection if zones and zone ranges have been defined for the collection. Initial chunk distribution allows for a faster setup of zoned sharding. After the initial distribution, the balancer manages the chunk distribution going forward per usual.
Para fragmentar uma collection usando um índice hashed 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.
Consulte Predefinir zonas e faixas de zona para uma collection vazia ou não existente para ver um exemplo.
Exclusividade
Se especificar unique: true:
If the collection is empty,
shardCollectioncreates the unique index on the shard key if such an index does not already exist.If the collection is not empty, you must create the index first before using
shardCollection.If the collection has an index that supports the shard key but that index is not unique,
shardCollectionreturns an error.
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.
If you omit unique or specify unique: false, shardCollection doesn't change the collection's existing indexes. If a unique index on the shard key already exists, that index remains unique and the sharded cluster continues to enforce the uniqueness constraint on the shard key values across shards.
Consulte também Collection fragmentada e índices hashed.
Agrupamentos
If the collection has a default collation, the shardCollection command must include a collation parameter with the value { locale: "simple" }. For non-empty collections with a default collation, you must have at least one index with the simple collation whose fields support the shard key pattern.
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 uses "majority" for the write concern of the shardCollection command, its helper sh.shardCollection(), and the sh.shardAndDistributeCollection() method.
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 } } )