Seções iMasters
Banco de Dados + MongoDB

NoSQL – você realmente sabe do que estamos falando?

O termo NoSQL foi usado pela primeira vez em 1998,
como o nome de um banco de dados relacional de código aberto que não
possuía um interface SQL. Seu autor, Carlo Strozzi, alega que o
movimento NoSQL “é completamente distinto do modelo relacional
e, portanto, deveria ser mais apropriadamente chamado ‘NoREL’
ou algo que produzisse o mesmo efeito”. Porém, o termo só
voltou a ser assunto em 2009, por um funcionário do Rackspace, Eric
Evans, quando Johan Oskarsson, da Last.fm, queria organizar um evento
para discutir bancos de dados open source distribuídos. 

NoSQL são diferentes sistemas de armazenamento
que vieram para suprir necessidades em demandas onde os bancos de dados
tradicionais (relacionais) são ineficazes. Muitas dessas bases
apresentam características muito interessantes como alta
performance, escalabilidade, replicação, suporte à dados
estruturados e sub colunas.

O NoSQL surgiu da necessidade de uma performance
superior e de uma alta escalabilidade. Os atuais bancos de dados
relacionais são muito restritos a isso, sendo necessária a
distribuição vertical de servidores, ou seja, quanto mais dados,
mais memória e mais disco um servidor precisa. O NoSQL tem uma
grande facilidade na distribuição horizontal, ou seja, mais dados,
mais servidores, não necessariamente de alta performance. Um grande
utilizador desse conceito é o Google, que usa computadores de
pequeno e médio porte para a distribuição dos dados; essa forma
de utilização é muito mais eficiente e econômica. Além disso, os
bancos de dados NoSQL são muito tolerantes a erros.

No caso dos bancos NoSQL, toda a a informação
necessária estará agrupada no mesmo registro, ou seja, em vez de
você ter o relacionamento entre várias tabelas para formar uma
informação, ela estará em sua totalidade no mesmo registro.

Os bancos NoSQL são subdivididos
pelo seu núcleo, ou seja, como ele trabalha com os dados. Esses núcleos são Wide Column Store/Column Families, Document
Store
, Key Value/Tuple Store,
Eventually Consistent Key Value Store, Graph
Databases
, Object
Databases
, Grid Database
Solutions, XML
Databases
. Lista retirada
de http://nosql-database.org/

Vejamos detalhes.

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. Esses tipos de bancos de dados são
o que tem a maior escalabilidade.

Wide
Columns Store

Fortemente inspirados pelo BigTable, do Google,
eles suportam várias linhas e colunas, além de permitir subcolunas.

Além do BigTable, outros que usam essa
tecnologia são:

Document
Store

Baseado em documentos XML ou JSON, podem ser localizados
pelo seu id único ou por qualquer registro que tenha no documento.

Graph
Store

Com uma complexibilidade maior, esses bancos de dados
guardam objetos, e não registros como os outros tipos de NoSQL. A
busca desses itens é feita pela navegação desses objetos.

Column
Oriented Store

Esses são bancos de dados relacionais, porém
apresentam características do NoSQL. A principal diferença deles é que
os dados são armazenados em colunas, ajudando na escalabilidade.

Como
apresentado no gráfico abaixo, os key-value aguentam maior quantidade de
registros, enquanto os grafos são mais complexos.

Em um projeto, não necessariamente você precisa
usar só um banco de dados Nosql, é possível usá-lo em conjunto com qualquer
outro banco de dados. Os bancos Nosql são indicados para grandes
cargas de dados, exigência de velocidade na consulta e escrita em
grandes volumes de dados.

Ainda segundo o gráfico, 90% dos sites
atualmente podem usar sem problemas algum os bancos de dados
tradicionais, pois o ganho de performance não seria tão
significativo; para os 10% restantes é aconselhável o uso do
NoSQL. 

A idéia que o conceito NOSQL nos passa é que ele
não pode ser generalizado como a resposta de todos seus problemas,
mas sim para problemas específicos. 

Mas qual a diferença entre bancos de dados relacionais e NoSQL?

Banco
de dados Relacionais

  • O
    que é:
    baseia-se em que todos os dados estão guardados em tabelas, pelo
    conceito de entidade e relacionamento. Os dados são separados de
    forma única, tentando diminuir ao máximo a redundância, pois a
    informação é criada pelo conjunto dos dados, onde são as relações
    entre as tabelas que fazem esse serviço.
  • Características:
    tabelas, schema definido, hierarquia, redundância mínima,
    entidade e relacionamento, formas normais, transações
    ACID (Atomicidade, Consistência, Isolamento, Durabilidade).
  • Necessidades: sistemas locais,
    financeiros, corporativos; segurança da
    informação; consistência dos dados. 
  • Marcas:
    DB2,
    Firebird,
    InterBase,
    Microsoft
    SQL Server
    , MySQL,
    Oracle,
    PostgreSQL

  • Cases:
    SAP,
    OpenERPPrevidência
    Social
    ,
    Caixa,
    Itaú,
    Salesforce,
    Vale.

Banco
de Dados NoSQL

  • O que é: uma solução alternativa para os bancos de dados relacionais,
    possuem uma alta escalabilidade e
    desempenho
  • Características: registros,
    schema-free, tolerância à falha, escalabilidade, clusterização,
    mapreduce, sharding.
  • Necessidades: sistemas em nuvem, análises sociais, alta escalabilidade,
    performance na consulta/escrita, replicação.
  • Cases: Twitter,
    Facebook,
    Digg,
    Amazon,
    LinkedIN,
    Google,
    Yahoo,
    The
    New York Times
    , Bit.ly.

Nos próximos artigos falaremos mais do NoSQL e de suas aplicações. Até lá!

*

Com colaboração de Alex Heranndes.

Alex é programador PHP, mas ficou muito tempo em ASP e VB6,
trabalha com javascript, jquery, mexe com programação a mais de 15 anos,
mas só a pouco tempo profissionalmente e esta na onda dos bancos de
dados não relacionais, e está muito empolgado com o MongoDB e Cassandra e
co-fundador do nosqlbr.com.br

Comente também

29 Comentários

marc_adans Marcio

Ontem estava procurando informações sobre esses bancos e hoje tenho a surpresa deste artigo em meus feeds. Obrigado, resumiu e muito minha busca pela informação, estou ansioso para o prox artigo.

PARABENS SUISSA! MUITO BOM O POST. É ISSO AI APROVEITANDO. http://www.galocego.com.br ahhaha abs

Joao Gabriel Nobrega dos Santos

Mto bom brother!! esclareceu algumas coisas q ainda nebulava a minha cabeça em relação ao NoSQL…
Parabéns!! ja to aguardando o próx.

Muito Bom Suissa e Alex…

Em breve irei adotar esta base… e com certeza… MongoDB.
Estou acompanhando pela Lista e pelo site tambem…
nosql.com.br

Parabens
Marcos.

Muito Bom Suissa e Alex… [2]

Ivan Campos

Muito bom artigo porém com uma ressalva
Na parte de diferenças entre o Nosql e os Banco de dados relacionais, na hora de explica de o que é o Nosql a descrição não foi tão detalhada quando a dos bancos relacionais.

No mais Bom artigo, faz algum tempo que estou pensando em estudar o cassandra para uso de uma intranet

Fabio Telles

Acho o movimento do NoSQL muito interessante, mas como toda tecnologia nova (ou não) precisam antes de mais nada terem claro onde NÃO se aplicam. Eu sei que o autor aqui tem noção e provavelmente sabe disso. Mas como muitos se acostumaram com as falhas de integridade do MySQL, muitos desenvolvedores Web esqueceram da importância do ACID.

Saber o que é ACID é o primeiro passo para saber se o seu site pode ou não abrir mão dela. Outro ponto interssante a explorar são os bancos de dados que possuem extensões NoSQL dentro de bancos de dados relacionais, como é o caso do PostgreSQL.

    Jean Nascimento

    Então eu ainda acho interessante criar sistema híbridos, utilizando os relacionais onde o ACID é necessário e dados que sejam mais para análise ou consulta sejam colocados em nosql para que agrege velocidade ao sistema. Tudo vai do contexto do site. Para sites pequenos o NOSQL nem é necessário.

opaa suissa vlw cara.. tbm tava procurando algo simples e objetivo pra entender o que era o nosql.. vlw.. o que acha de no prox. ce mostra como funciona um projeto, algo simples sei la, que trabalhe integrado um nosql e um bd relacional.. fikei pensando q oke deve ser chato é manter a sincronia dos dados no nosql e no bd relacional .. o mais normal seria ficar matendo rotinas de update no nosql? .. ou eu to pirando e nao tem nada a vê? hehehe abrass piah

    Jean Nascimento

    Ah colocar os 2 em sincronia só criando a funçao que faça a ação nos 2 mesmo. O Alex já criou um artigo explicando m sisteminha rodando com nosql. Ja vai dar uma luz para galera começar a programar.

Marcio Hiroyuki Miyamoto

Parabéns Jean e Alex, muito bom o artigo. Dá um norte para quem está começando(como eu) e querem entender o conceito do mesmo.
Parabéns senhores! E obrigado, a comunidade agradece!

gostaria de saber qual é a linguagem de programação, que é utilização na operação desses Banco de Dados ” NOSQL”

Adriano Tadao

Fala Jean tudo jóia?

Parabéns pelo seu artigo, já tenho algum conhecimento sobre bancos no sql e com seu artigo tive o prestígio de aprimorar ainda mais.

Já utilizo o MongoDB com RubyOnRails e indico.

Abraços

    Jean Nascimento

    Interessante, se vc estiver afim de contribuir com artigos nessa área para o nosqlbr.com.br entre em contato cmg.

Olha cara gostei muito da palestra que você deu ontem na Fafit-facic e parabens pelo seu trabalho.
Não fiz nenhuma pergunta ontem mas é que acho que tenho que conhecer melhor o assunto para pelo menos ter uma base do assunto e sua palestra serviu muito pra isso.

Valew.
e Mais uma vez parabéns pelo trabalho.

    Jean Nascimento

    Opa q bom que vc gostou cara, se quiser me adiciona no gtalk é o email q esta aqui no meu perfil, vamos trocar mais idéias.

MUITO BOM!
Add essa página em minhas favoritas!!!!!!rsrsr….ah! madei um e-mail aee pra vc Jean…

    Jean Nascimento

    Ajudarei-te no teu TCC com certeza.

    Kennedi

    Olá estou fazendo um trabalho sobre NoSQL gostaria de uma ajuda para entender melhor como funciona e tenho que dar um exemplo na pratica, pode ajudar com quais ferramentas utilizao etc… agradeço desde já.

    kennedimalheiros@gmail.com

Muito bom artigo, acho isto vai me ajudar no TCC tb, acho que vou ter que usar um banco de dados que guarde Documentos.

Valew pelo artigo.

    Jean Nascimento

    Qquer coisa soh me mandar um email que posso lhe ajudar em pvt.

Muito intereçante,
o desenvolvimento voltado para web deve ganhar com
a velocidade de pesquisa de dados com o NoSQL
Ok!

Boa tarde,

Nada conheço sobre NoSQL, estou pesquisando sobre o assunto, e só vejo bons FeedBack’s.
Mas a minha pergunta é?; Para um sistema de BI com 2 terá de informações, como este conceito se
portaria em um ambiente, com muitos processos de cálculos, gravações, exclusões,
tabelas particionadas etc.

Obrigado,
Adélio.

    Jean Nascimento

    Creio que um bom NOSQL sistema para BI seria o Cassandra o Hadoop amigo! Eles lidam com TB de dados facilmente!

beto

alguem me responde pq eu iria fazer um banco NOSQL cujas características não são segurança da informação??? ai ai hein…

Qual a sua opinião?