O documento discute o surgimento e características dos bancos de dados NoSQL, que surgiram para suprir as limitações dos bancos de dados relacionais em lidar com grandes volumes de dados e necessidades de alta performance e escalabilidade. Os bancos NoSQL são subdivididos em categorias como key-value stores, wide column stores, document stores e graph databases.
1. 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 que 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ário 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 e muito mais eficiente e econômica. Alem 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. Que 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.
• Berkeley DB
• Tokyo Cabinet
• Project Voldermort
• MemcacheDB
• SimpleBD
Wide Columns Store
Fortemente inspirados pelo BigTable do google eles suportam várias linhas e colunas,
alem disso ele permite subcolunas. Alem do BigTable do google outros que usam
essa tecnologia são:
• HBase(Apache)
• HiperTable
2. • Cassandra(Apache)
Document Store
Baseado em documentos XML ou JSON, podem ser localizados pelo seu id unico ou
por qualquer registro que tenha no documento.
• CouchDB(Apache)
• MongoDB
• Riak
• RavenDB
Graph Store
Com uma complexibilidade maior esses bancos de dados guardam objetos e não
registros como os outros tipos de NoSQL. A busca destes itens são feitas pela
navegação destes objetos.
• Neo4J
• InfoGrid
• HyperGraphDB
• BigData
Column Oriented Store
Esses são bancos de dados relacionais, porem eles tem caracteristicas do NoSQL a
principal diferença deles é que os dados são armazenados em colunas, ajudando na
escalabilidade.
• Vertica
• MonetDB
• LucidDB
• Infobright
• Ingres/Vectorwise
Como apresentado no gráfico, os key-value aguentam maior quantidade de registros,
enquanto os grafos são mais complexos. Pensar numa conclusão.
3. Em um projeto, não necessariamente você precisa usar só um banco de dados
nosql, você pode usar ele 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 siguinificativo, para os 10% restantes é
aconselhavel 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.
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, sistemas financeiros, sistemas
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
4. uma alta escalabilidade e desempenho
Características: registros, schema-free, tolerância a 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.