Os banco de Dados NOSQL (not only SQL) foram criados, principalmente,para resolver problemas com aplicações web que precisam operar com gigantescas cargas de dados além de poder escalar com grande facilidade. Esses tipos de banco de dados vem sendo usados com muita frequência em redes sociais como Twiter, Facebook, além de persistência em aplicações nas nuvens. O Cassandra é um tipo de banco nosql que originalmente foi criado pelo Facebook e que atualmente é mantido pela Apache e outras empresas. Ele é um sistema de banco de dados distribuído baseado no modelo Big Table do Google e no sistema de armazenamento Dynamo da Amazon.com. Esse artigo tem como objetivo de realizar um passo a passo de um pequeno exemplo para persistir informações no Cassandra.

Para demonstrar um pouco do Cassandra será utilizado o Easy-Cassandra que é um framework open souce que visa está facilitando o uso desse banco nosql.

Listagem 1: Classe modelada com anotação para persistir a informação no Cassandra


@ColumnFamilyValue(nome = "person")//
public class Person implements Serializable { 

private static final long serialVersionUID   = 3L;

@KeyValue(auto=false)
private Long id;

@IndexValue//indica que esse campo é um índice
@ColumnValue(nome = "name")//indica   que será uma coluna e o seu nome
private String name; 

@ColumnValue(nome = "year")
private Integer year;

@EnumeratedValue(nome="sex")//indica que esse campo será um enum alem do nome do campo
private Sex sex;

@EmbeddedValue//indica que a classe Address esta embutida na classe Person
private Address address;
//getter and setter
}
Listagem 2: Classe que realiza a chamada para o banco de Dados

     
public class PersonDAO {

private Persistence persistence;

public PersonDAO() {
persistence =   EasyCassandraManager.getPersistence("javabahia",   "localhost", 9160);
}

public void create(Person bean) {

   persistence.insert(bean);
}

public void remove(Person bean) {
          persistence.delete(bean);
}

public void remove(Long id){
           persistence.deleteByKeyValue(id,   Person.class);
} 

public void update(Person bean) {

          persistence.update(bean);
}
public Person retrieve(Object id) {

              return (Person)   persistence.findByKey(id, Person.class);
}
@SuppressWarnings("unchecked")
public List listAll() {

  return   persistence.findAll(Person.class);
}

@SuppressWarnings("unchecked")
public List   listByIndex(Object index) {
   return   persistence.findByIndex(index, Person.class);
}
}

O código do pode ser baixado no link no final do artigo ao se observara modelagem será visto as anotações a seguir:

• ColumnFamilyValue anotação para indicar o nome da Família de Coluna.
• ColumnValue indica os campos dentro da Família de Coluna,os formatos de campos disponíveis nessa versão são:

1) java.lang.Boolean
2) java.util.Date
3) java.lang.Double
4) java.lang.Float
5) java.lang.Integer
6) java.lang.Long
7) java.lang.String


• KeyValue: Indica que esse campo será a chave da família de consulta, existe a opção de auto_increment que vem desabilitada por padrão.
• IndexValue: indica que esse campo é um índice, assim como a chave com ele você pode buscar informações a partir desse campo o máximo de índice criado é um, mas mesmo criando apenas um índice existe um perda de performance considerável ou seja faça o máximo possível para não se ter índice.
• EnumeratedValue: indica que esse campo é do tipo Enum
• EmbeddedValue: essa anotação indica que existe mais campos dentro dele, a persistência continuará na forma de uma grande tabela, mas esse campo é útil para modelar a informação em mais objetos.

As anotações ColumnFamilyValue, ColumnValue e EnumeratedValue caso o campo “name” não seja preenchido o padrão é o nome da classe ou nome da variável.

Tão logo o código tenha sido observado vamos colocar o código para rodar. Os requisitos para o código funcione são os seguintes:
• JDK 7 ou acima
• O cassandra esteja rodando
• Criar o Keyspace e Family column
• Realizar a anotação na classe
• Realizar a chamada para salvar objeto
• Adicionar a Lib do Cassandra
• Adicionar as dependências do Thrift
Para rodar o pequeno exemplo siga os seguintes passos:

• Baixe o apache cassandra aqui
• Descompacte o arquivo e entre no arquivo descompactado
• Ao entrar na pasta inicie o Cassandra com o seguinte comando:


./bin/cassandra   -f


• Em seguida use no modo cliente para isso com outro terminal entre na pasta recém descompactada e execute o seguinte comando:


./bin/cassandra-cli   -host localhost


• No modo cliente para criar um keyspace e família de coluna execute:


create keyspace javabahia;use javabahia;create column family person withcomparator = UTF8Type andcolumn_metadata =[  {column_name: name, validation_class: UTF8Type, index_type: KEYS}]; 


• Realize o download do projeto
• Realize o download das libs e adicione elas no classpath no projeto
• Pronto agora seu primeiro exemplo com o Cassandra funciona.

Esse artigo teve como objetivo a mostrar um pequeno exemplo persistindo informações no Cassandra para isso foi utilizado o Easy-Cassanda. O exemplo está disponíveis tanto para o net beans tanto para o Eclipse.

Download do código e das Libs:
https://github.com/otaviojava/Easy-Cassandra/downloads


WikiEasy-Cassandra:
https://github.com/otaviojava/Easy-Cassandra/wiki

homeEasy-Cassandra:

https://github.com/otaviojava/Easy-Cassandra

Mais sobre nosql e Cassandra:
http://otaviosantana.blogspot.com/2011/11/desenvolvendo-com-nosql-cassandra-em.html
http://otaviosantana.blogspot.com/2011/11/desenvolvendo-com-nosql-cassandra-em_20.html
http://otaviosantana.blogspot.com/2011/12/desenvolvendo-com-nosql-cassandra-em.html