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

Palestra iv-ensol-nosql

Embed Size (px)

DESCRIPTION

Estudo sobre as técnicas de escalabilidade utilizadas pro bancos NoSQL

Citation preview

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?