Top Banner
Movimento NoSQL mitos e fatos sobre escalabilidade de bancos de dados não relacionais Allisson Azevedo allisson arroba gmail.com http://slideshare.net/allisson/
55

Palestra iv-ensol-nosql

Jun 14, 2015

Download

Technology

Estudo sobre as técnicas de escalabilidade utilizadas pro bancos NoSQL
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Palestra iv-ensol-nosql

Movimento NoSQL

mitos e fatos sobre escalabilidade de bancos de dados não relacionais

Allisson Azevedoallisson arroba gmail.com

http://slideshare.net/allisson/

Page 2: Palestra iv-ensol-nosql

Allisson Azevedo

➔ Concluinte do curso de Licenciatura em Computação, UEPB

➔ Desenvolvedor Web na sodavirtual.com.br➔ Django➔ befter.net

➔ Áreas de interesse➔ Desenvolvimento web➔ Computação nas núvens➔ Sistemas operacionais

Page 3: Palestra iv-ensol-nosql

NoSQL?

Page 4: Palestra iv-ensol-nosql

No SQL? No SQL?

Page 5: Palestra iv-ensol-nosql

Not Only SQLNão apenas SQL

Page 6: Palestra iv-ensol-nosql

Not Only SQLNão apenas SQL

Diferentes sistemas de armazenamento de dados para resolver problemas em que os

RDBMS não são a melhor solução

Page 7: Palestra iv-ensol-nosql

Not Only SQLNão apenas SQL

Diferentes sistemas de armazenamento de dados para resolver problemas em que os

RDBMS não são a melhor solução

Algo em torno de 10% dos casos

Page 8: Palestra iv-ensol-nosql

Not Only SQLNão apenas SQL

Diferentes sistemas de armazenamento de dados para resolver problemas em que os

RDBMS não são a melhor solução

Algo em torno de 10% dos casos

Hype: alta escalabilidade

Page 9: Palestra iv-ensol-nosql

Escalabilidade?

Page 10: Palestra iv-ensol-nosql

Escalabilidade?

É uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.

Wikipedia: http://pt.wikipedia.org/wiki/Escalabilidade

Page 11: Palestra iv-ensol-nosql

Escalabilidade?

É uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.

Wikipedia: http://pt.wikipedia.org/wiki/Escalabilidade

Escalabilidade != Performance

Page 12: Palestra iv-ensol-nosql

Escalabilidade?

É uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.

Wikipedia: http://pt.wikipedia.org/wiki/Escalabilidade

Escalabilidade != PerformancePodemos ter sistemas escaláveis que usam linguagens

“lentas” (Rails escala?)

Page 13: Palestra iv-ensol-nosql

Escalabilidade?

É uma característica desejável em todo o sistema, em uma rede ou em um processo, que indica sua habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.

Wikipedia: http://pt.wikipedia.org/wiki/Escalabilidade

Escalabilidade != PerformancePodemos ter sistemas escaláveis que usam linguagens

“lentas” (Rails escala?)

Dois tipos: Vertical e Horizontal

Page 14: Palestra iv-ensol-nosql

Vertical

Page 15: Palestra iv-ensol-nosql

Horizontal

Page 16: Palestra iv-ensol-nosql

Escalabilidade?

Vertical: Compre um servidor melhorAlto custo de investimento

SubistituiçãoFácil

Horizontal: Adicione mais servidoresBaixo custo de investimento

AdiçãoComplexo

Page 17: Palestra iv-ensol-nosql

Escalabilidade?

Google

Escalabilidade HorizontalSistema de arquivos distribuído: GFS

Banco de dados distribuído: BigTable (Não relacional)Processamento distribuído: Map/Reduce

Page 18: Palestra iv-ensol-nosql

Escalabilidade?

Google

Escalabilidade HorizontalSistema de arquivos distribuído: GFS

Banco de dados distribuído: BigTable (Não relacional)Processamento distribuído: Map/Reduce

Hadoop (Open Source)

Sistema de arquivos distribuído: HDFSBanco de dados distribuído: Hbase

Processamento distribuído: Map/ReduceJava

Page 19: Palestra iv-ensol-nosql

Escalabilidade em RDBMS

Page 20: Palestra iv-ensol-nosql

Antes de escalar, aplique os band-aids

Page 21: Palestra iv-ensol-nosql

Desnormalização

Page 22: Palestra iv-ensol-nosql

Tabela Posts

id int autoincrement

title varchar

content text

pub_date date

Tabela Comments

id int autoincrement

post_id int foreignkey

comment text

pub_date date

Desnormalização

Para saber a quantidade de comentários de cada post é necessário fazer um select count

Page 23: Palestra iv-ensol-nosql

Tabela Posts

id int autoincrement

title varchar

content text

pub_date date

Tabela Comments

id int autoincrement

post_id int foreignkey

comment text

pub_date date

Desnormalização

Para saber a quantidade de comentários de cada post é necessário fazer um select count

Agora imagine que você quer listar os cem últimos posts, vamos ter cem vezes o select count

Page 24: Palestra iv-ensol-nosql

Tabela Posts

id int autoincrement

title varchar

content text

pub_date date

Tabela Comments

id int autoincrement

post_id int foreignkey

comment text

pub_date date

Desnormalização

Para saber a quantidade de comentários de cada post é necessário fazer um select count

Agora imagine que você quer listar os cem últimos posts, vamos ter cem vezes o select count

Agora imagine que a tabela de comentários já ultrapassou a barreira de um milhão de linhas

Page 25: Palestra iv-ensol-nosql

Tabela Posts

id int autoincrement

title varchar

content text

pub_date date

comments_count int

Tabela Comments

id int autoincrement

post_id int foreignkey

comment text

pub_date date

Desnormalização

Para saber a quantidade de comentários de cada post é necessário fazer um select count

Agora imagine que você quer listar os cem últimos posts, vamos ter cem vezes o select count

Agora imagine que a tabela de comentários já ultrapassou a barreira de um milhão de linhas

Solução: crie um campo comments_count em posts e a cada novo comentário incremente o campo

Page 26: Palestra iv-ensol-nosql

Cache

Faça o máximo de cache possível, evite ao máximo o acesso ao banco de dados

Page 27: Palestra iv-ensol-nosql

Cache

Guarde o resultado da Tag Cloud por uma hora em cache

Page 28: Palestra iv-ensol-nosql

Agora sim, podemos escalar RDBMS

Page 29: Palestra iv-ensol-nosql

Replicação Mestre → Escravo

Page 30: Palestra iv-ensol-nosql

Replicação Mestre → Escravo

Page 31: Palestra iv-ensol-nosql

Replicação Mestre → Escravo

Afeta a consistência dos dados (levando em consideração que a replicação é assíncrona)

Eficiente apenas para aplicações com bastante leitura e pouca escrita

Volume de dados não pode ultrapassar o limite do servidor

Page 32: Palestra iv-ensol-nosql

Replicação Mestre → Mestre

Page 33: Palestra iv-ensol-nosql

Replicação Mestre → Mestre

Page 34: Palestra iv-ensol-nosql

Replicação Mestre → Mestre

Pouco escalável (levando em consideração que a replicação é síncrona)

Volume de dados não pode ultrapassar o

limite do servidor

Page 35: Palestra iv-ensol-nosql

Particionamento Vertical

Page 36: Palestra iv-ensol-nosql

Particionamento Vertical

Page 37: Palestra iv-ensol-nosql

Particionamento Vertical

Escala dados até certo ponto (volume de uma tabela não pode ultrapassar o limite do

servidor)

Não é mais verdadeiramente relacional (precisa ser gerenciado via aplicação)

Page 38: Palestra iv-ensol-nosql

Particionamento Horizontal (Sharding)

Page 39: Palestra iv-ensol-nosql

Particionamento Horizontal (Sharding)

Page 40: Palestra iv-ensol-nosql

Particionamento Horizontal (Sharding)

Escala horizontalmente leitura e escrita

Não é mais verdadeiramente relacional (precisa ser gerenciado via aplicação)

Ao adicionar um novo servidor, como rebalancear a carga?

Mais shards, mais complexidade

Page 41: Palestra iv-ensol-nosql

Escalabilidade em RDBMS

Escalar é possível, mas se perde as características que tornam RDBMS úteis

Aumento da complexidade na aplicação

RDBMS é a ferramenta certa?

Page 42: Palestra iv-ensol-nosql

Banco de dados ideal

Dados são automaticamente particionados

Balanceamento de carga automático

Transparente para aplicação

Capacidade de adicionar capacidade sem tempo de inatividade

Tolerância a falhas

Page 43: Palestra iv-ensol-nosql

Todo banco NoSQL é altamente escalável?

Page 44: Palestra iv-ensol-nosql

Todo banco NoSQL é altamente escalável?

Resposta curta: Não

Page 45: Palestra iv-ensol-nosql

Todo banco NoSQL é altamente escalável?

Resposta curta: Não

Resposta longa: No final dos slides

Page 46: Palestra iv-ensol-nosql

Escalabilidade de bancos NoSQL

Page 47: Palestra iv-ensol-nosql

CouchDB

Orientado a documento

Replicação (atualmente)

Volume de dados não pode ultrapassar o limite do servidor

Page 48: Palestra iv-ensol-nosql

MongoDB

Orientado a documento

Replicação

Auto Sharding (previsto para versão 1.6, julho de 2010)

Volume de dados não pode ultrapassar o limite do servidor

Page 49: Palestra iv-ensol-nosql

Riak

Chave valor (key-value, Hash)

Distribuído (particionamento, balanceamento de carga e replicação)

Altamente escalável

Page 50: Palestra iv-ensol-nosql

Cassandra

Orientado a coluna

Distribuído (particionamento, balanceamento de carga e replicação)

Altamente escalável

Digg, Twitter

Page 51: Palestra iv-ensol-nosql

Hbase

Orientado a coluna

Distribuído (utiliza o Hadoop como base, HDFS + MapReduce)

Altamente escalável

Page 52: Palestra iv-ensol-nosql

Todo banco NoSQL é altamente escalável?

Apenas os bancos NoSQL distribuídos (Cassandra, Riak,

Hbase, Voldemort)

Page 53: Palestra iv-ensol-nosql

Todo banco NoSQL é altamente escalável?

Apenas os bancos NoSQL distribuídos (Cassandra, Riak, Hbase, Voldemort)

NoSQL não distribuídos utilizam as mesmas técnicas de escalabilidade dos RDBMS

Page 54: Palestra iv-ensol-nosql

Conclusão

NoSQL não é sinônimo de alta escalabilidade

Opte por NoSQL's distribuídos se precisar de escalabilidade

Page 55: Palestra iv-ensol-nosql

Obrigado!

Perguntas?