quinta-feira, 9 de maio de 2013

Entendendo o MongoDB


O MongoDB é um banco de dados orientado a documentos, foi escrito na linguagem C++,  sua aplicação possui código aberto, sem esquemas e de alta performance.
Formado com por documentos da sintaxe JSON que por sua vez sua modelagem pode ser estruturada em complexas hierarquias e continuar a ser indexáveis e fáceis de buscar.
Para os desenvolvedores assim como eu acostumados com os bancos de dados relacionais se assustam ao primeiro contato com o MongoDB porque até então todo conceito estudado e conhecido desaparecem totalmente.

Entendo que é sempre importante conhecer novos paradigmas e abrir a mente para novos conhecimentos, pois o banco de dados do MongoDB é bastante diferente dos bancos de dados relacionais saindo totalmente da nossa zona de conforto.
O modelo relacional é representado por tabelas separadas por linhas e colunas, as relações das tabelas são feitas através de relacionamentos onde por mais que a análise tenha sido bem feita sempre é possível inserir mais atributos.

O MongoDB é totalmente diferente pois ele permite que qualquer tipo de dados seja salvo no banco de dados independente pois não há regras de validações rígidas.

  • Desvantagem: Nesse aspecto abordado o desenvolvedor tem que prestar atenção para base, pois todos os dados são armazenados de qualquer forma sem ter um padrão especifico.

  • Vantagem: Caso haja novos atributos você pode inserir onde necessário e não como o modelo relacional onde normalmente o desenvolvedor criava uma nova coluna na tabela relacionada.

segunda-feira, 6 de maio de 2013

NoSql (Not Only Sql)

Decidimos começar o nosso estudo pelo NoSql (Not Only Sql) . Trata-se de uma classe definida de banco de dados não relacional que em sua composição inclui características de transações ACID que quer dizer (Atomicidade , Consistência , Isolamento e Durabilidade ).  O Nosql foi criado por Carlo Strozzi e o seu conhecido termo foi utilizado pela primeira vez em 1998 como um banco de dados open surce sem interface sql. Porém o seu criador achou que o banco de dados NoSql era totalmente diferente dos bancos de dados relacionais existentes e por tanto deveria ser chamado 'NoRel' ou NoSql.

MongoDB vem da palavra Humongous que em inglês significa algo grandioso .

Os bancos de dados que utilizam a estrutura Nosql não utilizam tabelas fixas  , chaves estrangeiras e Join´s . Não possuindo também a primeira forma normal 1NF.

O NoSql não veio com a proposta de substituir os bancos de dados relacionais existentes , pelo contrário o novo banco de dados veio com a proposta de suprir as necessidades de demandas e mercados onde os SGBDS Relacionais não supriam como a escalabilidade , performance , suporte a dados estruturados e sub colunas . Como os bancos de dados relacionais são muito restritos a escalabilidade e performance principalmente, o NoSql tem uma grande facilidade na distribuição horizontal , ou seja , quanto mais dados , mais servidores . Grandes empresas como o Google , Armazon , Facebook, Linkedin, Twitter, Yahoo, NYTimes entre outros utilizam bancos de dados NoSql para armazenar e gerenciar os seus dados .

Os bancos NoSql agrupam toda a informação em um mesmo registro ao invés de relacionar os dados entre várias tabelas . São subdivididos pelo se núcleo e como trabalham com os dados .

Suas subdivisões são :

WIDE COLUNMS STORE

Suportam várias linhas e colunas e permitem subcolunas

Big Table (Google)
HBase (Apache)
Hipertable
Cassandra (Facebook)

DOCUMENT STORE

Utiliza documentos em XML ou JSON , são localizados por um id único ou por qualquer registro que tenha no documento .

CouchDB (Apache)
MongoDB
Riak
RavenDB

KEY VALUE STORE

Este é o tipo de banco de dados NoSql mais simples , e possui maior escalabilidade .

Berkley DB
Tokyo Cabinet
Project Voldermort
Simple DB
MemcacheDB

GRAPH STORE

Com uma maior complexidade estes bancos de dados guardam objetos  e não registros como outros tipos de NoSql . A busca pelos itens  é realizada pela navegação  desses objetos .

Neo4J
InfoGrid
HyperGraphDB
BigData


COLUMN ORIENTED  STORE

Esses são bancos de dados relacionais que armazena dados em coluna porém possui  características NoSql. Os dados são armazenados em colunas possuindo mais escalabilidade do que os SGBD´S relacionais.

Vertica
MonetDB
LucidDB
Infobright
Ingres/Vectorwise