Upload
allisson-azevedo
View
1.582
Download
0
Embed Size (px)
DESCRIPTION
Estudo sobre as técnicas de escalabilidade utilizadas pro bancos NoSQL
Citation preview
Movimento NoSQL
mitos e fatos sobre escalabilidade de bancos de dados não relacionais
Allisson Azevedoallisson arroba gmail.com
http://slideshare.net/allisson/
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
NoSQL?
No SQL? No SQL?
Not Only SQLNão apenas SQL
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
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
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
Escalabilidade?
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?
É 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
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?)
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
Vertical
Horizontal
Escalabilidade?
Vertical: Compre um servidor melhorAlto custo de investimento
SubistituiçãoFácil
Horizontal: Adicione mais servidoresBaixo custo de investimento
AdiçãoComplexo
Escalabilidade?
Escalabilidade HorizontalSistema de arquivos distribuído: GFS
Banco de dados distribuído: BigTable (Não relacional)Processamento distribuído: Map/Reduce
Escalabilidade?
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
Escalabilidade em RDBMS
Antes de escalar, aplique os band-aids
Desnormalização
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
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
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
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
Cache
Faça o máximo de cache possível, evite ao máximo o acesso ao banco de dados
Cache
Guarde o resultado da Tag Cloud por uma hora em cache
Agora sim, podemos escalar RDBMS
Replicação Mestre → Escravo
Replicação Mestre → Escravo
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
Replicação Mestre → Mestre
Replicação Mestre → Mestre
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
Particionamento Vertical
Particionamento Vertical
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)
Particionamento Horizontal (Sharding)
Particionamento Horizontal (Sharding)
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
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?
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
Todo banco NoSQL é altamente escalável?
Todo banco NoSQL é altamente escalável?
Resposta curta: Não
Todo banco NoSQL é altamente escalável?
Resposta curta: Não
Resposta longa: No final dos slides
Escalabilidade de bancos NoSQL
CouchDB
Orientado a documento
Replicação (atualmente)
Volume de dados não pode ultrapassar o limite do servidor
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
Riak
Chave valor (key-value, Hash)
Distribuído (particionamento, balanceamento de carga e replicação)
Altamente escalável
Cassandra
Orientado a coluna
Distribuído (particionamento, balanceamento de carga e replicação)
Altamente escalável
Digg, Twitter
Hbase
Orientado a coluna
Distribuído (utiliza o Hadoop como base, HDFS + MapReduce)
Altamente escalável
Todo banco NoSQL é altamente escalável?
Apenas os bancos NoSQL distribuídos (Cassandra, Riak,
Hbase, Voldemort)
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
Conclusão
NoSQL não é sinônimo de alta escalabilidade
Opte por NoSQL's distribuídos se precisar de escalabilidade
Obrigado!
Perguntas?