O que é?


NoSQL refere-se a um banco de dados que não é baseado em SQL (Structured Query Language), que é a língua mais comumente associado com bancos de dados relacionais. Essencialmente, o banco de dados NoSQL promove soluções de armazenamento de dados não relacionais, ou seja é um banco não-relacional, não exigem esquemas de tabela fixa e por isso tem modelos de consistência mais flexível do que os bancos de dados relacionais tradicionais (esses contem esquemas rígidos e exigem que todos os campos sejam definidos previamente com base nos dados armazenados).


Outra diferença entre o SQL e NoSQL é que o SQL tem a scalability vertical e permite gerenciar o aumento da carga se, por exemplo a CPU, RAM ou SSD, em um único servidor forem aumentados. O NoSQL a scalability é horizontal e, dessa forma, é possível simplesmente adicionar mais alguns servidores em sua infraestrutura para lidar com o grande tráfego.


NoSQL é composto por diversas ferramentas que, de forma particular e específica, resolvem problemas como tratamento de grandes volumes de dados, execução de consultas com baixa latência e modelos flexíveis de armazenamento de dados, como documentos XML ou JSON. As tecnologias NoSQL não têm como objetivo substituir nem eliminar os bancos de dados relacionais, mas apenas propor algumas soluções e oferecer alternativas que, em determinados cenários, são mais adequadas.


NoSQL abrange uma grande variedade de diferentes tecnologias de banco de dados que foram desenvolvidas em resposta a um aumento do volume de dados armazenados sobre usuários, objetos e produtos, a frequência em que esses dados são acessados , e desempenho de processamento e necessidades. Tendências em arquiteturas de computadores, como a computação na nuvem e a necessidade crescente de prover serviços escaláveis, estão pressionando bancos de dados numa direção onde eles necessitam oferecer scalability horizontal. Bancos de dados NoSQL armazenam os dados com técnicas que visam atender a esse requisito. Há alguns exemplos proeminentes de softwares de código fechado que atendem estes requisitos, sendo alguns deles o BigTable, do Google, IBM Cloudant e o DynamoDB, da Amazon. E alguns exemplos de software open-source como Apache Cassandra (originalmente desenvolvido para o Facebook), Apache HBase, LinkedIn's e vários outros.


Em outras palavras, pode-se dizer que o NoSQL é um sistema de gerenciamento de banco de dados sem limites arbitrários, exceto pela memória e velocidade do processador em que está sendo executado.


No quesito de data storage model, No SQL os registros individuais (por exemplo , "empregados" ) são armazenadas como linhas e colunas em tabelas , (por exemplo , "manager ", " data contratado ", etc.) , bem como uma folha de cálculo. Tipos de dados separados são armazenados em tabelas separadas, e depois se juntaram quando as consultas mais complexas são executadas. Por exemplo, "escritórios" pode ser armazenado em uma tabela, e "empregados" em outra. Quando um usuário quer encontrar o endereço de trabalho de um empregado é possível unir as tabelas empregados e escritório para obter todas as informações necessárias .


Ao passo que no NoSQL essa forma de armazenamento muda dependendo do tipo de banco de dados . Por exemplo, o campo chave primária funciona de forma semelhante aos bancos de dados SQL , mas tem apenas duas colunas ( "key" e "valor"), com informações mais complexas , por vezes, armazenados dentro da coluna "valor" . Essa nova disposição de informações acaba com o modelo de tabela - e - linha por completo, pois consegue armazenar todos os dados relevantes juntos em um único espaço, em JSON , XML, ou outro formato .

Quando usar?


O NoSQL é usado, por exemplo na replicação de dados, que se refere ao armazenamento de dados e a estratégia de backups entre computadores em locais distintos.

Além disso, ele é aplicável em cenários onde sistemas de banco de dados tradicionais não são suficientes ou adequados às necessidades específicas, tais como:

baixa latência, grandes volumes de dados, escalabilidade ou estruturas em que as conexões entre os dados são tão importantes quanto o próprio dado.


Vantagens


Ao se fazer uma analogia, define-se bancos de dados SQL como transmissão automática e bancos de dados NoSQL como transmissão manual. Desta forma, NoSQL permite mais desempenho do sistema , eliminando uma série de verificações de integridade feitas por bancos de dados relacionais da camada do banco de dados.


Quando comparado com bancos de dados relacionais, bancos de dados NoSQL são mais “escaláveis” e proporcionam um desempenho superior. Seu modelo de dados aborda várias questões que o modelo relacional não é projetado para lidar, como é o caso de grandes volumes de dados estruturados, semiestruturados e não estruturados; programação orientada a objetos que é fácil de usar e flexível e arquitetura scale-out, que é eficiente e de baixo-custo.


Scaling Elastic: A nova geração de bancos de dados NoSQL são projetados para expandir de forma transparente e horizontalmente para tirar proveito dos novos nós. Para NoSQL, os servidores podem ser adicionados ou removidos a partir da camada de dados sem tempo de inatividade do aplicativo.


Capacidade de manipulação de Bigger Data: Capacidade dos banco de dados relacioais tem vindo a crescer devido ao aumento no volume de dados, mas as limitações de volumes de dados que pode ser controlado por um único banco de dado relacional são intoleráveis para algumas empresas.


Manutenção de servidores NoSQL é mais barata: Os bancos de dados NoSQL requerem menos gestão. Características como reparo automático, fácil distribuição de dados, e modelos de dados mais simples fazem a administração e a necessidade de tuning menos frequente.


Nenhum modelo de esquema ou dados fixos: Os dados podem ser inseridos num banco de dados NoSQL sem definir previamente um esquema de banco rígido. Assim, o modelo de formato ou de dados que está sendo inserido pode ser alterado a qualquer momento, sem interrupção do aplicativo. Isso proporciona imensa aplicação e flexibilidade de negócios, uma vez que no SQL normal uma mudança, mesmo que seja pequena, é muito trabalhosa.

Desvantagens


Ao se fazer uma analogia, define-se bancos de dados SQL como transmissão automática e bancos de dados NoSQL como transmissão manual. Desta forma, depois de mudar para NoSQL , você se torna responsável por uma grande quantidade de trabalho que o sistema se encarrega de automaticamente em um sistema de banco de dados relacional .


NoSQL não têm interfaces padrão para executar consultas complexas, e as próprias consultas em NoSQL não são tão poderosos como linguagem de consulta SQL. Alternativas e soluções ainda estão em estágios iniciais e pré -produção e muitos recursos importantes ainda estão para ser implementados no NoSQL.


O suporte do sistema NoSQL é fornecido por pequenas empresas start -up , sem o alcance global , recursos ou credibilidade da Oracle, Microsoft ou IBM , nomes clássicos associados ao SQL.


Em NoSQL, mesmo uma consulta simples exige conhecimento significativo de programação. Ainda não tem uma padronização e é considerado não intuitivo para programar.


Ferramentas de BI (Business Intelligence) comumente utilizadas não fornecem conectividade para NoSQL . Elas são as responsáveis pela interface que o usuário final terá com as informações armazenadas na estrutura de BI, que normalmente estará armazenada no Data Warehouse. Ou seja, ela é a vitrine que o analista de negócios ou gestor terá com o BI, por isso a grande importância da ferramenta dentro da solução como um todo.

Exemplos


A seguir são citados alguns bancos NoSQL e suas devidas características.


Redis ----> Adota o modelo chave-valor, utiliza a memória para alocação de dados e é ideal para utilização de Cache


MongoDB ----> Implementa o modelo baseado em documentos, tem foco no tratamento de grandes volumes de dados e é ideal para grande parte das aplicações web.


Neo4j ----> É uma das ferramentas NoSQL mais maduras, tem o modelo baseado em grafos e seus principais casos de uso estão relacionados a motores de recomendação, análise de rotas geográficas e redes sociais.


Cassandra ----> É uma implementação open source do modelo de dados do BigTable com a arquitetura distribuída do Dynamo.


CouchDB ----> Usa JSON para documentos, JavaScript para MapReduce e regula HTTP por um API


GemFire ----> Plataforma que permite scalabilityde forma dinâmica e alta performance.


Mnesia ----> Sistema de gerenciamento de banco de dados distribuído que apresenta propriedades soft em tempo real.

Conclusão


SQL e NoSQL têm sido grandes invenções ao longo do tempo na área de gestão de dados e foram usados para manter o armazenamento e recuperação de dados otimizada. Ainda é difícil criticar um e ir completamente com a outra opção. Ambas as tecnologias são os melhores no que fazem e um desenvolvedor deve estudar o problema antes para depois utilizá-los de maneira adequada. Dependendo das situações e necessidades de negócios. Apesar dos bancos de dados NoSQL estarem se tornando parte importante da paisagem de banco de dados , as empresas ainda devem proceder com cautela e estar ciente sobre as limitações associadas a ele.

Referência


[1] O que é NoSQL¿ Disponível em <http://www.devmedia.com.br/o-que-e-nosql-java-magazine-87/19015>. Acesso em: 15 fev. 2015 [2] NoSQL vs SQL – Which is a Better Option? Disponível em <https://blog.udemy.com/nosql-vs-sql-2/>. Acesso em: 15 fev. 2015 [3] Uderstanding NoSQL. Disponível em < https://spring.io/understanding/NoSQL>. Acesso em: 15 fev. 2015 [4] NoSQL databases explained. Disponível em <http://www.mongodb.com/nosql-explained>. Acesso em: 15 fev. 2015