Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 46 – API JavaScript, Node.js e Express – Database Fundamentals – SQL vs NoSQL

Imagem destacada da aula de API

Introdução (3 min)

Imagine uma biblioteca. Você pode organizar os livros de duas maneiras principais: por categorias (ficção, não-ficção, etc.) em estantes numeradas, ou por palavras-chave em um enorme índice de fichas. A primeira opção é como um banco de dados SQL, estruturado e rígido. A segunda é como um banco de dados NoSQL, flexível e adaptável. Em APIs modernas, escolher a estrutura certa é vital para o desempenho e a escalabilidade.

Nesta aula, vamos explorar as diferenças entre SQL e NoSQL, com exemplos práticos em Node.js/Express. Você aprenderá a escolher o tipo de banco ideal para cada projeto, aplicando as melhores práticas da indústria.

No contexto Node.js/Express, a escolha do banco de dados influencia diretamente a performance das suas rotas e a eficiência do seu servidor, especialmente em ambientes como o HostGator Plano M.

Conceito Fundamental (7 min)

Bancos de dados SQL (Relational Database Management System) armazenam dados em tabelas com relações predefinidas entre elas, como uma planilha gigante. Utilizam a linguagem SQL (Structured Query Language) para manipular os dados. São excelentes para transações financeiras, onde a integridade dos dados é essencial. Exemplos: MySQL, PostgreSQL, SQL Server.

Bancos de dados NoSQL (Not Only SQL) oferecem maior flexibilidade, armazenando dados em formatos variados, como documentos, grafos ou pares chave-valor. São ideais para grandes volumes de dados não estruturados, comuns em redes sociais e aplicações de Big Data. Exemplos: MongoDB, Cassandra, Redis.

Vantagens do SQL: Integridade dos dados, transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade), maturidade e ampla documentação.

Desvantagens do SQL: Menos escalável horizontalmente, esquema rígido.

Vantagens do NoSQL: Alta escalabilidade, flexibilidade no esquema, performance em leitura/escrita para certos tipos de dados.

Desvantagens do NoSQL: Consistência eventual, menor maturidade em alguns casos.

A integração com Node.js/Express se dá através de drivers específicos, como o mysql para MySQL e o mongoose para MongoDB.

Implementação Prática (10 min)

Vamos simular a persistência de um usuário com ambos os paradigmas, sem conectar a um banco real por simplicidade. Focaremos na estrutura do dado e na lógica envolvida.

// Simulação de acesso a um banco SQL (sem conexão real)
const usuarioSQL = {
  id: 1,
  nome: 'João Silva',
  email: '[email protected]',
  // Outros campos...
};

// Simulação de uma query SQL function buscarUsuarioSQL(id) { // Simulação de busca no banco (em um cenário real, usaríamos uma biblioteca como 'mysql') if (usuarioSQL.id === id) { return usuarioSQL; } else { return null; // Simulando usuário não encontrado } }

// Simulação de acesso a um banco NoSQL (sem conexão real) const usuarioNoSQL = { _id: '64f42873a8b9c4d52f7b8a12', // Simulando um ObjectId do MongoDB nome: 'Maria Souza', email: '[email protected]', endereco: { rua: 'Rua Principal', numero: 123, }, // Flexibilidade do NoSQL: dados aninhados };

// Simulação de uma query NoSQL function buscarUsuarioNoSQL(id) { // Simulação de busca no banco (em um cenário real, usaríamos uma biblioteca como 'mongoose') if (usuarioNoSQL._id === id) { return usuarioNoSQL; } else { return null; } }

console.log(buscarUsuarioSQL(1)); console.log(buscarUsuarioNoSQL('64f42873a8b9c4d52f7b8a12'));

Exercício Hands-On (5 min)

Crie uma função que simule a atualização do email de um usuário, tanto em SQL quanto em NoSQL. Lembre-se de considerar a estrutura de dados de cada paradigma.

Solução:

function atualizarEmail(id, novoEmail, tipoBanco) {
  if (tipoBanco === 'SQL') {
    if (usuarioSQL.id === id) {
      usuarioSQL.email = novoEmail;
      return usuarioSQL;
    }
  } else if (tipoBanco === 'NoSQL') {
    if (usuarioNoSQL._id === id) {
      usuarioNoSQL.email = novoEmail;
      return usuarioNoSQL;
    }
  }

return null; // Usuário não encontrado ou tipo de banco inválido }

console.log(atualizarEmail(1, '[email protected]', 'SQL')); console.log(atualizarEmail('64f42873a8b9c4d52f7b8a12', '[email protected]', 'NoSQL'));

Para testar, chame a função atualizarEmail com diferentes IDs e emails. Valide se o objeto retornado reflete a alteração. Para próximos passos, explore as bibliotecas mysql e mongoose para interagir com bancos de dados reais.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas