Movimento NoSQL
mitos e fatos sobre escalabilidade de
 bancos de dados não relacionais

               Allisson Azevedo
  ...
Allisson Azevedo
➔   Concluinte do curso de Licenciatura em
    Computação, UEPB
➔   Desenvolvedor Web na sodavirtual.com....
NoSQL?
No SQL?
 No SQL?
Not Only SQL
 Não apenas SQL
Not Only SQL
           Não apenas SQL

Diferentes sistemas de armazenamento de
dados para resolver problemas em que os
  ...
Not Only SQL
           Não apenas SQL

Diferentes sistemas de armazenamento de
dados para resolver problemas em que os
  ...
Not Only SQL
           Não apenas SQL

Diferentes sistemas de armazenamento de
dados para resolver problemas em que os
  ...
Escalabilidade?
Escalabilidade?
É uma característica desejável em todo o
sistema, em uma rede ou em um processo,
que indica sua habilidade...
Escalabilidade?
É uma característica desejável em todo o
sistema, em uma rede ou em um processo,
que indica sua habilidade...
Escalabilidade?
É uma característica desejável em todo o
sistema, em uma rede ou em um processo,
que indica sua habilidade...
Escalabilidade?
É uma característica desejável em todo o
sistema, em uma rede ou em um processo,
que indica sua habilidade...
Vertical
Horizontal
Escalabilidade?
Vertical: Compre um servidor melhor
         Alto custo de investimento
                Subistituição
    ...
Escalabilidade?
                     Google

             Escalabilidade Horizontal
       Sistema de arquivos distribuído...
Escalabilidade?
                     Google

             Escalabilidade Horizontal
       Sistema de arquivos distribuído...
Escalabilidade em RDBMS
Antes de escalar, aplique os band-aids
Desnormalização
Desnormalização

      Tabela Posts
                                    Tabela Comments
      id        int autoincrement
...
Desnormalização

      Tabela Posts
                                    Tabela Comments
      id        int autoincrement
...
Desnormalização

      Tabela Posts
                                     Tabela Comments
      id        int autoincrement...
Desnormalização

 Tabela Posts
                                        Tabela Comments
 id              int autoincrement
...
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)

   Efi...
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...
Particionamento Vertical
Particionamento Vertical
Particionamento Vertical
Escala dados até certo ponto (volume de uma
   tabela não pode ultrapassar o limite do
          ...
Particionamento Horizontal
         (Sharding)
Particionamento Horizontal (Sharding)
Particionamento Horizontal
          (Sharding)
Escala horizontalmente leitura e escrita

Não é mais verdadeiramente relac...
Escalabilidade em RDBMS

   Escalar é possível, mas se perde as
 características que tornam RDBMS úteis

 Aumento da compl...
Banco de dados ideal
Dados são automaticamente particionados

  Balanceamento de carga automático

      Transparente para...
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
            slid...
Escalabilidade de bancos
         NoSQL
CouchDB
        Orientado a documento

       Replicação (atualmente)

Volume de dados não pode ultrapassar o
           l...
MongoDB
           Orientado a documento

                 Replicação

Auto Sharding (previsto para versão 1.6, julho
    ...
Riak
       Chave valor (key-value, Hash)

Distribuído (particionamento, balanceamento
            de carga e replicação)
...
Cassandra
            Orientado a coluna

Distribuído (particionamento, balanceamento
            de carga e replicação)

...
Hbase
          Orientado a coluna

Distribuído (utiliza o Hadoop como base,
          HDFS + MapReduce)

          Altame...
Todo banco NoSQL é altamente
         escalável?

  Apenas os bancos NoSQL
distribuídos (Cassandra, Riak,
       Hbase, Vo...
Todo banco NoSQL é altamente
         escalável?
  Apenas os bancos NoSQL distribuídos
   (Cassandra, Riak, Hbase, Voldemo...
Conclusão
NoSQL não é sinônimo de alta escalabilidade

Opte por NoSQL's distribuídos se precisar de
             escalabil...
Obrigado!
 Perguntas?
Próximos SlideShares
Carregando em…5
×

Palestra iv-ensol-nosql

1.868 visualizações

Publicada em

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

Publicada em: Tecnologia
  • @Suissa Corp

    O conceito de sharding pode ser considerado distribuído sim, mas eu levei em questão se o banco em si implementa isso, veja por exemplo o mysql, você consegue implementar sharding nele, mas ele em si não escala horizontalmente sozinho, você tem que ir lá e aplicar as técnicas e gerenciar tudo via sistema.

    Um banco que implementa sharding nativamente é outra coisa, o mongodb entra nesse quesito, o couchdb também tem planos para sharding nativo (apesar de ter um software chamado lounge que faz isso, mas ai entra no problema do mysql, ele em si não escala horizontalmente).

    Sobre o autosharding do mongodb ele só vai estar em produção mesmo no mongodb 1.6, segundo o próprio site: http://www.mongodb.org/display/DOCS/Sharding

    Um abraço.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Velho concordo com quase tudo que vc disse, mas acho que o sharding entra no quesito distribuidos, ou estou errado? E creio que o auto-sharding do MongoDB já está ativo. Pelo menos pelo site está
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Parabens! Allison, palestra muito completa sobre escalabilidade (including noSQL)
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Palestra iv-ensol-nosql

  1. 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. 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. 3. NoSQL?
  4. 4. No SQL? No SQL?
  5. 5. Not Only SQL Não apenas SQL
  6. 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. 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. 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
  9. 9. Escalabilidade?
  10. 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. 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. 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. 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
  14. 14. Vertical
  15. 15. Horizontal
  16. 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. 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. 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
  19. 19. Escalabilidade em RDBMS
  20. 20. Antes de escalar, aplique os band-aids
  21. 21. Desnormalização
  22. 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. 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. 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. 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. 26. Cache Faça o máximo de cache possível, evite ao máximo o acesso ao banco de dados
  27. 27. Cache Guarde o resultado da Tag Cloud por uma hora em cache
  28. 28. Agora sim, podemos escalar RDBMS
  29. 29. Replicação Mestre → Escravo
  30. 30. Replicação Mestre → Escravo
  31. 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
  32. 32. Replicação Mestre → Mestre
  33. 33. Replicação Mestre → Mestre
  34. 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
  35. 35. Particionamento Vertical
  36. 36. Particionamento Vertical
  37. 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)
  38. 38. Particionamento Horizontal (Sharding)
  39. 39. Particionamento Horizontal (Sharding)
  40. 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. 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. 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
  43. 43. Todo banco NoSQL é altamente escalável?
  44. 44. Todo banco NoSQL é altamente escalável? Resposta curta: Não
  45. 45. Todo banco NoSQL é altamente escalável? Resposta curta: Não Resposta longa: No final dos slides
  46. 46. Escalabilidade de bancos NoSQL
  47. 47. CouchDB Orientado a documento Replicação (atualmente) Volume de dados não pode ultrapassar o limite do servidor
  48. 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. 49. Riak Chave valor (key-value, Hash) Distribuído (particionamento, balanceamento de carga e replicação) Altamente escalável
  50. 50. Cassandra Orientado a coluna Distribuído (particionamento, balanceamento de carga e replicação) Altamente escalável Digg, Twitter
  51. 51. Hbase Orientado a coluna Distribuído (utiliza o Hadoop como base, HDFS + MapReduce) Altamente escalável
  52. 52. Todo banco NoSQL é altamente escalável? Apenas os bancos NoSQL distribuídos (Cassandra, Riak, Hbase, Voldemort)
  53. 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. 54. Conclusão NoSQL não é sinônimo de alta escalabilidade Opte por NoSQL's distribuídos se precisar de escalabilidade
  55. 55. Obrigado! Perguntas?

×