Palestra iv-ensol-nosql

Post on 14-Jun-2015

1.590 views 0 download

description

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

Transcript of 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/

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?

Google

Escalabilidade HorizontalSistema de arquivos distribuído: GFS

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

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

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?