“SQL ou NoSQL” é a pergunta errada. A certa é: seus dados têm relacionamento forte e você precisa de transação multi-tabela, ou seu acesso é por chave e o volume de escrita vai crescer mais rápido do que um servidor aguenta sozinho? A resposta muda o banco.

SQL: schema forte, relacionamento, transação

Banco relacional organiza dado em tabelas com schema definido antes de gravar. Cada coluna tem tipo, cada tabela pode ter chave estrangeira apontando pra outra, e o SGBD garante essa integridade — não deixa você inserir um pedido com cliente_id que não existe.

Isso dá duas coisas que NoSQL não tem de graça: join (juntar tabelas numa query só) e ACID:

Transferência bancária é o exemplo clássico: debitar de uma conta e creditar em outra precisa ser atômico. Se o crédito falhar depois do débito, sem ACID, dinheiro desaparece.

Exemplos de SGBD relacional: PostgreSQL, MySQL/MariaDB, Microsoft SQL Server, Oracle Database, SQLite (embarcado).

NoSQL: schema flexível, escala em primeiro lugar

NoSQL não é uma tecnologia — é uma categoria de bancos que abriu mão de schema rígido e de join nativo em troca de estrutura mais flexível e escala mais simples. Dentro dela cabem modelos bem diferentes:

O ponto em comum não é “sem SQL” — é que cada um desses modelos decidiu abrir mão de alguma garantia do relacional pra ganhar outra coisa. No caso do documento e do chave-valor, o que se ganha, na maioria das implementações, é escalabilidade horizontal nativa.

O Teorema CAP

Assim que o banco deixa de rodar num nó só e passa a ser um cluster distribuído, entra em jogo o Teorema CAP, formulado por Eric Brewer: um sistema distribuído só entrega duas das três garantias ao mesmo tempo — Consistência (todo nó vê o mesmo dado), Disponibilidade (toda requisição recebe resposta) e Tolerância a Partição (o sistema continua funcionando mesmo se a rede entre nós falhar).

Na prática, partição de rede vai acontecer — cabo rompido, link entre datacenters instável, timeout. Então P não é opção, é dado. A escolha real é entre C e A quando a partição ocorre.

Triângulo do teorema CAP com os vértices Consistência, Disponibilidade e Partição; Postgres aparece perto da aresta CA como banco de nó único que não enfrenta partição real, e MongoDB aparece perto da aresta CP como configuração padrão que prioriza consistência e pode ser ajustada para disponibilidade

Como avaliar: SQL ou NoSQL

Quatro perguntas, nesta ordem:

1. Você precisa de transação multi-entidade? Se “criar pedido” precisa debitar estoque, gravar pagamento e criar entrega como uma unidade atômica, isso é nativo em SQL e trabalhoso de simular em NoSQL. MongoDB tem transações multi-documento desde a versão 4.0, mas o modelo pede desenho cuidadoso — não é o padrão que você usa sem pensar, é a exceção que você ativa quando precisa.

2. Seu dado é mais relacionamento ou mais documento? Catálogo de produto com atributo variável por categoria, perfil de usuário com estrutura que muda, log de evento — isso é forma de documento, cabe bem em JSON aninhado. Pedido, cliente, fatura, estoque com relação clara entre entidades — isso é forma relacional.

3. Qual seu padrão de leitura? Query ad-hoc, relatório, filtro cruzando várias tabelas — SQL com índice bem pensado ganha. Leitura por chave primária, sempre no mesmo formato, alto volume — chave-valor ou documento ganham, porque não pagam custo de join.

4. Você já sabe que vai precisar de escrita distribuída por várias regiões ou volume que um servidor não aguenta? Se sim, isso pesa a favor de um NoSQL com sharding nativo. Se sua carga cabe confortavelmente num servidor bem dimensionado com réplicas de leitura, adicionar a complexidade operacional de um cluster distribuído antes de precisar é custo sem benefício.

Matriz comparando SQL e NoSQL em quatro critérios — schema, relacionamentos, consistência e escala horizontal — com ACID em destaque para SQL e CAP e sharding automático em destaque para NoSQL

Não é raro terminar com os dois. Catálogo em MongoDB, pedido e pagamento em Postgres, cache de sessão em Redis — cada modelo de dado no banco que resolve o problema dele.

Escalabilidade horizontal na prática

Escalar vertical é trocar o servidor por um maior — mais CPU, mais RAM, disco mais rápido. Simples, mas tem teto físico e custo que cresce mais rápido que linear. Escalar horizontal é distribuir a carga entre vários servidores. É o que sustenta volume que nenhuma máquina única aguenta, mas troca simplicidade operacional por complexidade de coordenação.

Comparação de arquitetura de escala horizontal: PostgreSQL com réplicas de leitura por streaming replication e sharding via extensão como Citus, ao lado de MongoDB com roteador mongos, config servers e shards nativos organizados como replica sets com balanceamento automático de chunks

PostgreSQL: réplica é fácil, escrita distribuída pede ajuda

Postgres nasceu pensado pra um nó. A escala horizontal vem em camadas, cada uma cobrindo um problema diferente:

A ordem importa: a maioria dos projetos resolve o gargalo real só com réplica de leitura e particionamento. Sharding entre nós é passo de quem já esgotou os anteriores.

MongoDB: sharding é arquitetura de origem

MongoDB foi desenhado com cluster distribuído como caso de uso central, não como extensão posterior. As peças:

A troca é operacional: você ganha escrita distribuída nativa, mas precisa operar config servers, monitorar o balanceador e principalmente escolher bem a shard key — trocar shard key de uma coleção já grande é uma migração cara, não um ALTER.

O que fica

SQL e NoSQL não competem pelo mesmo trabalho. Um garante relacionamento e transação num modelo mais rígido; o outro troca rigidez por flexibilidade e, na maioria dos casos, por escala horizontal mais simples de operar desde o primeiro dia.

Postgres escala lendo fácil e escrevendo com esforço crescente — réplica primeiro, partição depois, sharding via extensão só se o volume realmente pedir. MongoDB nasce pensando em cluster, e cobra isso na forma de mais peça pra operar e uma decisão de shard key que não perdoa erro tardio.

A pergunta que resolve a escolha não é “qual é mais moderno” — é qual conjunto de garantias o seu domínio não pode abrir mão, e qual complexidade operacional seu time aguenta pagar agora, versus quando o volume realmente exigir.

Referências