sábado, 2 de abril de 2011

Introdução a Bancos NOSQL e Apache Cassandra

Olá Pessoal;

Hoje, escrevo este post para falar de uma tecnologia um tanto quanto polêmica ainda, porém que vem tendo crescimento na sua utilização em aplicativos WEB, principalmente com alta escabilidade, estou falando de NoSQL Databases.

NoSQL é uma alternativa aos bancos RDBMS para tentar resolver problemas de escabilidade (para RDBMS pode ser caro ou bastante complexo) e desempenho entre outras caracteristicas. A idéia principal é armazenar dados de uma forma denormalizada, utilizando um padrão chamado key-value, ou seja um valor está sempre associado a uma chave.
Um outro conceito é que cada linha armazenada pode possuir seu próprio esquema, isso facilita a replicação dos dados em vários outros servidores NoSQL.

Empresas como: Facebook, Google, Twitter, Digg, Yahoo utilizam em suas aplicações e são entusiastas de soluções NoSQL.

Eu quero falar especificamente sobre um banco de dados NoSQL que vem crescendo bastante, é o Apache Cassandra que foi desenvolvido primeiramente pelo Facebook que depois entregou o código fonte para a Apache dar continuidade. Escrito em Java e bastante leve, ganhou bastante espaço porque uniu a arquitetura de um banco da Amazon, chamado de Dynamo com o modelo de dados baseado no BigTable do Google e o resultado final ficou bem interessante.

A Estrutura de dados do Apache Cassandra trabalha da seguinte forma:
  • Keyspaces: Comparando com um banco RDBMS é como se fosse um schema, ou seja, em um keyspace, guardamos todas a estrutura de ColumnFamily da nossa aplicação.
  • ColumnFamily: Comparado com um banco RDBMS, seria como uma tabela, ou seja irá guardar várias linhas de dados. Cada linha irá possuir uma chave, essa chave serve de identificador da linha e poderá ter colunas ou sub-colunas para guardar suas informações.
  • Column: Uma coluna é a menor informação possível, é um valor baseado em uma chave. Pode estar associado a um ColumnFamily ou um SuperColumn.
  • SuperColumn: É um conjunto de colunas, ou seja, para cada linha da ColumnFamily, podemos ter SuperColumns que possuam várias colunas.
Para exemplificar, vou demonstrar a estrutura de uma Livraria usando Apache Cassandra, fica assim:

Nessa estrutura, temos:

  • Keyspace Livraria: que irá guardar as informações sobre livros e autores.
  • ColumnFamily Autores: Guarda os dados dos autores, aonde a chave de cada linha é o nome do autor.
  • Column Email: Coluna que armazena o email para cada autor.
  • Column Biografia: Coluna que armazena a biografia para cada autor.
  • ColumnFamily Livros: Guarda os dados dos livros, aonde a chave de cada linha é o nome do livro.
  • Column ISQN: Coluna que armazena um código qualquer do livro chamado de ISQN.
  • Column Autor: Coluna que identifica o autor do livro.
E nossa introdução a respeito de bancos NoSQL e Apache Cassandra fica por aqui, o intuito foi dar de fato apenas uma breve introdução, porque existem materiais muito bons na internet falando a respeito disso.

O motivo dessa introdução é que no proxímo post, irei demonstrar a criação de um CRUD em Java com NoSQL e o banco escolhido foi o Apache Cassandra. No CRUD darei continuidade a está introdução para realizar um cadastro de uma livraria.

Até a proxíma.

Fontes:
pt.wikipedia.org/wiki/Apache_Cassandra
blog.caelum.com.br/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/
http://imasters.com.br/artigo/17043/bancodedados/nosql_voce_realmente_sabe_do_que_estamos_falando/