NoSQL e CAP

Preview:

Citation preview

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)

Obrigado!

Leonardo Cordeiroleonardobcordeirodev@gmail.com

:)

Recommended