Fragmentar uma collection global
Nesta página
- Compartilhe uma coleção global de gravações globais na interface do usuário do Atlas
- Acesso necessário
- Considerações
- Procedimento
- Referência de fragmentação de cluster global
- Fragmentando coleções para gravações globais
- Error Handling
- Fragmentando coleções sem gravações globais
- Coleções não fragmentadas em clusters globais de gravação
Importante
Recurso Indisponível em Instâncias sem Servidor
Neste momento, as instâncias sem servidor não permitem essa funcionalidade. Para saber mais, consulte Limitações de instâncias sem servidor.
Compartilhe uma coleção global de gravações globais na interface do usuário do Atlas
Observação
As gravações globais só são suportadas em clusters globais, que exigem uma camada de cluster
M30+
.Você pode usar a UI do Atlas para fragmentar uma collection global somente para clusters globais com o Atlas-Managed Sharding ativado.
Este documento pressupõe conhecimento prévio da semântica de fragmentação. Leia a documentação sobre fragmentação antes de continuar com este tutorial.
Em clusters fragmentados, você pode criar zonas de dados fragmentados com base na chave fragmentada. Suas zonas podem segmentar dados com base na área geográfica. Para saber mais sobre fragmentação com base na área geográfica, consulte Segmentação de dados por localização.
A IU do Atlas permite a fragmentação de coleções de gravação global apenas para clusters globais que usam a fragmentação gerenciada pelo Atlas. Para fragmentar coleções que não sejam de gravação global ou coleções de gravação global que usam o fragmentação autogerenciada, você deve usar o mongosh
ou o código do aplicativo. Para saber mais, consulte Implantar um cluster fragmentado.
Acesso necessário
Você deve ter a função Project Owner
ou Organization Owner
no projeto Atlas do cluster para fragmentar uma coleção para gravações globais na UI do Atlas.
Considerações
Antes de iniciar este procedimento, revise:
Requisitos de compatibilidade para um Cluster Global.
Limites do Atlas para chaves de shard do cluster global.
Você pode configurar o Arquivo Online para mover os dados raramente acessados do seu agrupamento do Atlas para uma instância do banco de dados federado somente para leitura gerenciado pelo MongoDB em vez de compartilhar sua coleção ou atualizar sua camada de agrupamento. Para saber mais sobre o arquivo online, consulte Gerenciar arquivos online.
Depois de selecionar uma chave de shard por meio da interface do usuário do Atlas, o Atlas tenta fragmentar a coleção alvo. Durante esse período, certifique-se de que nenhum usuário fragmente manualmente a coleção. Se o Atlas detectar que a coleção de destino foi fragmentada com uma chave diferente da selecionada por meio da interface do usuário do Atlas, o Atlas interromperá o procedimento e exibirá um aviso para essa coleção na interface do usuário do Atlas. Você pode clicar em Unmanage Collection para limpar o aviso. Essa ação remove a coleção do gerenciamento do Atlas enquanto deixa a coleção subjacente e a chave de shard escolhida manualmente intactas.
Atualizar o valor da chave do shard
A partir do MongoDB 4.2, você pode atualizar o valor da chave de fragmento de um documento, a menos que o campo chave de fragmento seja o campo _id
imutável. Para saber mais, consulte Alterar o valor da chave de fragmento de um documento.
No MongoDB 4.0 e versões anteriores, não é possível atualizar o valor de um campo de chave de shard em um documento existente em uma coleção habilitada para Global Writes.
Importante
Valores-chave de shards e clusters globais
Em todas as versões do MongoDB, você não pode refragmentar uma coleção em um cluster global. Para saber mais, consulte Sharding Coleções for Global Writes.
Procedimento
Para fragmentar uma coleção em um cluster global:
No Atlas, váGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Vá para a página.<a class=\" \" href=\" \" title=\" \"><svg xmlns=\" \" width=\" \" height=\" \"Collections fill=\" \" viewbox=\" \" class=\" \" role=\" \" aria-label=\" \"><path fill=\" \" d=\" \"> <path fill=\" \" d=\" \">
Clique no botão Browse Collections para o seu cluster.
O Data Explorer é exibido.
Expanda Advanced Shard Key Configuration a seção para especificar como fragmentar a coleção.
Você pode escolher uma das seguintes opções:
Default | O Atlas usa o documento que especifica o campo ou campos como a chave de fragmento. |
Use unique index as the shard key | O Atlas usa o índice subjacente para impor uma restrição exclusiva à chave de shard da Coleção Global. |
Use hashed index as the shard key | O Atlas distribui os dados fragmentados uniformemente por meio do hash do segundo campo da chave fragmentada. Essa opção só está disponível para clusters do Atlas executando o MongoDB v5.0 ou posterior. Opcionalmente, você pode selecionar Pre-split data for even distribution para especificar se deseja executar a criação e a distribuição inicial de blocos para uma coleção vazia ou inexistente com base nas zonas e intervalos de zonas definidos para a coleção. Se você selecionar a opção Pre-split data for even distribution, também poderá especificar o número mínimo de partes a serem criados inicialmente ao fragmentar uma coleção vazia com uma chave de fragmento com hash. A distribuição inicial de fragmentos permite que o Atlas configure rapidamente a fragmentação por zonas. O número de partes que o Atlas cria depende do número de zonas que você define. Por padrão, o Atlas cria uma parte por código de localização e distribui partes uniformemente em todos os fragmentos. |
Para saber mais sobre essas opções, consulte Referência de Sharding de Cluster Global.
O Atlas exibe a chave de fragmento composta próxima à parte superior da guia Global Writes após configurar a coleção.
Referência de fragmentação de cluster global
As seções a seguir descrevem o comportamento de fragmentação e como habilitar a fragmentação para Gerenciar Clusters Globais.
Fragmentando coleções para gravações globais
Para clusters globais com fragmentação gerenciada pelo Atlas. coleções habilitadas e não fragmentadas devem atender aos seguintes requisitos de compatibilidade antes da fragmentação para usar gravações globais quando fragmentadas:
Cada documento na coleção deve incluir um campo
location
.O valor do
location
campo deve ser um ISO-3166-1 alfa 2 código de país ("US"
,"DE"
,"IN"
) ou um ISO-3166-2 compatível código de subdivisão ("US-DC"
,"DE-BE"
,"IN-DL"
). Documentos que não correspondam a esses critérios não podem ser roteados para nenhum shard no cluster. Para ver a lista completa de códigos de país ou subdivisão aceitos no momento, consulte https://cloud.mongodb.com/static/atlas/country_iso_codes.txt.
Ter uma chave de fragmento no campo location
já pode resultar em gargalos, especialmente para cargas de trabalho em que um subconjunto de países ou subdivisões recebe a maioria das operações de gravação. As gravações globais do Atlas exigem uma chave de fragmento composta para facilitar a distribuição eficiente de dados fragmentados no cluster. As chaves de fragmentação do Cluster Global do Atlas compartilham as mesmas restrições que as chaves de fragmentação MongoDB. As seguintes limitações do Cluster Global do Atlas se aplicam:
O primeiro campo da chave do fragmento composto deve ser
location
e não pode ser codificado em hash.Só pode haver um campo de chave de shard secundário em uma chave de shard composta.
O campo de chave de fragmento secundário de uma chave de fragmento composta pode ser criptografado.
O campo de chave de shard secundário não pode ser uma array.
Para saber mais sobre:
Escolhendo um campo de chave de fragmento secundário e o efeito das opções de chave de fragmento na distribuição de dados, consulte Escolhendo uma chave de fragmento.
Limitações de chave de fragmento, consulte Limitações de chave de fragmento.
Opções de fragmentação hasheada disponíveis, consulte Opções de fragmentação hasheada.
Importante
Alterando a chave de shard
Após a fragmentação, o que você pode modificar depende da versão do MongoDB que você executa:
Versão do MongoDB | Modificar chaves de chave de shard | Modificar valores-chave de shard |
---|---|---|
MongoDB 5.0 | Sim, adicione campos a uma chave usando apenas a interface do usuário do Atlas. | Sim |
MongoDB 6.0 | Sim, adicione campos a uma chave usando apenas a interface do usuário do Atlas. | Sim |
MongoDB 7.0 | Sim, adicione campos a uma chave usando apenas a interface do usuário do Atlas. | Sim |
Em todas as versões do MongoDB, não é possível fazer o reshard de uma coleção em um cluster global.
A IU do Atlas é compatível com a criação de coleções fragmentadas com validações específicas para Global Writes. Para saber mais, consulte Fragmentar uma coleção global para Global Writes na IU do Atlas.
Também é possível utilizar o mongosh
para executar o sh.shardCollection()
. Após fragmentar a coleção, você deve usar a IU do Atlas para habilitar gravações globais para essa coleção.
Aviso
Se você fragmentar uma collection que já tenha um índice do Atlas Search, poderá passar por um breve período de inatividade de query quando a coleção começar a aparecer em um fragmento. Além disso, se você adicionar um fragmento a uma coleção já fragmentada que contenha um índice do Atlas Search, suas pesquisas nessa coleção falharão até que o processo de initial sync seja concluído nos fragmentos adicionados. Para saber mais, consulte processo de sincronização inicial.
Para saber mais sobre a fragmentação de coleções por meio da IU do Atlas, consulte Fragmentar uma coleção global para gravações globais na IU do Atlas.
Opções de fragmentação com hash
As chaves de fragmentação usam fragmentação com hash e dados pré-divididos para distribuição uniforme. Isso só está disponível em clusters do Atlas executando o MongoDB 5.0 e posterior.
O Atlas distribui os dados fragmentados uniformemente fazendo o hashing do segundo campo da chave de fragmentação se você executar uma das seguintes ações:
Habilite o uso das chaves de fragmento de índice com hash selecionando Use hashed index as the shard key na IU do Atlas.
Defina
isCustomShardKeyHashed
por meio da API.
Opcionalmente, você pode especificar se deseja executar a criação e a distribuição inicial de blocos para uma coleção vazia ou inexistente. Esta ação é baseada nas zonas e intervalos de zonas definidos para a coleção. Para fazer isso, execute uma das seguintes ações:
Selecione Pre-split data for even distribution na IU do Atlas.
Configure o
presplitHashedZone
utilizando a API.
Quando você cria uma coleção fragmentada usando uma chave de fragmento com hash composta para clusters globais, o Atlas cria pelo menos 1 parte por código de localização e tenta distribuir as partes uniformemente entre os fragmentos no cluster.
Você também pode especificar o número mínimo de partes a serem criadas inicialmente ao fragmentar uma coleção vazia com uma chave de fragmento com hash usando a IU do Atlas ou definindo o parâmetro numInitialChunks
por meio da API.
Observação
Se você especificar o número de blocos por shard, o Atlas criará pelo menos o número mínimo de blocos que você especificou, com o mesmo número de blocos por código de localização. Se você especificar o número mínimo de blocos, o Atlas configurará a fragmentação por zonas rapidamente, especialmente se você já souber como distribuir geograficamente seus dados antes da fragmentação.
Error Handling
Se o Atlas encontrar um erro ao fragmentar uma coleção para gravações globais, será exibida uma mensagem no banner na parte superior da tela.
Clique em See Details para saber mais sobre o erro e o namespace onde ocorreu o erro. Uma janela modal é exibida com a mensagem de erro completa e um botão Fix Now.
Clique em Close e navegue até a coleção na UI do Atlas. Você também pode clicar no botão Fix Now para ir até a UI do Atlas para este cluster do Atlas.
Clique na guia Global Writes da coleção mencionada na mensagem de erro.
Clique em Unmanage Collection para cancelar a operação global de fragmentação de gravações. Você deve ter a role
Project Data Access Admin
para cancelar a operação de fragmentação.
Depois de fazer as alterações necessárias na coleção, conforme indicado pela mensagem de erro, você poderá iniciar o processo de sharding novamente.
Possíveis erros incluem:
- Já existe um índice na chave de shard personalizada.
- Se o campo escolhido como a segunda parte da chave do shard composto já estiver indexado, a operação de fragmentação poderá falhar.
- O campo-chave do shard não está presente.
- Todos os documentos da coleção devem conter os dois campos-de chave de fragmento. Esse erro ocorre apenas em versões anteriores ao MongoDB 5.0.
- A coleção já foi fragmentada.
- Se a coleção já tiver sido manualmente fragmentada, a operação falhará.
- A coleção tem um agrupamento padrão personalizado.
- Um agrupamento padrão personalizado na coleção pode causar um erro de fragmentação.
Operações de gravação de cluster global
Para cada documento em uma operação de gravação, o MongoDB usa o campo location
da chave do shard (se incluído) para determinar a zona para a qual encaminhar os dados. O MongoDB seleciona um shard associado a essa zona como o destino para a gravação do documento, facilitando o armazenamento de dados segmentados e isolados geograficamente.
Aviso
Se uma chave de shard não estiver incluída na operação de gravação ou uma chave de fragmento estiver incluída, mas o campo location
não estiver presente, a operação de gravação será bem-sucedida, mas os documentos resultantes não serão distribuídos.
O MongoDB pode garantir esse comportamento somente para documentos inseridos que atendam aos critérios definidos na página Fragmentação de coleções para gravações globais. Especificamente, o MongoDB pode rotear um documento cujo campo location
não esteja em conformidade com a norma ISO-3166-1 alpha 2 ou a norma ISO-3166-2 para qualquer fragmento no cluster.
Operações de leitura de cluster global
O roteamento de query do MongoDB depende de saber se a operação de leitura inclui a chave de fragmento completa e se o valor location
corresponde a um ISO-3166-1 alpha 2 suportado código de país ("US"
, "DE"
, "IN"
) ou um ISO-3166-2 código de subdivisão ("US-DC"
, "DE-BE"
, "IN-DL"
).
Para queries que incluem a chave de shard completa e cujo valor
location
atende aos requisitos de Gravações Globais, o MongoDB direciona a operação de leitura para a zona que mapeia para o valorlocation
ou valores especificados na query.Para operações de leitura que não incluem o valor
location
ou caso o valorlocation
não corresponda a um código de país suportado pela norma ISO-3166-1 alpha 2 ou não corresponda a um código de subdivisão previsto na norma ISO-3166-2, o MongoDB deve transmitir a operação de leitura para todas as zonas do cluster.Para zonas de gravações globais que têm nós Read-only em regiões geograficamente distantes, os clientes nessas regiões podem fazer query do nó Read-only local dessa zona especificando a chave de fragmento completa como parte da query e emitindo a operação de leitura com uma preferência de leitura de
nearest
.
Importante
As leituras secundárias podem retornar dados obsoletos, dependendo do nível de atraso de replicação entre o nó secundário e o primário.
Para saber mais, consulte as páginas Preferência de leitura no MongoDB e Roteamento de query no MongoDB.
Fragmentando coleções sem gravações globais
Os clusters de gravações globais oferecem suporte às mesmas estratégias de fragmentação à distância e com hash que um cluster fragmentado Atlas padrão. Para coleções fragmentadas cujas chaves de fragmento e esquema de documento não oferecem suporte a gravações globais, o MongoDB distribui os dados fragmentados uniformemente pelos fragmentos disponíveis no cluster em relação à chave de fragmento escolhida. Considere o uso de um cluster fragmentado separado para dados que não podem aproveitar as gravações globais.
Você não pode modificar uma coleção para oferecer suporte ao Global Writes após a fragmentação. Recomendamos que você escolha uma chave de fragmento que lhe permita usar as gravações globais para uma coleção no futuro.
Dica
Veja também:
Para saber mais sobre os requisitos de compartilhamento de Escrituras Globais, consulte Compartilhamento de Coleções de Escritórios Globais.
Coleções não fragmentadas em clusters globais de gravação
Os clusters globais oferecem o mesmo suporte para coleções não fragmentadas que um cluster fragmentado padrão do Atlas. Para cada banco de dados no cluster, o MongoDB armazena suas coleções não compartilhadas em um fragmento primário. Use sh.status()
do mongosh
para determinar o fragmento primário do banco de dados.