CARACTERÍSTICAS
- Uma espécie de ORM para o Cassandra
- Precisa apenas de anotações na classe para persistir informações
- Persiste muito objetos java de uma maneira bastante fácil
- Escreve e ler no Cassandra com Level Consistency.
- O primeiro compatível com versões acima do Cassandra 0.8
- Compatível com CQL 2.0
- O primeiro a usar invokedynamic ao invés de Reflection
- Sob a licença Apache versão 2.0
- Suporte aos seguintes objetos
As novidades nessa versão:
- Criação de Famílias de colunas e índices secundários em tempo de execução
- Suporte ao CQL 2.0
- suporte a chamada de chaves com 'in'
Para demonstrar essa nova versão será apresentado um exemplo prático com uma aplicação simples. Essa aplicação terá o objetivo de armazenar informações da média de renda dos brasileiros agrupados por CEP, a ideia seria saber quanto é gerado em reais e o número de entidades comerciais ( padarias, mercados, mercadinhos, açougues etc.) que geram esse valor em um determinado local, CEP. Assim será armazenado aproximadamente 640 mil informações a cada levantamento de estudo.
Cada requisição para o estudo terá as seguintes informações:
- Código do Lote
- Quantidade de pessoas calculadas no setor CEP
- Valor computado
- Cidade
- Logradouro
- Bairro
- Cep
- Tipo do logradouro
- Estado
- Sigla
Para armazenar essas informações será utilizado o banco nosql Cassandra que é:
- Altamente confiável: Utilizado por diversas empresas entre elas Cisco, Reddit, Twitter. O maior cluster conhecido do Cassandra possui mais de 300 tb em 400 máquinas .
- Tolerante a falhas: Os dados são replicados automaticamente para múltiplos nós para a tolerância a falhas.
- Descentralizado: Já que não existe ponto de falha nem gargalhos de rede. Já que cad nós é idêntico .
- Configurável: Se pode escolher de uma maneira bastante simples se será uma atualização síncrona ou assíncrona além de possuir Hinted Handoff e Read Repair .
- Escalável: Com ele tanto a escalabilidade horizontal e vertical poderão ser feitas de uma maneira bastante simples. Além de adicionar novas máquinas podem ser adicionadas sem tempo de interrupção .
- Durável: Foi projeto para não perder informações mesmo quando vários nós falham.
Para facilitar o desenvolvimento será utilizado o Easy-Cassandra que funcionará como uma camada de acima do Thrift facilitando as chamadas para o Cassandra, aumentando a produtividade além de deixar o código mais limpo. Para seu funcionamento é necessário baixar a lib do framework além de suas dependências (mais informações no final do artigo). Para facilitar o gerenciamento dessas lib nesse exemplo será utilizado o maven, para ter acesso o projeto é necessário adicionar o repositório além da tag da lib conforme mostra a tabela 1.
Lisatgem 1: chamada do repositório e chamada da lib do Easy-Cassandra
org.easycassandra
EasyCassandra
1.0.8
easycassandra
http://otaviojava.googleCODE.com/svn/repository/
Listagem 2: Mapeamento das classes para o controle de renda por cep
@ColumnFamilyValue(name = "controle")
public class ControleRenda implements Serializable {
@KeyValue(auto = true)
private Long id;
@EmbeddedValue
private Endereco endereco;
@ColumnValue(name = "valor")
private Double valor;
@ColumnValue(name = "quantidade")
private Long quantidade;
//getter and setter
}
public class Endereco implements Serializable {
@ColumnValue(name="cidade")
private String cidade;
@ColumnValue(name="logradouro")
private String logradouro;
@ColumnValue(name="bairro")
private String bairro;
@IndexValue
@ColumnValue(name="cep")
private String cep;
@ColumnValue(name="tp_logradouro")
private String tp_logradouro;
@ColumnValue(name="estado")
private String estado;
@ColumnValue(name="sigla")
private String sigla;
// getter and setter
}
Para simular essas requisições foi utilizado um arquivo texto com aproximadamente 640 mil linhas. Cada linha possui as informações separado por pipe '|'.
Para rodar o nosso exemplo é necessário que o Cassandra esteja rodando já que tanto a família de colunas tanto a chave secundária serão criados em tempo de execução graças ao um recurso da nova versão.
Listagem 3: Novo Recurso
create keyspace renda;
Nesse artigo foi demonstrado um exemplo prático utilizando o Easy-Cassandra 1.0.8 junto com o maven, realizando um programa simples com 640 requisições. Foi demonstrado alguns novos recursos como a criação da família de coluna e a chave secundária em tempo de execução.
Referências:
Easy-Cassandra: Easy-CassandraDocumentação, lib e código exemplo (Maven_Example.rar): Download Easy-Cassandra
wiki: Easy-Cassandra wiki