Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Movimento NoSQL - Mitos e Fatos sobre Escalabilidade de bancos não relacionais

Movimento NoSQL - Mitos e Fatos sobre Escalabilidade de bancos não relacionais

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

Allisson Azevedo

November 02, 2011
Tweet

More Decks by Allisson Azevedo

Other Decks in Technology

Transcript

  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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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?)
  9. 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
  10. 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
  11. Escalabilidade? Google Escalabilidade Horizontal Sistema de arquivos distribuído: GFS Banco

    de dados distribuído: BigTable (Não relacional) Processamento distribuído: Map/Reduce
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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)
  20. 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
  21. 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?
  22. 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
  23. 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
  24. Todo banco NoSQL é altamente escalável? Apenas os bancos NoSQL

    distribuídos (Cassandra, Riak, Hbase, Voldemort)
  25. 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
  26. Conclusão NoSQL não é sinônimo de alta escalabilidade Opte por

    NoSQL's distribuídos se precisar de escalabilidade