ARTIGOS:Apache Cassandra, conheça a tecnologia NoSQL

Ir para: navegação, pesquisa

"Neste documento veremos, sem mistério, um pouco da tecnologia emergente NoSQL (Apache Cassandra), que tomou o lugar do banco MySQL no projeto Twitter, segundo as notícias publicadas em toda internet, como também colocou em evidência o assunto. "

Cassandra logo.png

Introdução

Desenvolvido inicialmente pelo Facebook como open source em 2008, cujo objetivo foi ampliar o universo de instalação MySQL, o Cassandra exerce com excelência a função de repositório de dados. Leve e desenvolvido na plataforma Java, ele não apresenta a sobrecarga de recurso do banco de dados convencionais. Atualmente o projeto é baseado na tecnologia emergente NoSQL e encontra-se incubado pela Fundação Apache.

Com poucos minutos de pesquisa na internet, é possível encontrar testes realizados por diversos segmentos demonstrando confiabilidade, escalabilidade e fácil gerenciamento. Atualmente o Twitter apresenta uma massa crítica e pesada baseada no seu monstruoso crescimento atrelado a escala temporal, sendo assim, este cenário é um excelente "caso de sucesso" para o Apache Cassandra.

Instalei o projeto Apache Cassandra e veremos na próxima página, passo-a-passo como fazê-lo sem trauma algum. NoSQL conta com sua maior aplicação atual: 100 terabytes de dados e 150 servidores (uma base consideravelmente grande). Diversas APIs de acesso proporcionam o seu uso de forma muito simples (Ruby, Perl, Scala, Python, PHP e Java).

O Digg usa o Cassandra, o Facebook (desenvolvedor original) e agora o Twitter. Isto demonstra que a desnormalização de dados não é um problema onde geralmente leva-se em conta ao custo do espaço em disco. O vasto campo do NoSQL está gerando grandes interesses, e as sua técnicas estão colocando em evidências os bancos de dados NoSQL.

Jogo rápido, download e instalação

A instalação do java pode ser efetuada com a utilização do YaST (presente na distribuição openSUSE), selecione o java de sua preferencia (6 ou superior) e pressione o botão Aceitar conforme a ilustração abaixo.

Java-1.jpeg

Agora devemos efetuar o download em: http://linorg.usp.br/apache/cassandra/0.5.1/apache-cassandra-0.5.1-bin.tar.gz

Logado como usuário root, descompacte o pacote com o tradicional comando "tar -zxvf" e configure a variável ambiental CASSANDRA_HOME. Logo a seguir, modifique o arquivo storage-conf.xml conforme as suas necessidades e crie as pastas:

cd /opt tar -zxvf apache-cassandra-0.5.1-bin.tar.gz export CASSANDRA_HOME=/opt/apache-cassandra-0.5.1

cd /opt/apache-cassandra-0.5.1/conf/ vi storage-conf.xml

Crie os diretórios especificados no arquivo storage-conf.xml mencionado anteriormente.

mkdir -p /var/lib/cassandra/commitlog mkdir /var/lib/cassandra/data mkdir /var/lib/cassandra/callouts mkdir /var/lib/cassandra/staging mkdir -p /var/log/cassandra mkdir -p /var/lib/cassandra

ATENÇÃO: Se você optou baixar o código fonte, basta utilizar o comando abaixo para compilar o pacote.
ant ivy-retrieve

Pronto, inicie o serviço Cassandra executando o script "cassandra" na pasta bin seguido do parâmetro -f:

# bin/cassandra -f

Para executar o cliente, entre na pasta /opt/apache-cassandra-0.5.1/bin/ e execute o comando "cassandra-cli" seguido no IP do servidor e a porta. No nosso caso, utilizaremos o valores default (localhost e porta 9160).

# cd /opt/apache-cassandra-0.5.1/bin/

./cassandra-cli --host localhost --port 9160 Connected to localhost/9160 Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.

Cassandra>

Agora no console cliente do Cassandra, utilize os comandos do exemplo abaixo para inserir uma chave:

cassandra> set Keyspace1.Standard1['cabelo']['first'] = 'Alessandro' Value inserted. cassandra> set Keyspace1.Standard1['cabelo']['last'] = 'Faria' Value inserted. cassandra> set Keyspace1.Standard1['cabelo']['age'] = '38' Value inserted.

Consultando a chave inclusa anteriormente:

cassandra> get Keyspace1.Standard1['cabelo'] => (column=6c617374, value=Faria, timestamp=1267416876445) => (column=6669727374, value=Alessandro, timestamp=1267416865908) => (column=616765, value=38, timestamp=1267416894415) Returned 3 results.

Excluindo a chave adicionada anteriormente:

cassandra> del Keyspace1.Standard1['cabelo'] row removed.

E o desenvolvimento? Para os desenvolvedores, sugiro o projeto Cassandra Java Client. A seguir uma receita de bolo (da página oficial) de como efetuar o download e testá-lo:

$ svn checkout https://cassandra-java-client.googlecode.com/svn/trunk/ cassandra-java-client $ cd cassandra-java-client $ mvn install

Abaixo um código exemplo extraível da própria página do projeto:

CassandraClient cl = pool.getClient() ;
KeySpace ks = cl.getKeySpace("Keyspace1") ;
// insert value
ColumnPath cp = new ColumnPath("Standard1" , null, "testInsertAndGetAndRemove".getBytes("utf-8"));
for(int i = 0 ; i < 100 ; i++){
   ks.insert("testInsertAndGetAndRemove_"+i, cp , ("testInsertAndGetAndRemove_value_"+i).getBytes("utf-8"));
}
//get value
for(int i = 0 ; i < 100 ; i++){
   Column col = ks.getColumn("testInsertAndGetAndRemove_"+i, cp);
   String value = new String(col.getValue(),"utf-8") ;
   assertTrue( value.equals("testInsertAndGetAndRemove_value_"+i) ) ;
}
//remove value
for(int i = 0 ; i < 100 ; i++){
   ks.remove("testInsertAndGetAndRemove_"+i, cp);
}
try{
   ks.remove("testInsertAndGetAndRemove_not_exist", cp);
}catch(Exception e){
   fail("remove not exist row should not throw exceptions");
}
//get already removed value
for(int i = 0 ; i < 100 ; i++){
   try{
      Column col = ks.getColumn("testInsertAndGetAndRemove_"+i, cp);
      fail("the value should already being deleted");
   }catch(NotFoundException e){ 
   }catch(Exception e){
      fail("throw out other exception, should be NotFoundException." + e.toString() );
   } 
}
pool.releaseClient(cl) ;
pool.close() ;

Acredito que este documento permita alavancar o interesse para outros projetos com a tecnologia NoSQL. Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...

Sobre o autor: (Alessandro de Oliveira Faria A.K.A.CABELO )