NoSQL - Blog da Sudoers
Blog > NoSQL > NoSQL
by aquino.vale 17 Fevereiro, 2015
Linux, NoSQL
NoSQL é uma tecnologia que veio para gerar grande performance e escalabilidade em grande quantidade de dados e o mercado vem se interessando a cada dia com essa tecnologia. Algumas pessoas acreditam que NoSQL significa sem SQL, o que não é verdade. NoSql significa Not Only SQL, ou seja, não somente SQL. É um termo genérico para uma classe definida de banco de dados não-relacionais que rompe uma longa história de banco de dados relacionais com propriedade ACID. Apesar de ser uma tecnologia que ganhou fama recentimente, já é usado pelo google e facebook a muito tempo. Na verdade o google já usa essa tecnologia a mais de 10 anos, sendo que pra eles isso já é uma tecnologia antiga.
Gartner descreve que a convergência e o trabalho mútuo das quatro tendências interdependentes: a interação social, mobilidade, nuvem e a informação. Que essas forças se combinam para capacitar os indivíduos como eles interagem uns com os outros e suas informações através da tecnologia onipresente.
Mas o que faz o mercado olhar com outros olhos para o NoSQL? Por que ele vem chamando atenção das grande empresas?
Quando trabalhamos com banco relacionais, percebemos com o tempo, que quanto maior é o tamanho da base, maior será o tempo de resposta na geração de consultas. Isso se torna inviável em situações onde os dados devem ser mostrados em real-time. Imagine por exemplo uma consulta demorar 5 ou 10 minutos para trazer as informações, esse tempo pode ser a diferença entre ganhar ou perder. E em um ambiente competitivo como o que vivemos atualmente essa demora não é aceitável. O NoSQL veio exatamente para agilizar consultas e buscas de maneira quase que instantânea. Pela sua facilidade em escalar diversos servidores horizontalmente e pela alta performance grandes empresas vem adotando essa tecnologia. Estima-se que a partir de 2015 haverá um grande crescimento pela procura de especialistas big data – (Cientista de Dados).
O NoSQL trabalha sobre algumas variedade de dados, sendo eles: estruturados, semi-estruturados e não estruturados, o que vem sendo bastante prático quando se quer analisar dados oriundos de mídias sociais como: facebook, twitter e etc. Os seus registros são buscados através de hashmaps, arrays associativos ou objetos. A família de NoSQL podem ser definidas em: Chave-Valor, Colunar, Documentos e Grafos. Cada um sendo usado para trazer e processar grandes massas de dados que um ambiente não relacional não seria capaz de suprir com alta performance.
Com o mercado falando em NoSQL, alguns estão achando que os bancos relacionais iram acabar. Pensar isso é errado, pois são duas tecnologias distintas. Um banco de dados relacional trabalha sobre o conceito ACID – http://en.wikipedia.org/wiki/ACID, este conceito é muito importante para um bom funcionamento de uma base de dados, pois sem ele a vida de um DBA seria um caos. O NoSQL trabalha sobre as propriedades BASE e sobre o teorema de CAP que diz que, em um certo momento, só há garantia de duas das três propriedades estejam ativas.
Hoje a internet cria uma quantidade de dados que precisam ser processados, analisados e entregues aos usuários que os requisitaram. Aplicações de grande escala se preocupam com disponibilidade e redundância, essas propriedades são difíceis de se alcançar usando as propriedades ACID, assim se opta por usar a propriedades de BASE.
BA – (Basically Available) – Disponibilidade é prioridade.
S – (Soft-State) – Não precisa ser consistente o tempo todo.
E – (Eventually Consistent) – Consistente em momento indeterminado.
Se fizermos um comparativo entre o BASE e o ACID fica claro que o foco do BASE é disponibilidade e desempenho.
Consistência Forte Fraca Consistência
Isolamento Foco em Disponibilidade
Concentra-se em "commit" Melhor esforço
Transações aninhadas Respostas aproximadas
Disponibilidade Mais simples e mais rápido
Conservador (pessimista) Agressivo (otimista)
Evolução difícil Evolução mais fácil
O motivo para usar o NoSQL são vários, normalmente se procura consistência, disponibilidade e que tenha tolerância a falhas. Mas pelo teorema de CAP um sistema só pode ter duas das três opções.
Consistency (Consistência) – Consistência é a característica que descreve como um sistema fica consistente após uma operação. Significa que uma vez escrito o registro, este fica disponível para ser utilizado imediatamente, ou seja, cada cliente tem sempre a mesma visão dos dados.
Availability (Disponibilidade) – Refere-se à concepção e implementação de um sistema de modo que seja assegurado que este permanece ativo durante um determinado período de tempo. Neste contexto, significa que um sistema é tolerante a falhas de software/hardware e normalmente também permanece disponível durante a atualização de software e hardware.
Partition Tolerance (Tolerância ao Particionamento) – Refere-se a capacidade de um sistema continuar operando mesmo depois de uma falha na rede. Ou seja, significa garantir que operações serão completadas, mesmo que componentes individuais não estejam disponíveis. Tolerância ao Particionamento é a capacidade de um sistema se manter operante mesmo em casos onde ocorra uma interrupção parcial de alguns componentes.
O teorema de CAP explica que em um sistema distribuído é preciso escolher entre duas dessas propriedades, nunca conseguindo usar as três ao mesmo tempo. Assim é preciso escolher entre consistência forte, alta disponibilidade e tolerância ao particionamento
Sistemas CA (Consistência e Disponibilidade) – Os sistemas com consistência forte e alta disponibilidade não sabem lidar com a possível falha de uma partição. Caso ocorra, o sistema inteiro pode ficar indisponível.
Sistemas CP (Consistência e Particionamento) – Para sistemas com consistência forte e tolerância a particionamento é necessário abrir mão da disponibilidade.
Sistemas AP (Disponibilidade e Particionamento) – Existem sistemas que nunca podem ficar offline, portanto, não desejam sacrificar a disponibilidade Para ter alta disponibilidade mesmo com tolerância a particionamento é preciso prejudicar a consistência. Aqui, a ideia é que os sistemas aceitem escritas e sincronizem os dados depois.
Quando o NoSQL é indicado?
Conforme vimos acima, o modelo de dados NoSQL é indicado para aplicações que irão trabalhar com grandes quantidade de dados, onde um modelo relacional já não atende. A grande vantagem no uso de banco de dados não-relacionais está no fato de sua utilização horizontal, ou seja, são indicados para grandes cargas de dados, exigências de velocidade na consulta e escrita de grande volumes.