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/
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:
- 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 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, OpenERP, Previdê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











28 Comentários
Qual a sua opinião?