Estou apenas confuso sobre como funcionam o Sharding e a Replication.
De acordo com as definições que encontrei na documentação:
Replicação: Um conjunto de réplicas no MongoDB é um grupo de processos mongod que mantêm o mesmo conjunto de dados.
Sharding: Sharding é um método para armazenar dados em várias máquinas.
De acordo com meu entendimento, se eu tiver 75 GB de dados, usando a replicação (3 servidores), ele armazenará 75 GB de dados em cada servidor significa 75 GB no Servidor-1, 75 GB no servidor-2 e 75 GB no servidor-3. (me corrija se eu estiver errado).
E usando o sharding, ele será armazenado como dados de 25 GB no servidor-1, dados de 25 GB no servidor-2 e dados de 25 GB no servidor-3. (Certo?).
Mas então eu encontrei esta linha no tutorial:
Os fragmentos armazenam os dados. Para fornecer alta disponibilidade e consistência de dados, em um cluster fragmentado de produção, cada fragmento é um conjunto de réplicas
Como um conjunto de réplicas tem 75 GB de tamanho, mas o shard tem 25 GB de tamanho, como eles podem ser equivalentes?
Isso me deixa bastante confuso. Acho que estou perdendo algo óbvio. Por favor me ajude com isso.
Um conjunto de réplicas significa que você tem várias instâncias do MongoDB que espelham todos os dados umas das outras. Um conjunto de réplicas consiste em um Mestre (também chamado de "Primário") e um ou mais Escravos (também conhecido como Secundário). As operações de leitura podem ser atendidas por qualquer escravo, portanto, você pode aumentar o desempenho de leitura adicionando mais escravos ao conjunto de réplicas (desde que seu aplicativo cliente seja capaz de usar membros de conjunto diferentes). Mas as operações de gravação sempre ocorrem no mestre do conjunto de réplicas e são propagadas para os escravos, portanto, as gravações não serão mais rápidas quando você adicionar mais escravos.
Os conjuntos de réplicas também oferecem tolerância a falhas. Quando um dos membros do conjunto de réplicas fica inativo, os outros assumem. Quando o mestre cair, os escravos elegerão um novo mestre. Por essa razão , sugere-se que a implantação produtiva sempre use o MongoDB como um conjunto de réplicas de pelo menos três servidores, dois deles contendo dados (o terceiro é um "árbitro" sem dados que é necessário para determinar um novo mestre quando um dos escravos cai).
Um cluster fragmentado significa que cada fragmento do cluster (que também pode ser um conjunto de réplicas) cuida de uma parte dos dados. Cada solicitação, tanto de leitura quanto de gravação, é atendida pelo cluster em que os dados residem. Isso significa que o desempenho de leitura e gravação pode ser aumentado adicionando mais shards a um cluster. Qual documento reside em qual estilhaço é determinado pela chave de estilhaço de cada coleção. Ele deve ser escolhido de forma que os dados possam ser distribuídos uniformemente em todos os clusters e que fique claro para as consultas mais comuns onde a chave de fragmentação reside (exemplo: quando você consulta com frequência por
user_name
, sua chave de fragmentação deve incluir o campouser_name
para que cada consulta possa ser delegada a apenas um fragmento que possui esse documento).A desvantagem é que a tolerância a falhas sofre. Quando um fragmento do cluster fica inativo, todos os dados nele ficam inacessíveis. Por esse motivo, cada membro do cluster também deve ser um conjunto de réplicas. Isso não é necessário. Quando você não se importa com a alta disponibilidade, um shard também pode ser uma única instância mongod sem replicação . Mas para uso em produção, você deve sempre usar replicação .
Então, o que isso significa para o seu exemplo?
Quando você deseja dividir seus dados de 75 GB em 3 fragmentos de 25 GB cada, você precisa de pelo menos 6 servidores de banco de dados organizados em três conjuntos de réplicas. Cada conjunto de réplicas consiste em dois servidores que possuem os mesmos 25 GB de dados.
Você também precisa de servidores para os árbitros dos três conjuntos de réplicas, bem como o roteador mongos e o servidor de configuração para o cluster. Os árbitros são muito leves e só são necessários quando um membro do conjunto de réplicas fica inativo, então eles geralmente podem compartilhar o mesmo hardware com outra coisa. Mas o roteador e o servidor de configuração Mongos devem ser redundantes e em seus próprios servidores.
Essas duas coisas podem empilhar, pois são diferentes. Usar ambos significa que você fragmentará seu conjunto de dados em vários grupos de réplicas. Dito de outra forma, você replica shards; um conjunto de dados sem shards é um único 'shard'.
Um cluster Mongo com três shards e 3 réplicas teria 9 nós.
Ao fragmentar , você divide sua coleção em várias partes.
Replicar seu banco de dados significa fazer espelhos de seu conjunto de dados.
Em termos de funcionalidade entregue. A fragmentação fornece escalabilidade e paralelismo. A replicação fornece disponibilidade