Palestra iv-ensol-nosql
-
Upload
allisson-azevedo -
Category
Technology
-
view
1.582 -
download
0
description
Transcript of Palestra iv-ensol-nosql
![Page 1: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/1.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/2.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/3.jpg)
NoSQL?
![Page 4: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/4.jpg)
No SQL? No SQL?
![Page 5: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/5.jpg)
Not Only SQLNão apenas SQL
![Page 6: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/6.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/7.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/8.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/9.jpg)
Escalabilidade?
![Page 10: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/10.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/11.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/12.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/13.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/14.jpg)
Vertical
![Page 15: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/15.jpg)
Horizontal
![Page 16: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/16.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/17.jpg)
Escalabilidade?
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/18.jpg)
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
![Page 19: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/19.jpg)
Escalabilidade em RDBMS
![Page 20: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/20.jpg)
Antes de escalar, aplique os band-aids
![Page 21: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/21.jpg)
Desnormalização
![Page 22: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/22.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/23.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/24.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/25.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/26.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/27.jpg)
Cache
Guarde o resultado da Tag Cloud por uma hora em cache
![Page 28: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/28.jpg)
Agora sim, podemos escalar RDBMS
![Page 29: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/29.jpg)
Replicação Mestre → Escravo
![Page 30: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/30.jpg)
Replicação Mestre → Escravo
![Page 31: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/31.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/32.jpg)
Replicação Mestre → Mestre
![Page 33: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/33.jpg)
Replicação Mestre → Mestre
![Page 34: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/34.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/35.jpg)
Particionamento Vertical
![Page 36: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/36.jpg)
Particionamento Vertical
![Page 37: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/37.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/38.jpg)
Particionamento Horizontal (Sharding)
![Page 39: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/39.jpg)
Particionamento Horizontal (Sharding)
![Page 40: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/40.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/41.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/42.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/43.jpg)
Todo banco NoSQL é altamente escalável?
![Page 44: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/44.jpg)
Todo banco NoSQL é altamente escalável?
Resposta curta: Não
![Page 45: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/45.jpg)
Todo banco NoSQL é altamente escalável?
Resposta curta: Não
Resposta longa: No final dos slides
![Page 46: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/46.jpg)
Escalabilidade de bancos NoSQL
![Page 47: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/47.jpg)
CouchDB
Orientado a documento
Replicação (atualmente)
Volume de dados não pode ultrapassar o limite do servidor
![Page 48: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/48.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/49.jpg)
Riak
Chave valor (key-value, Hash)
Distribuído (particionamento, balanceamento de carga e replicação)
Altamente escalável
![Page 50: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/50.jpg)
Cassandra
Orientado a coluna
Distribuído (particionamento, balanceamento de carga e replicação)
Altamente escalável
Digg, Twitter
![Page 51: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/51.jpg)
Hbase
Orientado a coluna
Distribuído (utiliza o Hadoop como base, HDFS + MapReduce)
Altamente escalável
![Page 52: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/52.jpg)
Todo banco NoSQL é altamente escalável?
Apenas os bancos NoSQL distribuídos (Cassandra, Riak,
Hbase, Voldemort)
![Page 53: Palestra iv-ensol-nosql](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/53.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/54.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022052322/557cd172d8b42a60508b476d/html5/thumbnails/55.jpg)
Obrigado!
Perguntas?