Lançada
a mais nova versão do framework Easy-Cassandra seu objetivo é estar
facilitando a comunicação entre Apache Cassandra e sua aplicação
em java. Com ele é possível esta criando, atualizando, recuperando
ou deletando os seus objetos java de uma maneira bastante simples,
para isso basta apenas realizar anotações na classe e nos campos.
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.
Cada requisição
representará uma linha no Cassandra que pode varia o seu tamanho de
linha por linha. Assim mapeando as requisições com as anotações
ficará de acordo com a tabela 2.
@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
}
|
Tabela 2: Mapeamento das
classes para o controle de renda por cep
Ao ver a tabela 2 na
classe Endereço existe a anotação @IndexValue no campo cep, essa
anotação faz com que esse campo seja um índice secundário, um
campo que além da chave pode recuperar informações dentro da
linha. Com isso nessa linha além do código de controle ( coluna
chave) a linha pode ser recuperada pelo cep ( campo chave
secundária).
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.
|
Assim basta executar a aplicação e todas as informações estarão persistiradas no cassandra. De fato existe inúmeras maneiras de aumentar a performance do cassandra (configurando o GC, configurando o heap, aumentando o número de nós e clusters, etc.), mas nesse exemplo foi mostrado usando os recursos padrões.
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:
https://github.com/otaviojava/Easy-Cassandra
Documentação, lib e
código exemplo (Maven_Example.rar):
https://github.com/otaviojava/Easy-Cassandra/downloads
Nenhum comentário:
Postar um comentário