O que e um banco de dados relacional?

SQL organiza dados em tabelas com esquema fixo e relacionamentos explícitos.

Bancos relacionais armazenam dados em tabelas compostas por linhas e colunas. Cada tabela representa uma entidade, como usuário ou pedido, e os relacionamentos entre entidades são expressos por chaves estrangeiras. O esquema e definido antes de inserir dados e precisa ser seguido rigidamente. PostgreSQL, MySQL e SQL Server são os exemplos mais usados. Esses bancos oferecem suporte completo a ACID, atomicidade, consistência, isolamento e durabilidade, tornando-os ideais para aplicações onde a integridade dos dados e crítica, como sistemas financeiros, ERP e plataformas de e-commerce com transações complexas.

O que e um banco de dados NoSQL?

NoSQL agrupa diferentes tipos de bancos que não seguem o modelo relacional.

NoSQL não e um único tipo de banco, e uma categoria que engloba quatro familias principais: documentos, chave-valor, colunar e grafo. MongoDB armazena documentos JSON sem esquema fixo. Redis e um banco chave-valor ultra-rápido em memória. Cassandra e colunar, otimizado para escrita em alta escala. Neo4j e um banco de grafos para relacionamentos complexos. A flexibilidade de esquema e a capacidade de escalar horizontalmente com facilidade são as principais vantagens. Cada familia e projetada para um tipo específico de problema, e escolher a certa e tao importante quanto escolher entre SQL e NoSQL.

ACID vs BASE

SQL prioriza consistência forte; NoSQL frequentemente aceita consistência eventual.

ACID garante que cada transação seja atômica, consistente, isolada e durável. Isso significa que um pagamento ou nunca acontece ou acontece completamente, sem estados intermediários visíveis. BASE, Basically Available, Soft state, Eventually consistent, e o modelo adotado por muitos bancos NoSQL para ganhar escala e disponibilidade. Em um sistema BASE, uma escrita pode não ser imediatamente visível em todos os nos. Para a maioria das aplicações isso e aceitável, mas para transações financeiras ou sistemas críticos, ACID e inegociável. Entender esse trade-off e a primeira decisão ao escolher um banco de dados.

O Teorema CAP

Um sistema distribuído só pode garantir duas das tres propriedades: Consistência, Disponibilidade e Tolerância.

O Teorema CAP, enunciado por Eric Brewer, afirma que em um sistema distribuído e impossível garantir simultaneamente Consistência, Disponibilidade e Tolerância a Partição. Tolerância a Partição e obrigatória em qualquer sistema real na internet, pois falhas de rede acontecem. Isso significa que a escolha real e entre consistência e disponibilidade. Bancos como PostgreSQL escolhem consistência. Bancos como Cassandra e DynamoDB escolhem disponibilidade com consistência eventual. Saber onde seu sistema se encaixa nesse espectro ajuda a escolher a tecnologia certa e a definir os SLAs corretos para os usuários finais.

Quando usar banco relacional

SQL e a escolha certa para dados estruturados, transações e relatorios complexos.

Bancos relacionais brilham quando os dados tem estrutura bem definida e estável, quando existem relacionamentos entre entidades que precisam ser consultados com joins, quando transações atomicas são críticas, como em pagamentos ou reservas, e quando relatorios complexos com agregações são frequentes. Sistemas ERP, bancários, de saude e de gestão de pedidos são exemplos clássicos. O SQL como linguagem de consulta e extremamente poderoso para esse tipo de análise. Ferramentas de BI se integram nativamente com bancos relacionais. Para a maioria das aplicações corporativas tradicionais, PostgreSQL ou MySQL continuam sendo a escolha mais segura e produtiva.

Quando usar banco NoSQL

NoSQL escala melhor para alta carga, schema variável e dados não estruturados.

NoSQL e a escolha certa quando o volume de dados cresce rapidamente e o schema muda com frequência, como em catálogo de produtos com atributos variáveis. Também e ideal quando a latência precisa ser mínima, Redis para cache e sessões, ou quando os dados não tem estrutura definida, como logs de eventos ou dados de sensores IoT. Aplicações que precisam escalar horizontalmente para milhões de usuários, como redes sociais ou sistemas de recomendação, se beneficiam de bancos como Cassandra ou DynamoDB. O segredo e entender o padrão de acesso: como os dados serao escritos e lidos, e em que volume.

Tipos de bancos NoSQL na prática

Cada familia NoSQL resolve um problema específico de forma otimizada.

Banco de documentos como MongoDB armazena objetos JSON aninhados, ótimo para perfis de usuário, carrinho de compras e CMSs. Banco chave-valor como Redis armazena pares simples em memória, ideal para cache, sessões e filas. Banco colunar como Cassandra e otimizado para escrita massiva e consulta por intervalo de tempo, usado em métricas, IoT e logs. Banco de grafos como Neo4j armazena nodes e arestas, perfeito para redes sociais, recomendações e detecção de fraude. Nenhum substitui o outro: cada um e excelente no seu dominio e mediocre fora dele.

Polyglot persistence

Sistemas modernos usam múltiplos bancos, cada um no papel certo.

Polyglot persistence e a prática de usar diferentes bancos de dados em diferentes partes do mesmo sistema, escolhendo cada um com base no problema que resolve melhor. Um e-commerce pode usar PostgreSQL para pedidos e pagamentos, MongoDB para catálogo de produtos, Redis para cache de sessão e carrinho, Elasticsearch para busca de produtos e Cassandra para logs de eventos. Isso não e complexidade desnecessária, e pragmatismo. A chave e não tentar resolver tudo com um único banco só porque e mais fácil de gerenciar. O custo de operar múltiplos bancos diminui com serviços gerenciados na nuvem como AWS RDS, DocumentDB, ElastiCache e DynamoDB.

Exemplos reais

Como grandes sistemas combinam SQL e NoSQL na produção.

O Instagram usa PostgreSQL para dados de usuário e relacionamentos sociais, e Cassandra para o feed de atividades que precisa escalar para bilhões de escritas. O Airbnb usa MySQL para reservas e transações críticas, Redis para cache e HBase para dados de series temporais. A Netflix usa Cassandra para armazenar o histórico de reprodução de 200 milhões de usuários e MySQL para dados de billing. Esses exemplos mostram que a escolha não e SQL ou NoSQL, e entender qual ferramenta resolve cada problema com a menor complexidade operacional e o melhor custo-beneficio para a escala atual do sistema.

Resumo final

A melhor escolha e a que resolve o problema certo com o trade-off certo.

SQL e NoSQL não são adversários. São ferramentas com caracteristicas diferentes para problemas diferentes. SQL oferece consistência forte, esquema rigido e poder de consulta com joins complexos, ideal para dados relacionais e transações críticas. NoSQL oferece flexibilidade de schema, escala horizontal e latência baixa para casos específicos, documentos, chave-valor, colunar e grafo. O Teorema CAP lembra que nenhum sistema distribuído tem tudo. Entender ACID, BASE, CAP e os padrões de acesso do seu sistema e o que diferência uma arquitetura solida de uma que vai dar problemas de performance e consistência conforme a escala cresce.

Tutoriais em Video

Conceitos-chave

Banco Relacional SQL

Tabelas com esquema fixo, relacionamentos por chaves estrangeiras, ACID garantido, PostgreSQL, MySQL

Banco NoSQL

Schema flexível ou sem schema, documentos, grafos, chave-valor, colunar, MongoDB, Redis, Cassandra

ACID vs BASE

SQL prioriza consistência forte; NoSQL frequentemente aceita consistência eventual para ganhar escala

Teorema CAP

Um sistema distribuído só pode garantir 2 de 3: Consistência, Disponibilidade, Tolerância a Partição

Quando usar SQL

Dados relacionais, transações críticas, relatorios complexos

Quando usar NoSQL

Alta escala, schema variável, dados não estruturados, latência baixa

SQL e NoSQL no Instagram

@bytebytego

Reels

@bytebytego

Facebook

SQL e NoSQL no X (Twitter)

@mjovanovictech

Software architecture patterns explained

Ver post completo no X →
@mjovanovictech

System design best practices

Ver post completo no X →
@mjovanovictech

Domain events and distributed systems

Ver post completo no X →
@mjovanovictech

Building resilient distributed systems

Ver post completo no X →
@mjovanovictech

Microservices vs monolith decisions

Ver post completo no X →
@mjovanovictech

Software design fundamentals

Ver post completo no X →

O que devs dizem

Marcos T. ★★★★★

Migrei um catálogo de produtos do MySQL para MongoDB e a flexibilidade de schema mudou tudo. Antes precisava de migração para adicionar um atributo novo em produtos. Agora e só adicionar o campo.

Beatriz S. ★★★★★

O Teorema CAP parecia abstrato até eu precisar escolher entre Cassandra e PostgreSQL para um sistema de métricas em tempo real. Entender esse trade-off foi decisivo para fazer a escolha certa.

Andre P. ★★★★☆

Polyglot persistence parece complexo mas na prática com serviços gerenciados na AWS e bem administrável. PostgreSQL para pedidos, DynamoDB para sessões e ElastiCache para cache. Cada um no seu papel.