Os bancos de dados conhecidos como NoSQL (Not only SQL) surgiram da necessidade de escalar bancos de dados para o resolver os problemas das aplicações web que operam em larga escala. Segundo a definição da wikipedia:
“NoSQL é um um termo genérico para uma classe definida de banco de dados não-relacionais que rompe uma longa história (ou império) de banco de dados relacionais com propriedades ACID. ”
Não podemos dizer que o NoSQL rompe o “império” dos bancos de dados relacionais. Os bancos de dados NoSQL servem para uma gama de problemas que nem sempre são os mesmos dos bancos de dados relacionais.
Muito tem se dito sobre as vantagens em termos de escala dos bancos de dados NoSQL em comparação aos bancos relacionais. Não é verdade que os RDBMS (relational database management system) não escalam. O fato é que eles não escalam facilmente. Vejamos um esquema básico de aplicação web moderna:
A medida que este sistema passa a receber um número maior de usuários começam a surgir nossos primeiros problemas de escalabilidade. Temos então duas opções :
1) Aumentar o poder do nosso servidor, aumentando sua memória, processador e armazenamento. Este tipo de solução é chamada de Escalabilidade Vertical (scale up).
2) Aumentar o número de máquinas de servidores web. Isto é chamado de Escalabilidade Horizontal (scale out). Como mostrado no esquema abaixo :
Suponhamos que nossa aplicação continue crescendo bastante.
Neste esquema acabaríamos chegando a um momento onde o banco seria o nosso maior gargalo uma vez que ele não conseguiria atender a todas as requisições em tempo hábil. Neste momento poderíamos apelar para a Escalabilidade Vertical e fazer um upgrade na máquina que está rodando nosso banco de dados.
Mas esta abordagem é limitada pelo fato de que chegaríamos a um limite de capacidade com uma unica máquina ou chegariamos a um limite de orçamento para conseguir uma maquina extremamente poderosa. Assim nosso próximo passo mais lógico seria tentar escalar horizontalmente nosso banco, ou seja, colocar mais máquinas rodando o nosso banco:
Agora que temos a missão de escalar nosso banco de dados através de múltiplas máquinas, vamos perceber que é bem mais complicado do que com os nossos servidores web. Na maioria dos casos não podemos simplesmente ligar mais uma máquina rodando o banco e esperar que tudo funcione. Vamos precisar de uma série de configurações e alterações nas nossas aplicações para fazer tudo funcionar na nova arquitetura distribuída.
Os bancos de dados NoSQL vem para tornar este processo que muitas vezes é trabalhoso e complicado em um processo mais simples e robusto. Permitindo assim que os desenvolvedores se preocupem mais com suas aplicações e menos com manutenção. Esta facilidade de escala proporcionada por estas soluções tem sido um dos maiores motivos pelos quais os bancos NoSQL se espalharam rapidamente pelas maiores aplicações web em funcionamento na atualidade.
Assim podemos dizer que tanto os bancos de dados relacionais quanto os não relacionais podem coexistir. Eles atendem em sua maioria a casos de usos diferentes como ilustrado na figura abaixo:
No próximo post vamos estudar as principais características que diferenciam os múltiplos bancos de dados NoSQL e vamos agrupar as soluções existentes de acordo com estas características.
E você, acha que o NoSQL pode conviver com os bancos de dados relacionais ? Conte suas experiências escalando RDBMs!
Escrito por: Edmar Ferreira