SlideShare a Scribd company logo
1 of 55
Download to read offline
Movimento NoSQL
mitos e fatos sobre escalabilidade de
 bancos de dados não relacionais

               Allisson Azevedo
         allisson 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 SQL
 Não apenas SQL
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
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
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
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 != Performance
   Podemos 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 != Performance
   Podemos ter sistemas escaláveis que usam linguagens
                  “lentas” (Rails escala?)

          Dois tipos: Vertical e Horizontal
Vertical
Horizontal
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
Escalabilidade?
                     Google

             Escalabilidade Horizontal
       Sistema de arquivos distribuído: GFS
Banco de dados distribuído: BigTable (Não relacional)
     Processamento distribuído: Map/Reduce
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
Escalabilidade em RDBMS
Antes de escalar, aplique os band-aids
Desnormalização
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
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
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
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
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?

More Related Content

Similar to Palestra iv-ensol-nosql

Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSAmazon Web Services LATAM
 
NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009Nico Steppat
 
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +final
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +finalEscalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +final
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +finalAmazon Web Services LATAM
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29Juliana Nascimento
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsdcarneir
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftAmazon Web Services LATAM
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRodrigo Recio
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Começando com aplicações serverless na AWS
 Começando com aplicações serverless na AWS Começando com aplicações serverless na AWS
Começando com aplicações serverless na AWSAmazon Web Services LATAM
 
Escalando para os primeiros 10 milhoes de usuarios
Escalando para os primeiros 10 milhoes de usuariosEscalando para os primeiros 10 milhoes de usuarios
Escalando para os primeiros 10 milhoes de usuariosAmazon Web Services LATAM
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPAricelio Souza
 
SQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataSQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataRodrigo Dornel
 

Similar to Palestra iv-ensol-nosql (20)

Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
 
NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009NoSQL - Caelum Day 2009
NoSQL - Caelum Day 2009
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +final
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +finalEscalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +final
Escalando+na+aws+para+os+primeiros+10+milhões+de+usuários+ +final
 
DynamoDB - Uma Introdução
DynamoDB - Uma IntroduçãoDynamoDB - Uma Introdução
DynamoDB - Uma Introdução
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afins
 
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon RedshiftPath to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
Path to the future #5 - Melhores práticas de data warehouse no Amazon Redshift
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Começando com aplicações serverless na AWS
 Começando com aplicações serverless na AWS Começando com aplicações serverless na AWS
Começando com aplicações serverless na AWS
 
NOSQL - Uma real alternativa
NOSQL - Uma real alternativaNOSQL - Uma real alternativa
NOSQL - Uma real alternativa
 
Escalando para os primeiros 10 milhoes de usuarios
Escalando para os primeiros 10 milhoes de usuariosEscalando para os primeiros 10 milhoes de usuarios
Escalando para os primeiros 10 milhoes de usuarios
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
SQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigDataSQL Server Heterogêneo: SQL Server + BigData
SQL Server Heterogêneo: SQL Server + BigData
 

More from Allisson Azevedo

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com AsyncioAllisson Azevedo
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em PythonAllisson Azevedo
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonAllisson Azevedo
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryAllisson Azevedo
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoAllisson Azevedo
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com DjangoAllisson Azevedo
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redisAllisson Azevedo
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para WebAllisson Azevedo
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaAllisson Azevedo
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraAllisson Azevedo
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOLAllisson Azevedo
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Allisson Azevedo
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraAllisson Azevedo
 

More from Allisson Azevedo (16)

Programação Assíncrona com Asyncio
Programação Assíncrona com AsyncioProgramação Assíncrona com Asyncio
Programação Assíncrona com Asyncio
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Construindo um micro framework web em Python
Construindo um micro framework web em PythonConstruindo um micro framework web em Python
Construindo um micro framework web em Python
 
Consumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com PythonConsumindo API's OAuth{1,2} com Python
Consumindo API's OAuth{1,2} com Python
 
Tarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e CeleryTarefas Assíncronas com Django e Celery
Tarefas Assíncronas com Django e Celery
 
Deploy completo de uma aplicação Django
Deploy completo de uma aplicação DjangoDeploy completo de uma aplicação Django
Deploy completo de uma aplicação Django
 
Desenvolvimento Web com Django
Desenvolvimento Web com DjangoDesenvolvimento Web com Django
Desenvolvimento Web com Django
 
Otimizando sites com o nosql redis
Otimizando sites com o nosql redisOtimizando sites com o nosql redis
Otimizando sites com o nosql redis
 
Ecossistema Python Para Web
Ecossistema Python Para WebEcossistema Python Para Web
Ecossistema Python Para Web
 
Empacotamento Rpm Na Pratica
Empacotamento Rpm Na PraticaEmpacotamento Rpm Na Pratica
Empacotamento Rpm Na Pratica
 
Criando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O FedoraCriando Pacotes Rpm Para O Fedora
Criando Pacotes Rpm Para O Fedora
 
Palestra CouchDB III ENSOL
Palestra CouchDB III ENSOLPalestra CouchDB III ENSOL
Palestra CouchDB III ENSOL
 
Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008Ruby on Rails Enecomp 2008
Ruby on Rails Enecomp 2008
 
Desenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto FedoraDesenvolvendo uma distribuição Linux - Projeto Fedora
Desenvolvendo uma distribuição Linux - Projeto Fedora
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 

Palestra iv-ensol-nosql

  • 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
  • 4. No SQL? No SQL?
  • 5. Not Only SQL Não apenas SQL
  • 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
  • 20. Antes de escalar, aplique os band-aids
  • 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
  • 27. Cache Guarde o resultado da Tag Cloud por uma hora em cache
  • 28. Agora sim, podemos escalar RDBMS
  • 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
  • 43. Todo banco NoSQL é altamente escalável?
  • 44. Todo banco NoSQL é altamente escalável? Resposta curta: Não
  • 45. Todo banco NoSQL é altamente escalável? Resposta curta: Não Resposta longa: No final dos slides
  • 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