Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Criar faixas em um cluster fragmentado

Na maioria das situações, um cluster fragmentado criará, divisão e distribuirá intervalos automaticamente sem intervenção do usuário. No entanto, em alguns casos, o MongoDB não pode criar intervalos suficientes ou distribuir dados com rapidez suficiente para suportar a taxa de transferência necessária.

Por exemplo, se você quiser consumir um grande volume de dados em um cluster em que tenha inserções distribuídas entre fragmentos, a pré-divisão dos intervalos de uma coleção fragmentada vazia pode melhorar a taxa de transferência.

Observação

A partir do MongoDB 6.0, o balanceador não distribui faixas vazias. Para pré-dividir a coleção, use para distribuir os intervalos vazios entre os fragmentos no moveRange cluster. moveRange divide automaticamente a faixa a ser movida, o que significa que moveRange executa tanto a divisão quanto a movimentação. Você não precisa divisão manualmente o intervalo com split.

Como alternativa, ao definir as zonas e as faixas de zonas antes de fragmentar uma coleção vazia ou inexistente, a operação de coleção de fragmentos cria faixas para as faixas de zonas definidas, bem como quaisquer faixas adicionais para cobrir toda a faixa dos valores da chave de fragmento e executa uma distribuição da faixa inicial com base nas faixas da zona. Para obter mais informações, consulte Coleção vazia.

Aviso

Somente intervalos pré-divididos para uma coleção vazia. A divisão manual de intervalos para uma coleção preenchida pode levar a intervalos e tamanhos imprevisíveis, bem como a um comportamento de balanceamento ineficiente ou ineficaz.

O exemplo a seguir mostra como gerar e distribuir intervalos manualmente. O exemplo utiliza uma coleção no namespace sample.documents e fragmenta esta coleção no campo email.

1

Crie uma função para definir os intervalos de chaves de fragmento. Este exemplo cria intervalos com base em possíveis endereços de e-mail, pois o email será utilizado como a chave de shard.

// Generate two character prefix email ranges.function getRanges(shards) { let ranges = []; // The total number of prefix possibilities is 26 * 26 (aa to zz). // We calculate the number of combinations to add in a range. const totalCombinationsPerShard = 26 * 26 / shards.length; let minKey = { email: MinKey }; let maxKey = { email: MinKey }; for(let i = 1; i <= shards.length; ++i) { // 97 is lower case 'a' in ASCII. let prefix = 97 + ((totalCombinationsPerShard*i)/26); let suffix = 97 + ((totalCombinationsPerShard*i)%26); let initialChars = String.fromCharCode(prefix) + String.fromCharCode(suffix); minKey = maxKey; maxKey = { email: i !== shards.length ? initialChars : MaxKey }; ranges.push({ min: minKey, max: maxKey }); } return ranges;}
2

Para fragmentar a collection sample.documents, execute este comando:

db.adminCommand( { shardCollection: 'sample.documents', key: { email: 1 }} );

Observação

Como a collection está vazia, o comando shardCollection cria automaticamente um índice no campo email para suportar a chave de shard.

3

Para alocar os shards para os intervalos definidos na etapa 1, execute o seguinte comando:

const shards = db.adminCommand({ listShards: 1}).shards; let ranges = getRanges(shards); for (let i = 0; i < ranges.length; ++i) { db.adminCommand({ moveRange: 'sample.documents', min: ranges[i].min, max: ranges[i].max, toShard: shards[i]._id });}

O comando moveRange distribui os intervalos vazios entre os fragmentos no cluster. O cluster agora está otimizado para inserções em massa.

Para melhorar ainda mais o desempenho, crie índices adicionais para dar suporte às queries comuns do seu aplicativo.