TRADE-OFF'S DE CONFIABILIDADE E DISPONIBILIDADE
COM BANCOS DE DADOS NOSQL
NoSQL?
Como representar dados?
Modelo Relacional
Modelo Relacional
RelaçõesSuplasTuplas
Modelo Relacional
TabelasLinhas
Modelo RelacionalRelacionamentos
Modelo RelacionalAlunos
ID Nome Idade
1 Leonardo 20
2 Carlos 18
3 Bruno 30
4 José 19
Modelo RelacionalAlunos
ID Nome Idade
1 Leonardo 20
2 Carlos 18
3 Bruno 30
4 José 19
Chave primária
Modelo RelacionalRequerimentos
ID Mensagem Aluno_ID
1 Renovação de Carterinha 1
2 Segunda chamada 2
3 Trancar matrícula 4
Modelo RelacionalRequerimentos
ID Mensagem Aluno_ID
1 Renovação de Carterinha 1
2 Segunda chamada 2
3 Trancar matrícula 4
Chave estrangeira
Modelo Relacional
- Modelo de dados simples
Modelo Relacional
- Modelo de dados simples
- Contrato forte (schema design)
Modelo Relacional
- Modelo de dados simples
- Contrato forte (schema design)
- Interoperabilidade
Modelo Relacional
Modelo Relacional
Modelo Relacional
Modelo RelacionalBanco de Integração
Requisitos não-funcionais
Concurrency control
x
1
1 0
Transactions (TX)
Begin Commit1 0
Transactions (TX)
Begin CommitEstadoConsistente
EstadoConsistente
Unit of Work
Transactions (TX)
ACID
tomic
onsistent
solation
urable
Transactions (TX)
Begin1
Transactions (TX)
Begin
Begin Commit1 0
1
Transactions (TX)
Begin
Begin Commit1 0
1 ?
Isolation levels
Serializable
Repeatable Reads
Read Committed
Read Uncommitted
Meu nome é ACID
Isolation levels ==
Controle de consistência
Bancos Relacionais- Modelo Relacional
- Integração
- Transações “ACID”
- Segurança
NoSQL?
“Quando tudo o que se tem é um martelo, todos os problemas parecem pregos"
“Quando tudo o que se tem é um martelo, todos os problemas parecem pregos"
ComplexityPe
rform
ance
Como salvar Logs?
Como salvar um mapa?
Como salvar isso?
Como modelar hierarquias?
Impendance Mismatch
Impendance Mismatch
Impendance Mismatch
RelaçõesSuplasTuplas
Cara no meio
ORM
Impedance Mismatch
Dados não uniformes
Produto
Nome, Modelo, Cor
Produto
Nome, Modelo, Cor, Ano de Fabricação
Escalabilidade
Vertical
Horizontal
?? ??? ?
Questões técnicas
Confiabilidade
Usuarios, Cursos, Professores, Turmas
Usuarios, Cursos Professores, Turmas
Usuarios, Cursos Professores, Turmas
Ponto único de falhas por fragmento
Disponibilidade por
fragmento
Integridade referencialTransações
Consistência
Questões técnicas
Questões comerciais
Questões técnicas
Questões comerciais
NoSQL
==Persistência Poliglota
Como?
Modelos de distribuição
Produtos, Vendas, Usuarios, Franquias
Não distribuir :)
Produtos, Vendas, Usuarios, Franquias
Produtos, Vendas, Usuarios, Franquias
Produtos, Vendas, Usuarios, Franquias
Produtos, Vendas, Usuarios, Franquias
Produtos, Vendas, Usuarios, Franquias
Produtos, Vendas, Usuarios, Franquias100%
Produtos
Vendas
Usuários
Franquias
Produtos
Vendas
Usuários
Franquias
25%
25%
25%
25%
Produtos
25%
Franquias
25%
Usuario
25%
Vendas
25%
Produtos Franquias Usuario Vendas
25% 25% 25% 25%
Fragmentação(Sharding)
Produtos Franquias Usuario Vendas
Produtos Franquias Usuario Vendas
Produtos Franquias Usuario Vendas
Produtos Franquias Usuario Vendas
Produtos Franquias Usuario Vendas
100% 100% 100% 100%
Como organizar os dados nos fragmentos?
Distribuição Geográfica
Vendas
050
100150200
Bangu Campo Grande Méier Santa Cruz Franquias
050
100150200
Bangu Campo Grande Méier Santa Cruz
Produtos Franquias, Vendas Usuario
Campo Grande
Parelhamento de Carga
A B C D
25% 25% 25% 25%
Dias da semana
Acesso aos dados quentes
0
50
100
150
200
Quarta Quinta Sexta Sábado
Quando fragmentar?
Fragmentação
+ Performance
Fragmentação
+ Performance
- Disponibilidade por fragmento
Produtos Franquias, Vendas Usuario
Campo Grande
Produtos
Produtos
Produtos
Leituras
Produtos
Escritas
Leituras
Produtos
Escritas
Leituras
Produtos
Escritas
Leituras
Produtos
Escritas
Slave
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master Slave
Replicação(Master-slave)
Fragmentação + Replicação(master-slave)
+ Performance+ Tolerância a falhas
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master
Slave
B
Consistência eventual
Atualizações são propagadas um tempo depois
Consistência eventual
Atualizações são propagadas um tempo depoisAbrindo Janelas de Inconsistência
Inconsistência de
Leitura
Produtos
Master
Slave
Produtos
Master
Slave
OK!
Produtos
Master
Slave
Falha de durabilidade
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master
Slave
OK!
Produtos
Master
Slave
Produtos
Master
Slave
Produtos
Master ?
Replicação(p2p)
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
?
Inconsistência de gravação
(Conflito escrita-escrita)
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
Leonardo Amanda
{"produto" : "Maçã",“massa” : 21
}
{"produto" : "Maçã",“massa” : 17
}
Soluções
Lock
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Leonardo Amanda
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Leonardo AmandaQuero
escrever!
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Leonardo AmandaQuero
escrever!
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17
Leonardo AmandaQuero
escrever!
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17
Leonardo AmandaQuero
escrever!
Lock pessimista
Lock pessimista- Performance
{"produto" : "Maçã","massa" : 20,"versao" : 0,
}
{"produto" : "Maçã","massa" : 20,
"versao" : 0, }
{"produto" : "Maçã","massa" : 20,
"versao" : 0, }
Leonardo
Versão: 0
{"produto" : "Maçã","massa" : 20,
"versao" : 0, }
Amanda
Versão: 0
{"produto" : "Maçã","massa" : 20,
"versao" : 1, }
Amanda
{"produto" : "Maçã","massa" : 20,
"versao" : 1, }
Leonardo
Versão: 0
{"produto" : "Maçã","massa" : 20,
"versao" : 1, }
Leonardo
Versão: 0
Lock otimista
Serialização é necessário
Replicação(Master-slave)
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
?
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
Aceitar escritas
{"produto" : "Maçã","massa" : 20
}
{"produto" : "Maçã","massa" : 20
}
Massa: 17 Massa: 21
Usuário decide
Inconsistência
=
Problema
?
Load Balancer
Load Balancer
Load Balancer
Relaxar
Relaxar
RelaxarBancos relacionais já faziam
RelaxarBancos relacionais já faziam
MyISAM
RelaxarBancos relacionais já faziam
MyISAM
Performance
CAP
Split Brain
CA
CP
AP
CA
CA
CA
CA
CA
Cluster tem que saber lidar com particionamento!
CAPBalancear Consistência e Disponibilidade
Rio de Janeiro
São Paulo
Rio de Janeiro
São Paulo
Pode?
Rio de Janeiro
São Paulo
Rio de Janeiro
São Paulo
Nega a escrita
CP
CONSISTÊNCIA EVENTUAL
AP
O que acontece
O que acontece Quando não há particionamento?
CAP
Consistência sempre!
Por que sacrificar a consistência?
Quando não há particionamento?
AP
CONSISTÊNCIA EVENTUAL
Latência
Baixa latência
Consistência forte
VS
P?(A|C):(C|L)
PAC/CL
particionamento?
sim!consistência
disponibilidade
não!consistência
latência
ResumãoENEM
NoSQLPersistencia poliglota
Modelo de dadosClusterização
FragmentaçãoReplicação
Problemas de consistênciaRelaxar consistência
CAPP?(A|C):(C|L)
Top Related