MongoDB Fragmentação: tutorial passo a passo com exemplo
⚡ Resumo Inteligente
MongoDB O particionamento divide grandes conjuntos de dados em subconjuntos menores distribuídos por múltiplas instâncias. MongoDB instâncias, reduzindo a carga da CPU em qualquer servidor individual. Um cluster fragmentado combina fragmentos, um servidor de configuração e um roteador para dimensionar horizontalmente o armazenamento e a taxa de transferência de consultas.
O que é fragmentação MongoDB?
Sharding é um conceito em MongoDB, que divide grandes conjuntos de dados em pequenos conjuntos de dados em vários MongoDB instâncias.
Às vezes, os dados dentro MongoDB será tão grande que as consultas a conjuntos de dados tão volumosos podem causar uma alta utilização da CPU no servidor. Para lidar com essa situação, MongoDB tem um conceito de Sharding, que é basicamente a divisão de conjuntos de dados em vários MongoDB instâncias.
A coleção, que pode ser grande, na verdade é dividida em várias coleções, ou Fragmentos, como são chamadas. Logicamente, todos os fragmentos funcionam como uma única coleção.
Vantagens do sharding em MongoDB
Antes de implementar um cluster fragmentado, é útil entender por que as equipes adotam o particionamento. Os principais benefícios são:
- Escalabilidade horizontal: Os dados são distribuídos por vários servidores comuns, em vez de forçar uma única máquina a crescer cada vez mais.
- Maior rendimento: As operações de leitura e gravação são executadas em paralelo entre os shards, permitindo que o cluster processe mais solicitações por segundo.
- Maior capacidade de armazenamento: O disco combinado de todos os fragmentos pode armazenar conjuntos de dados muito maiores do que um único servidor poderia armazenar.
- Alta disponibilidade: Quando cada fragmento é implantado como um conjunto de réplicas, a falha de um único nó não derruba o cluster.
- Carga equilibrada: O MongoDB O balanceador redistribui automaticamente os blocos de dados para evitar que qualquer fragmento se torne um ponto de acesso frequente.
Em conjunto, essas vantagens fazem do particionamento a abordagem padrão para escalonamento. MongoDB além dos limites de um único servidor.
Como implementar fragmentação
Os shards são implementados usando clusters, que nada mais são do que um grupo de clusters. MongoDB instâncias.
Os componentes de um Fragmento incluem:
- Um fragmento – Isso é o básico, e isso nada mais é do que um MongoDB instância que contém o subconjunto dos dados. Em ambientes de produção, todos os fragmentos precisam fazer parte de conjuntos de réplicas.
- Servidor de configuração - Isto é um MongoDB instância que contém metadados sobre o cluster, basicamente informações sobre os vários MongoDB instâncias que irão armazenar os dados do fragmento.
- Um roteador - Isto é um MongoDB Instância que é basicamente responsável por redirecionar os comandos enviados pelo cliente para os servidores corretos.
Fragmentação passo a passo Cluster Exemplo
Passo 1) Crie um banco de dados separado para o servidor de configuração.
mkdir /data/configdb
Passo 2) Comece o MongoDB Instância em modo de configuração. Suponha que temos um servidor chamado Servidor D, que seria nosso servidor de configuração. Precisaríamos executar o comando abaixo para configurar o servidor como um servidor de configuração.
mongod --configdb ServerD:27019
Passo 3) Inicie a instância do mongos especificando o servidor de configuração.
mongos --configdb ServerD:27019
Passo 4) A partir do shell do MongoDB, conecte-se à instância do mongos.
mongo --host ServerD --port 27017
Passo 5) Se você tiver o Servidor A e o Servidor B que precisam ser adicionados ao cluster, execute os comandos abaixo.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Passo 6) Habilite o particionamento (sharding) para o banco de dados. Portanto, se precisarmos particionar o banco de dados Employeedb, execute o comando abaixo.
sh.enableSharding("Employeedb")
Passo 7) Habilite o particionamento (sharding) para a coleção. Portanto, se precisarmos particionar a coleção Employee, execute o comando abaixo.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Como escolher uma chave de fragmento em MongoDB
A chave de fragmentação é o campo indexado, ou conjunto de campos, que MongoDB A chave é usada para decidir em qual fragmento cada documento será armazenado. Como a chave determina a distribuição de dados, escolhê-la corretamente é a decisão mais importante em uma implementação fragmentada. Uma chave inadequada concentra dados e tráfego em um único fragmento, anulando os benefícios do particionamento.
Uma chave de fragmentação forte geralmente possui as seguintes características:
- Alta cardinalidade: O campo deve ter muitos valores possíveis para que os dados possam ser divididos em vários blocos menores e mais específicos.
- Baixa frequência: Nenhum valor isolado deve ser dominante, caso contrário os documentos que compartilham esse valor se acumulam em um único fragmento.
- Mudança não monotônica: Chaves que sempre aumentam, como timestamps, enviam cada nova gravação para o mesmo fragmento, criando um ponto de acesso crítico.
MongoDB O sistema suporta duas estratégias de particionamento baseadas na chave. O particionamento por intervalo divide os dados em intervalos contíguos e é adequado para consultas baseadas em intervalo, enquanto o particionamento por hash aplica uma função hash para distribuir as gravações uniformemente entre os shards. As equipes geralmente começam com o particionamento por hash quando as gravações são intensas e mudam para o particionamento por intervalo quando as leituras baseadas em intervalo predominam. Independentemente da estratégia escolhida, teste a chave com padrões de consulta realistas antes de confirmar, pois a chave de particionamento não pode ser alterada facilmente depois que os dados forem carregados.
Fragmentação versus Replicação em MongoDB
O particionamento (sharding) e a replicação são recursos complementares, porém distintos. A tabela abaixo destaca as diferenças para que você possa aplicar cada um corretamente. Na prática, clusters de produção utilizam ambos em conjunto.
| Aspecto | Sharding | réplica |
|---|---|---|
| Propósito | Aumente a escala horizontal dividindo os dados. | Proteja os dados e mantenha-os disponíveis. |
| Dados em cada nó | Um subconjunto (um fragmento) dos dados | Uma cópia completa dos dados |
| Benefício primário | Mais armazenamento e capacidade de transferência | Tolerância a falhas e escalonamento de leitura |
| Componentes chave | Fragmentos, servidor de configuração, roteador mongos | Membros primários e secundários |
Resumindo, o particionamento (sharding) atende à necessidade de escalabilidade, enquanto a replicação atende à necessidade de disponibilidade, e uma implementação robusta combina ambas.

