Conheçendo sobre NoSQL

Daniel Dias
Daniel Dias
Published in
5 min readNov 4, 2016

A primeira postagem do blog será sobre a minha monografia de especialização em Desenvolvimento Java. Neste capitulo descrevo o assunto NoSQL.

Boa Leitura.

NOSQL

Segundo Marchioni (2015) NoSQL (Not Only SQL) é um termo genérico para referenciar um banco de dados que não segue o modelo tradicional de bancos relacionais como Oracle Data Base por exemplo. Os dados não são relacionais e geralmente não usa SQL como uma linguagem de consulta. A maioria dos bancos de dados que seguem esse modelo são categorizados de NoSQL onde se concentram em disponibilidade e escalabilidade, apesar de atomicidade ou consistência também.

Segundo Shakuntala e Navin (2015) em 1998, Carlo Strozzi citou o termo NoSQL pela primeira vez para identificar um banco de dados que não continha uma interface SQL. Esse mesmo termo ressurgiu no início de 2009, quando Eric Evans( um funcionário da Rackspace) usou este termo em um evento de código aberto de bancos de dados distribuídos para se referir aos bancos de dados distribuídos que não eram relacionais e que não seguia as características ACID dos bancos relacionais.

Nascimento (2010) explica que diferente de outros sistemas de armazenamentos, o NoSQL veio suprir as necessidades dos bancos relacionais onde são ineficazes. Onde tem a necessidade de ter uma performance e uma escalabilidade alta e superior, e nessa parte os bancos relacionais são restritos. Pois, sendo necessária à sua distribuição de servidores em vertical, ou seja, quanto mais dados,irá precisar de mais memória e mais disco para um servidor funcionar corretamente. Com tudo, o NoSQL tem uma facilidade na sua distribuição horizontal, onde temos mais dados, mais servidores, porém não há necessidade de ter uma alta performance. Além disso, os bancos de dados NoSQL são muito tolerantes a erros.

Segundo o site da Devmedia (2014) o NoSQL não veio substituir os bancos relacionais, mas oferecer uma alternativa de um banco de dados mais flexível para suporta o volume de dados para uma empresa.

Brito (2010) explica quando se substitui um banco relacional pelo o NoSQL, a sua arquitetura poderá perder em consistência, porem se ganha em flexibilidade, disponibilidade e performance, conforme o a teorema de CAP.

Segundo Shakuntala e Navin (2015) em 2000 Eric Brewer delineou o teorema CAP. Esse teorema indica que quando criado uma aplicação em um ambiente distribuído, existe três requisitos básico que são consistency, avaliability e partition tolerance (CAP), onde que:

  • Consistency: Significa que os dados ira permanecer consistentes após uma operação que altera os dados é executada e que todos os usuários que acessa a aplicação vejam os mesmos dados atualizados.
  • Avaliability: Significa que o sistema estará sempre disponível para os usuários.
  • Partition Tolerance: Significa que o sistema irá continuar o seu funcionamento, mesmo que seja dividida em grupos de servidores que não são capazes de se comunicar um com o outro.

Segundo Brito (2010) é impossível um sistema distribuído garantir, de uma forma simultânea os três requisitos. Pois no teorema, um sistema distribuído somente pode garantir duas desses três requisitos simultaneamente, como demonstrados na figura 1.

figura-1

Figura 1 — Fonte: Shakuntala Gupta Edward, Navin Sabharwal.,2015, p.16

VANTAGENS E DESVANTAGEM DO NOSQL

Shakuntala e Navin (2015) descrevem as seguintes vantagens e desvantagem em está utilizando banco NoSQL:

VANTAGENS:

  • Alta Escalabilidade: Nesta abordagem a intensificação falha quando suas taxas de transação e requisitos de resposta aumentam rapidamente. Com isso o NoSQL foi projetado para escalar, ou seja, expandir horizontalmente utilizando servidores de comodidade low-end.
  • Capacidade de gerenciamento e administração: Os bancos NoSQL, foram projetados principalmente para trabalhar com reparos automatizados, dados distribuídos e modelo de dados mais simples, levando uma baixa capacidade de gerenciamento e administração.
  • Baixo custo: Normalmente concebido para trabalhar com um cluster de servidores de comodidade mais baratos, assim permitindo aos usuários armazenar e processa muito mais dados a um baixo custo.
  • Modelos de dados flexíveis: Por ter um modelo de dados flexível, o NoSQL permite trabalhar com qualquer tipo de dados.

DESVANTAGENS:

  • Maturidade: A maioria dos bancos NoSQL são versões de pré-produção com algumas características chave que estão em fase de ser implementadas.
  • Suporte: O suporte é uma limitação, pois a maioria dos bancos NoSQL são de startup de código aberto. Com isso, o suporte é mínimo se comparado com as empresas de software proprietário e que não pode ter acesso ou de apoio a recurso globais.
  • Capacidades limitadas: Os bancos NoSQL são geralmente desenvolvidos para atender as exigências de escalonamento de aplicações web, pois eles fornecem capacidade de consultas limitada. Contudo, para uma consulta simples, pode exigir conhecimento em programação.
  • Administração: Embora o NoSQL seja projetado para não fornecer uma solução de administração, ainda requer habilidades e esforç0 para a sua instalação e manutenção da solução.
  • Peritos: NoSQL ainda é uma área em evolução, conhecimentos sobre a tecnologia é limitada em comunidades de desenvolvedores e administradores.

OS TIPOS DE BANCOS DE DADOS NOSQL

Existem diversos tipos de banco de dados NoSQL com diferentes tipos de armazenamento e na forma de como esses dados são tratados para atingir um determinado objetivo.Nascimento (2010) descreve alguns deles:

  • Key/Value Store: Esse é o tipo de banco de dados NoSQL mais simples. O conceito dele é uma chave e um valor para essa chave, mas ele é o que aguenta mais carga de dados. Estes tipos de bancos de dados são que tem a maior escalabilidade: Berkeley DB, Tokyo Cabinet, Kyoto Cabinet, Project Voldermort, MemcacheDB, SimpleDB, Redis,Riak, Oracle NoSQL Database.
  • Wide Columns Store: Fortemente inspirados pelo Big Table do Google, suportam várias linhas e colunas, e também permitem subcolunas. Além do Big Table do Google, outros que usam essa tecnologia são: HBase (Apache), HiperTable, Cassandra (Apache).
  • Document Store: Baseado em documentos XML ou JSON, podem ser localizados pelo seu id único ou por qualquer registro que tenham no documento: CouchDB (Apache), MongoDB, RavenDB.
  • Graph Store: Esses são bancos de dados relacionais que tem características do NoSQL. A principal diferença deles é que os dados são armazenados em colunas, ajudando na escalabilidade: Vertica, MonetDB, LucidDB, Infobright, Ingres/Vectorwise.

Concluímos de descrever os conceitos sobre o que venha a ser NoSQL, suas vantagens e desvantagens, além de apresentar o teorema de CAP proposto por Eric Brewer em 2000. Também foi descrito uma pequena lista dos tipos de banco de dados NoSQL para um determinado objetivo em que serão mais aproveitados os seus recursos.

Nos próximos capítulos serão abordados o uso do MongoDB que é um
banco de dados NoSQL baseado em documentos, onde será demonstrado o
processo de utilização a partir do shell JavaScript, bem como o seu uso em conjunto com a linguagem Java.

REFERÊNCIAS

Brito, Ricardo W. Bancos de Dados NoSQL x SGBDs Relacionais: Análise Comparativa*. Fortaleza, mai. de 2010. Disponível em: <http://www.infobrasil.inf.br/userfiles/27-05-S4-1-68840-Bancos%20de%20Dados%20NoSQL.pdf>. Acesso em:2 de junho de 2016.

DevMedia. Comparando o NoSQL ao modelo relacional. Rio de Janeiro, jul. de 2014. Disponível em :<http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=30917>. Acesso em: 7 de maio de 2016.

IMaster-Nascimento, Jean.NoSQL–você realmente sabe do que estamos falando?. São Paulo, mai.de 2010. Disponível em:<http://imasters.com.br/artigo/17043/banco-de-dados/nosql-voce-realmente-sabe-do-que-estamos-falando?trace=1519021197&source=single >. Acesso em: 7 de maio 2016.

Marchioni, Francesco.Mongo DB for Java Developers. Birmingham:Packt Publishing Ltd,2015.

Shakuntala Gupta Edward; Navin Sabharwal. Pratical MongoDB. New Delhi, Delhi, India: Apress,2015.

--

--

Daniel Dias
Daniel Dias

SouJava Board Member, JCP Member, JSR-371 (MVC 1.0), JSR-382 (Config) specifications contributor, EG JSR-385 (UoM) and Eclipse Committer .