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
}
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