[1] O documento discute os mitos e fatos sobre a escalabilidade de bancos de dados não relacionais (NoSQL);
[2] Alguns bancos de dados NoSQL como Cassandra, Riak e HBase são altamente escaláveis pois usam técnicas de distribuição, enquanto outros como CouchDB e MongoDB não conseguem escalar além dos limites de um único servidor;
[3] Nem todo banco de dados NoSQL é altamente escalável, apenas aqueles que usam distribuição de dados.
1. Movimento NoSQL
mitos e fatos sobre escalabilidade de
bancos de dados não relacionais
Allisson Azevedo
allisson arroba gmail.com
http://slideshare.net/allisson/
2. 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
6. Not Only SQL
Não apenas SQL
Diferentes sistemas de armazenamento de
dados para resolver problemas em que os
RDBMS não são a melhor solução
7. Not Only SQL
Nã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
8. Not Only SQL
Nã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
10. 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
11. 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
12. 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
Podemos ter sistemas escaláveis que usam linguagens
“lentas” (Rails escala?)
13. 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
Podemos ter sistemas escaláveis que usam linguagens
“lentas” (Rails escala?)
Dois tipos: Vertical e Horizontal
16. Escalabilidade?
Vertical: Compre um servidor melhor
Alto custo de investimento
Subistituição
Fácil
Horizontal: Adicione mais servidores
Baixo custo de investimento
Adição
Complexo
17. Escalabilidade?
Google
Escalabilidade Horizontal
Sistema de arquivos distribuído: GFS
Banco de dados distribuído: BigTable (Não relacional)
Processamento distribuído: Map/Reduce
18. Escalabilidade?
Google
Escalabilidade Horizontal
Sistema 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: HDFS
Banco de dados distribuído: Hbase
Processamento distribuído: Map/Reduce
Java
22. Desnormalização
Tabela Posts
Tabela Comments
id int autoincrement
id int autoincrement
title varchar
post_id int foreignkey
content text comment text
pub_date date pub_date date
Para saber a quantidade de comentários de cada post é
necessário fazer um select count
23. Desnormalização
Tabela Posts
Tabela Comments
id int autoincrement
id int autoincrement
title varchar
post_id int foreignkey
content text comment text
pub_date date pub_date date
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
24. Desnormalização
Tabela Posts
Tabela Comments
id int autoincrement
id int autoincrement
title varchar
post_id int foreignkey
content text comment text
pub_date date pub_date date
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
25. Desnormalização
Tabela Posts
Tabela Comments
id int autoincrement
id int autoincrement
title varchar
post_id int foreignkey
content text
comment text
pub_date date
pub_date date
comments_count int
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
26. Cache
Faça o máximo de cache possível, evite ao
máximo o acesso ao banco de dados
31. 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
34. 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
37. 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)
40. 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
41. 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?
42. 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
47. CouchDB
Orientado a documento
Replicação (atualmente)
Volume de dados não pode ultrapassar o
limite do servidor
48. 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
49. Riak
Chave valor (key-value, Hash)
Distribuído (particionamento, balanceamento
de carga e replicação)
Altamente escalável
50. Cassandra
Orientado a coluna
Distribuído (particionamento, balanceamento
de carga e replicação)
Altamente escalável
Digg, Twitter
51. Hbase
Orientado a coluna
Distribuído (utiliza o Hadoop como base,
HDFS + MapReduce)
Altamente escalável
52. Todo banco NoSQL é altamente
escalável?
Apenas os bancos NoSQL
distribuídos (Cassandra, Riak,
Hbase, Voldemort)
53. 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
54. Conclusão
NoSQL não é sinônimo de alta escalabilidade
Opte por NoSQL's distribuídos se precisar de
escalabilidade