Ideia central
Bancos de dados são organizados em categorias conforme o modelo de dados que utilizam, o padrão de acesso e as garantias que oferecem. Escolher o tipo errado para um caso de uso é uma das decisões mais custosas de reverter em uma arquitetura.
Visão comparativa
| Tipo | Modelo de dados | Query language | Exemplos | Ponto forte |
|---|---|---|---|---|
| Relacional | Tabelas + relacionamentos | SQL | SQL Server, PostgreSQL, MySQL | Consistência, transações ACID |
| Documento | JSON/BSON aninhado | MQL, SQL-like | MongoDB, Couchbase, Firestore | Flexibilidade de schema |
| Chave-Valor | Pares key:value | API simples | Redis, DynamoDB, etcd | Velocidade extrema, cache |
| Coluna Larga | Famílias de colunas | CQL | Apache Cassandra, HBase, Google Bigtable | Escrita massiva, séries temporais |
| Grafo | Nós + arestas | Cypher, Gremlin | Neo4j, ArangoDB, Amazon Neptune | Relacionamentos complexos |
| Série Temporal | Dados com timestamp | InfluxQL, PromQL | InfluxDB, TimescaleDB, Prometheus | Métricas, IoT, monitoramento |
| Busca Full-text | Índice invertido | DSL/REST | Elasticsearch, OpenSearch, Solr | Busca textual, logs, analytics |
| NewSQL | Relacional + escala horizontal | SQL | CockroachDB, TiDB, Google Spanner | ACID + distribuído |
Como escolher
A escolha do banco de dados deve ser guiada por:
- Modelo dos dados: os dados são naturalmente tabulares? Hierárquicos? Conectados?
- Padrão de acesso: mais leituras ou escritas? Buscas por chave exata ou queries complexas?
- Consistência vs disponibilidade: teorema CAP: em caso de partição de rede, você prefere consistência ou disponibilidade?
- Escala: vertical (mais CPU/RAM) ou horizontal (mais nós)?
- Transações: o negócio exige ACID? Ou eventual consistency é aceitável?
Teorema CAP
Num sistema distribuído, só é possível garantir 2 das 3 propriedades simultaneamente:
- Consistency: todos os nós veem os mesmos dados ao mesmo tempo
- Availability: toda requisição recebe uma resposta (sem garantia de ser a mais atual)
- Partition tolerance: o sistema continua funcionando mesmo com falhas de rede
Bancos relacionais tradicionais (single-node) priorizam CA. Cassandra prioriza AP. HBase prioriza CP.
ACID vs BASE
- ACID (Atomicity, Consistency, Isolation, Durability): padrão dos bancos relacionais, com garantia forte de integridade
- BASE (Basically Available, Soft state, Eventually consistent): modelo dos bancos NoSQL distribuídos, trocando consistência imediata por disponibilidade e performance
Conexões
- db-relacional - Modelo relacional em profundidade
- db-nosql - Tipos de bancos NoSQL
- db-grafo - Bancos de dados de grafo
- sqlserver-visao-geral - SQL Server como exemplo de banco relacional
Referências
- CAP Theorem - Wikipedia
- DB-Engines Ranking
- Martin Fowler - NoSQL Distilled