Lição 1.2 · Tempo de leitura: ~15 min
Existem muitos tipos de bases de dados, cada um otimizado para um tipo específico de dados, padrão de consulta ou requisito de escalabilidade. Nesta lição, aprenderá os principais modelos — relacionais, chave-valor, documentais, colunas largas, grafo, séries temporais e colunares — com as suas diferenças, casos de uso típicos e exemplos de sistemas reais.
Na lição anterior, introduzimos a ideia geral de uma base de dados e de um SGBD. Na prática, nem todas as bases de dados são construídas da mesma forma. Diferentes tipos são otimizados para diferentes tipos de dados, padrões de consulta, requisitos de escalabilidade e necessidades de consistência.
Também vamos olhar com mais atenção para as bases de dados relacionais, porque continuarão a ser o nosso principal foco ao longo deste curso.
Nenhum modelo único é perfeito para todas as aplicações.
Por exemplo:
Como sistemas diferentes resolvem problemas diferentes, vários modelos de bases de dados surgiram ao longo do tempo.
Comparação rápida antes de analisarmos cada tipo em detalhe:
| Tipo | Modelo de Dados | Pontos Fortes | Casos de Uso | Exemplos |
|---|---|---|---|---|
| Relacional | Tabelas com linhas e colunas | Forte consistência, SQL, joins, dados estruturados | Banca, ERP, CRM, e-commerce, relatórios | PostgreSQL, MySQL, MariaDB, SQLite, Oracle |
| Chave-Valor | Chave associada a um valor | Pesquisas muito rápidas, escalabilidade simples | Caching, sessões, feature flags, carrinhos | Redis, Amazon DynamoDB, Riak |
| Documental | Documentos do tipo JSON | Esquema flexível, dados aninhados | Gestão de conteúdo, perfis, catálogos | MongoDB, Couchbase, Firestore |
| Colunas Largas | Linhas com colunas flexíveis em famílias | Alta taxa de escrita, escalabilidade horizontal | Registo de eventos, IoT, cargas distribuídas | Apache Cassandra, HBase, ScyllaDB |
| Grafo | Nós e arestas | Consultas centradas em relações | Redes sociais, deteção de fraude, recomendações | Neo4j, Amazon Neptune, ArangoDB |
| Séries Temporais | Registos com marca temporal | Ingestão e agregação eficientes ao longo do tempo | Monitorização, métricas, sensores | InfluxDB, TimescaleDB, OpenTSDB |
| Colunar Analítica | Dados por coluna em vez de por linha | Análises e agregações rápidas | BI, dashboards, data warehousing, OLAP | ClickHouse, DuckDB, Amazon Redshift, BigQuery |
| Em Memória | Dados principalmente em RAM | Latência extremamente baixa | Caching, leaderboards, contadores em tempo real | Redis, Memcached, SAP HANA |
As bases de dados relacionais armazenam os dados em tabelas compostas por linhas e colunas. As tabelas podem ser ligadas entre si através de relações, normalmente usando chaves primárias e chaves estrangeiras.
Este modelo é especialmente adequado quando os dados estão bem estruturados e quando a correção, a consistência e as consultas complexas são importantes.
1. Esquema estruturado — exige um esquema claramente definido com tabelas, colunas, tipos de dados, restrições e relações. Torna a estrutura previsível e fácil de validar.
2. Relações entre tabelas — capacidade de modelar relações explicitamente entre entidades (ex. customers → orders → order_items). Ideal para sistemas de negócio.
3. Suporte a SQL — linguagem padrão para filtrar, juntar, agregar, ordenar e modificar dados estruturados.
4. Transações ACID :
5. Restrições de integridade — chaves primárias, estrangeiras, unicidade, NOT NULL, CHECK para evitar dados inválidos.
6. Joins poderosos — ideais para combinar dados de várias tabelas em relatórios e análises.
7. Normalização — redução de duplicação através de tabelas relacionadas.
As bases relacionais são a melhor escolha quando os dados são estruturados, as relações são importantes, as transações devem ser fiáveis e são necessárias consultas complexas.
Armazenam dados como um par simples chave + valor. Acesso direto por chave — modelo muito simples e muito rápido.
Casos de uso: cache, sessões, carrinhos, feature flags, leaderboards.
Exemplos: Redis, Amazon DynamoDB, Riak
Armazenam dados como documentos JSON. Cada documento pode ter uma estrutura diferente.
Casos de uso: gestão de conteúdo, catálogos de produtos, perfis de utilizador, aplicações web e móveis.
Exemplos: MongoDB, Couchbase, Google Firestore
Armazenam dados em linhas com um conjunto flexível de colunas. Concebidas para distribuição por muitos servidores e alta taxa de escrita.
Casos de uso: registo de eventos, IoT, sistemas de mensagens, sistemas distribuídos geograficamente.
Exemplos: Apache Cassandra, Apache HBase, ScyllaDB
Armazenam os valores da mesma coluna juntos em disco — diferente das bases de colunas largas. Eficientes para consultas analíticas que leem poucas colunas de grandes conjuntos de dados.
Casos de uso: business intelligence, data warehousing, dashboards, análise de logs.
Exemplos: ClickHouse, DuckDB, Amazon Redshift, Google BigQuery
Concebidas para dados onde as relações são a parte mais importante. Armazenam nós (entidades) e arestas (relações). Navegação por relações rápida e natural.
Casos de uso: redes sociais, deteção de fraude, sistemas de recomendação, grafos de conhecimento.
Exemplos: Neo4j, Amazon Neptune, ArangoDB
Especializadas em dados associados ao tempo, otimizadas para ingestão, retenção, compressão e agregação temporal.
Casos de uso: monitorização de servidores, métricas, dados de sensores, dados do mercado bolsista.
Exemplos: InfluxDB, TimescaleDB, OpenTSDB
Armazenam a maioria dos dados em RAM em vez de em disco — extremamente rápidas, embora a memória seja mais cara.
Casos de uso: caching, sessões, contadores em tempo real, leaderboards de jogos.
Exemplos: Redis, Memcached, SAP HANA
Questões a colocar:
Em muitos sistemas reais, as organizações usam mais do que um tipo de base de dados — a chamada persistência poliglota: relacional para dados de negócio, Redis para cache, documental para conteúdo flexível, colunar para análise.
Principais Conclusões:
As bases relacionais usam esquema fixo, transações ACID e SQL. NoSQL é um termo genérico para modelos chave-valor, documentais, colunas largas e grafo — trocam algumas garantias de consistência por flexibilidade ou escalabilidade horizontal. A escolha certa depende dos seus dados e carga de trabalho.
Use uma base documental quando os dados têm estrutura aninhada variável e joins entre coleções são raros. Use uma base relacional quando os dados são estruturados, as entidades estão interligadas e precisa de transações fiáveis com consultas multi-tabela complexas.
Sim — isso chama-se persistência poliglota. É comum em produção: PostgreSQL para dados transacionais, Redis para cache, ClickHouse para análise. Cada tipo é usado onde tem melhor desempenho.
Comece pela carga e pelas restrições: estrutura dos dados, requisitos de consistência, padrão de consultas, objetivos de latência e escala. Por exemplo, escolha uma base relacional para transações ACID, uma base documental para registos JSON flexíveis e uma base de séries temporais para métricas com marca temporal.
Cada modelo envolve compromissos. As bases relacionais oferecem forte consistência, joins e um ecossistema SQL maduro, mas alterações de esquema podem ser mais rígidas em grande escala. Os modelos NoSQL costumam oferecer mais flexibilidade ou escalabilidade horizontal, mas podem limitar joins ou exigir mais cuidado no desenho da consistência.
Sim. Isso é persistência poliglota: usar várias bases, cada uma para a carga que trata melhor. Um padrão comum é PostgreSQL para transações, Redis para cache e ClickHouse (ou outro sistema colunar) para análise.