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

TipoModelo de dadosQuery languageExemplosPonto forte
RelacionalTabelas + relacionamentosSQLSQL Server, PostgreSQL, MySQLConsistência, transações ACID
DocumentoJSON/BSON aninhadoMQL, SQL-likeMongoDB, Couchbase, FirestoreFlexibilidade de schema
Chave-ValorPares key:valueAPI simplesRedis, DynamoDB, etcdVelocidade extrema, cache
Coluna LargaFamílias de colunasCQLApache Cassandra, HBase, Google BigtableEscrita massiva, séries temporais
GrafoNós + arestasCypher, GremlinNeo4j, ArangoDB, Amazon NeptuneRelacionamentos complexos
Série TemporalDados com timestampInfluxQL, PromQLInfluxDB, TimescaleDB, PrometheusMétricas, IoT, monitoramento
Busca Full-textÍndice invertidoDSL/RESTElasticsearch, OpenSearch, SolrBusca textual, logs, analytics
NewSQLRelacional + escala horizontalSQLCockroachDB, TiDB, Google SpannerACID + distribuído

Como escolher

A escolha do banco de dados deve ser guiada por:

  1. Modelo dos dados: os dados são naturalmente tabulares? Hierárquicos? Conectados?
  2. Padrão de acesso: mais leituras ou escritas? Buscas por chave exata ou queries complexas?
  3. Consistência vs disponibilidade: teorema CAP: em caso de partição de rede, você prefere consistência ou disponibilidade?
  4. Escala: vertical (mais CPU/RAM) ou horizontal (mais nós)?
  5. 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

Referências