Skip to main content

Introdução | MongoDB | Banco de dados

  • Introdução | MongoDB | Banco de dados

Dataset mongodb (DATABASE): 🔗 Clique aqui


Transação

danger

Transação é aceita apenas para o ambiente de ReplicaSet, ambientes standalone não é possível ter transação

ReplicaSet

  • docker network create mongoCluster
  • docker run -d --rm -p 27017:27017 --name mongo1 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo1
  • docker run -d --rm -p 27018:27017 --name mongo2 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo2
  • docker run -d --rm -p 27019:27017 --name mongo3 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo3

Initiate the Replica Set

  docker exec -it mongo1 mongosh --eval "rs.initiate({
_id: \"myReplicaSet\",
members: [
{_id: 0, host: \"mongo1\", priority: 1},
{_id: 1, host: \"mongo2\", priority: 0.5},
{_id: 2, host: \"mongo3\", priority: 0.5}
]
})"

Test and Verify the Replica Set

docker exec -it mongo1 mongosh --eval "rs.status()"

Artigo

Docs

Connection String

mongodb://rs-mongo1:27021,rs-mongo2:27022,rs-mongo3:27023/dbname?replicaSet=rs_mongodb

No MongoDB, que é um banco de dados NoSQL orientado a documentos, dois conceitos importantes para garantir escalabilidade e alta disponibilidade são Sharding e Replica Sets. Esses mecanismos são fundamentais para sistemas que precisam lidar com grandes volumes de dados e um alto número de operações por segundo. Vamos explorar cada um deles em detalhes.

Sharding e Replicaset

Sharding

Sharding é o processo de distribuição de dados através de múltiplos servidores ou instâncias de banco de dados. Em MongoDB, sharding é usado para suportar implantações com grandes conjuntos de dados e operações de alta taxa de transferência. Ao dividir o conjunto de dados e distribuí-lo entre vários servidores, um único banco de dados pode crescer além dos limites de um único servidor físico, evitando problemas de gargalo de E/S e utilização excessiva da CPU ou memória.

Como Funciona o Sharding?

  • Shards: Cada shard é uma instância MongoDB que armazena uma parte dos dados. Em um ambiente sharded, você terá vários shards, e cada shard pode ser um Replica Set (discutiremos Replica Sets em detalhes a seguir).

  • Mongos: O processo mongos atua como um query router, fornecendo uma interface unificada para o cliente se conectar ao cluster sharded. O mongos direciona as operações para o shard correto usando o metadata mantido em config servers.

  • Config Servers: Normalmente três servidores de configuração armazenam metadata sobre o cluster. Este metadata inclui informações sobre a configuração do cluster, bem como o mapeamento de intervalos de chaves shard (chamado de chunk) para os shards.

  • Chunks: Os dados em cada coleção são particionados em chunks. Um chunk é um intervalo de valores de chave de shard. O MongoDB divide os dados automaticamente em chunks baseados no shard key.

  • Shard Key: Uma chave de sharding (shard key) é um campo ou conjunto de campos escolhidos na coleção que o MongoDB usa para distribuir os dados entre shards. A escolha da shard key é crítica para o desempenho e balanceamento do cluster.

Benefícios do Sharding

  1. Escalabilidade Horizontal: Permite que o banco de dados cresça horizontalmente adicionando mais servidores.
  2. Distribuição de Carga: Distribui a carga de dados e tráfego por vários servidores, melhorando o desempenho.
  3. Failover: Usando shards que são Replica Sets, o MongoDB pode fornecer alta disponibilidade.

Desafios do Sharding

  1. Escolha da Shard Key: Uma shard key mal escolhida pode resultar em distribuição de carga desequilibrada (sharding não uniforme).
  2. Complexidade de Manutenção: O gerenciamento de um cluster sharded é mais complexo do que lidar com um MongoDB não sharded.

Replica Sets

Um Replica Set é um grupo de processos mongod que mantêm o mesmo conjunto de dados replicados de forma redundante. Replica Sets são a base da alta disponibilidade no MongoDB. Eles proporcionam redundância e aumentam a disponibilidade de dados através de replicação automática e failover.

Como Funciona um Replica Set?

  • Primário (Primary): O nó primário recebe todas as operações de escrita. O estado atual de um Replica Set tem exatamente um nó primário.

  • Secundários (Secondaries): Estes nós replicam o nó primário. Em um Replica Set, pode haver um ou mais nós secundários que mantêm cópias dos dados do nó primário.

  • Arbiter: Em alguns casos, um Replica Set pode incluir um arbiter. O arbiter não mantém uma cópia dos dados, mas pode participar na eleição de um novo primário se o atual falhar.

  • Eleição: Se o primário ficar indisponível, os secundários podem eleger um novo primário. O processo de eleição escolhe o secundário que está mais atualizado para se tornar o novo primário.

  • Oplog: Cada membro do Replica Set mantém um oplog (operation log), que é um log especial de todas as operações que modificam os dados. Os secundários usam o oplog do primário para replicar os dados.

Benefícios dos Replica Sets

  1. Alta Disponibilidade: Com Replica Sets, o MongoDB pode fornecer failover automático e recuperação de dados.
  2. Recuperação de Desastres: Se um servidor falhar, outros podem tomar o seu lugar sem perda de dados.
  3. Balanceamento de Leitura: Você pode distribuir as operações de leitura entre o primário e os secundários.

Desafios dos Replica Sets

  1. Latência de Replicação: Em redes com alta latência, a replicação pode atrasar.
  2. Design e Configuração: A configuração e manutenção de Replica Sets podem ser complexas, especialmente em grandes clusters.

Conclusão

Sharding e Replica Sets são fundamentais para escalar o MongoDB para grandes conjuntos de dados e muitas operações por segundo, mantendo a alta disponibilidade e a robustez. Sharding permite a escalabilidade horizontal distribuindo os dados, enquanto Replica Sets fornecem alta disponibilidade através da replicação de dados.

Para ambientes de produção que exigem alta performance e disponibilidade, usar ambos os mecanismos em conjunto é frequentemente a melhor prática. Assim, enquanto o sharding ajuda a gerenciar e escalar grandes volumes de dados, os Replica Sets garantem que esses dados estejam sempre disponíveis, mesmo em caso de falhas de hardware ou de rede.