Skip to main content

Documentação Técnica – Modelagem de Dados: SQL, NoSQL, Normalização e Sharding | Banco de Dados

  • Documentação Técnica – Modelagem de Dados: SQL, NoSQL, Normalização e Sharding | Banco de Dados

Normalização vs Desnormalização

Normalização

  • Técnica utilizada em bancos relacionais para reduzir redundância e dependências.
  • Consiste em dividir uma tabela grande em tabelas menores interligadas por meio de relacionamentos.
  • Facilita a consistência e integridade dos dados.
  • Alterações em dados geralmente afetam apenas uma tabela.

• Foco Principal: Integridade, Redundância Mínima (TDD/ACID). • Onde Usar em Fintech: Contas Digitais e Pagamentos Digitais (saldos, transações críticas). É a fonte de verdade. • Prós: Otimiza a escrita, minimiza o risco de inconsistência. • Tecnologias: PostgreSQL, Oracle (Sistemas Transacionais).

Exemplo (SQL):

-- Tabela Produto
produto(id, nome)

-- Tabela ProdutoItem
produto_item(id, produto_id, descricao)

Desnormalização

  • Processo reverso da normalização.
  • Adiciona redundância intencional para otimizar a leitura dos dados.
  • Comum em bancos NoSQL, que priorizam desempenho em leitura e simplicidade.
  • Utiliza estrutura embutida em documentos.

• Foco Principal: Performance e Velocidade de Leitura (Escalabilidade). • Onde Usar em Fintech: Históricos, Logs de Transação, Relatórios, e sistemas de Detecção de Fraude. • Prós: Otimiza consultas, essencial para a agilidade no acesso a dados históricos. • Tecnologias: NoSQL ou Tabelas Otimizadas no PostgreSQL (Sistemas Analíticos).

Exemplo (NoSQL):

{
"_id": "produto_1",
"nome": "Notebook",
"itens": [
{ "descricao": "Fonte" },
{ "descricao": "Mouse" }
]
}

Diferenças entre SQL e NoSQL

CaracterísticaSQL (Relacional)NoSQL (Orientado a Documentos)
Modelo de DadosTabelas (linhas e colunas)Documentos (geralmente JSON)
EsquemaFixo, definido previamenteFlexível, dinâmico
RelacionamentosJoins, chaves primárias e estrangeirasDados embutidos ou referenciados
EscalabilidadeVertical (aumentar recursos do servidor)Horizontal (sharding, replicação)
Linguagem de ConsultaSQLMapReduce, APIs REST
Exemplo de Relacionamentoproduto e produto_item com foreign keyDocumento produto com array de itens

Dicas para Modelagem NoSQL

  • Modele as entidades e relacionamentos inicialmente como faria em um banco relacional.
  • Analise os padrões de acesso e otimize a estrutura dos documentos para leitura eficiente.
  • Utilize embutimento quando os dados relacionados forem acessados juntos.
  • Use referências quando os dados forem grandes, compartilhados ou modificados independentemente.

Padrões de Modelagem NoSQL

Embedded Pattern

  • Utilizado quando há uma relação 1:N e os dados “filhos” são sempre acessados junto com o “pai”.

Exemplo:

{
"_id": "pedido_001",
"cliente": "João",
"itens": [
{ "produto": "Mouse", "quantidade": 2 },
{ "produto": "Teclado", "quantidade": 1 }
]
}

Referenced Pattern

  • Utilizado quando os dados “filhos” são acessados ou modificados independentemente, ou são reutilizados.

Exemplo:

// Documento Pedido
{ "_id": "pedido_002", "cliente": "Maria" }

// Documento Item
{ "_id": "item_77", "pedido_id": "pedido_002", "produto": "Monitor" }

Sharding (Particionamento Horizontal)

O que é

  • Técnica usada para distribuir dados de um banco muito grande entre diferentes servidores ou instâncias.
  • Cada fragmento (shard) contém uma porção do conjunto total de dados.
  • Visa melhorar desempenho, escalabilidade e balanceamento de carga.

Como funciona

  • Pode particionar os dados com base em:

    • Intervalos de valores (ex: A-M, N-Z)
    • Hash de uma chave (ex: ID do usuário)
    • Localização geográfica, entre outros critérios

Vantagens

  • Aumento da escalabilidade e da performance de leitura e escrita.
  • Possibilidade de balanceamento de carga.
  • Permite manutenção e expansão horizontal (adicionar novos shards).

Desvantagens

  • Aumenta a complexidade de gestão.
  • Consultas cruzando shards são mais difíceis e custosas.
  • Reorganizar shards requer redistribuição de dados.

Exemplo

Antes do sharding (monolítico):

users: [ user1, user2, user3, ..., userN ]

Após sharding (por região):

users_us:    [ usuários dos EUA ]
users_eu: [ usuários da Europa ]
users_asia: [ usuários da Ásia ]

Modelo CAP

Diagrama no MIRO: 🔗 Clique aqui

Image


SiglaSignificadoDescrição Técnica
APAvailability + Partition TolerancePrioriza disponibilidade mesmo durante partições de rede; pode aceitar inconsistência temporária.
CPConsistency + Partition TolerancePrioriza consistência forte; pode recusar requisições para preservar integridade durante partições.
ELEventual ConsistencyModelo onde os dados convergem ao estado consistente ao longo do tempo.
ECEventual ConsistencyMesmo conceito de EL; variação de nomenclatura.
Banco de DadosModelo CAPModelo de DadosCasos de Uso ComunsConsenso / ReplicaçãoConsistência ForteObservações
CassandraAP / ELColunarRedes sociais, séries temporais, catálogos (Netflix), IoT, saúde, escrita massiva, catálogos globais distribuídosQuorumFórmula quorum: RF / 2 + 1 (ex: RF=10 → 6)
MongoDBCP / ECDocumento (ACID)Web/mobile, e-commerce, logs, prototipagemRaftWriteConcern / ReadConcern configuráveis
DynamoDB (AWS)AP / ELChave-ValorWeb/mobile alto tráfego, placar, perfis, cliques, carrinho, telemetriaQuorumLeitura/escrita forte via configuração
CockroachDBCP / ECRelacional distribuído (ACID)Financeiro, inventário global, jogos multi-região, pagamentos, e-commerceRaftModo eventual habilitado recentemente
SpannerDB (Google)CP / ECRelacional distribuído (ACID)Fintechs globais, jogos de alta escala, backends críticos 99.999% SLAPaxosTrueTime, relógios atômicos, infra Google
PostgreSQLCP / ECRelacional single-node (ACID)Web, ERP, CMS, e-commerce, sistemas empresariaisWAL ReplicationSingle-node; HA depende de ferramentas externas
RedisAP / ELChave-ValorCache, mensageria, sessãoSentinelPode configurar quorum, mas mantém comportamento AP
EtcdCP / ECChave-ValorKubernetes, config management, service discoveryRaftTotalmente focado em consistência forte
RiakAP / ELChave-ValorAd delivery, IoT, logs, alto volumeQuorum⚠️Strong Consistency experimental
Neo4jCP / ECGrafoFraude, recomendação, redes sociais, AML, anomaliasRaftPode operar em HA ou modo fortemente consistente
ElasticsearchCP / ECDocumentoBusca full-text, ELK, análise de logsPróprio (Quorum-based)Configuração via wait_for_active_shards
FoundationDBCP / ECChave-Valor transacional distribuídoMetadados em larga escala, bancos customizados, CloudKitPaxosCP fim-a-fim; sacrifica disponibilidade
ScyllaDBAP / ELColunarTime series alta ingestão, gaming, AdTech, migração CassandraRaft (metadados)Tunable consistency; dados continuam AP
CouchbaseCP / ECDocumentoPerfis, e-commerce, jogos online, cache distribuídoPróprioAlterna entre consistência forte ou alta disponibilidade
YugabyteDBCP / ECRelacional distribuído (ACID)Missão crítica, varejo global, financeiro multi-região, migração Oracle/PostgresRaftNão suporta consistência eventual