Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Apache Cassandra NoSQL, uma tecnologia emergente

Colaboração: Alessandro de Oliveira Faria

Data de Publicação: 02 de abril de 2010

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.

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.

Linux: Apache Cassandra NoSQL , uma tecnologia emergente.

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.

O texto a seguir foi extraído do post do blog globalcoder e ilustra bem o atual polêmico cenário:

"Escalabilidade é um tema bastante complexo e armazenamento e processamento de grandes volumes de dados são focos de pesquisas que estão bem aquecidas hoje em dia. Um dos mais ativos movimentos nesta linha está tomando forma, encorpando e sendo batizado. Chama-se NoSQL. Em um livro recém lançado intitulado 'Hadoop: The Definitive Guide' (escrito por Tom White) há uma passagem digna de nota (em uma tradução livre):
Este é o resumo de como a história acerca de escalabilidade no uso de um banco de dados relacional se desenrola. A seguinte lista assume uma aplicação de sucesso, de demanda crescente.
Lançamento ao público inicial

Cópia da instância MySQL de desenvolvimento para o ambiente de produção, compartilhado e remoto, tendo um esquema de dados bem definido.

A aplicação se torna mais popular; requisições demasiadas de leitura atingindo o banco de dados:

Adiciona-se "memcached" ao sistema para que as requisições mais comuns se mantenham em memória. As leituras ao banco de dados não são mais estritamente ACID; dados armazenados em memória devem ser invalidados por algum mecanismo.

A aplicação continua com crescente demanda; requisições demasiadas de escrita atingindo o banco de dados:

Escala-se verticalmente o MySQL através da atualização de hardware do servidor com 16 núcleos, 128 GB de RAM e bancos de discos rígidos com 15000 RPMs. Oneroso.

Novos recursos implementados no sistema aumentam a complexidade das consultas SQL; agora temos muitos "joins":

Desnormalização dos dados para reduzir "joins" (isto não é o que eles ensinam na escola para DBA).

Demanda da aplicação cresce e derruba o servidor; tudo está muito lento:

Para-se com qualquer processamento no lado do servidor.

Algumas consultas ainda estão lentas:

Cria-se periodicamente "views" materializadas das consultas mais complexas, tenta-se eliminar "joins" na maioria dos casos.

Leituras estão aceitáveis mas escritas estão cada vez mais lentas e lentas:

Elimina-se índices secundários e "triggers"! Sem índices? ...

Quantos de nós estamos envolvidos com sistemas que estão nesta rota? Será mesmo que nossas aplicações nunca atingirão tais níveis?"

Texto extraído de: http://blog.globalcode.com.br/

Bom, agora chega de blá, blá, blá e partiremos para o que realmente interessa, a mão na massa...

Jogo rápido, download e instalação

Em primeiro lugar efetue o download do software

  # wget http://linorg.usp.br/apache/cassandra/0.5.1/apache-cassandra-0.5.1-bin.tar.gz

Descompacte o pacote com o tradicional comando "tar -zxvf" e configure a variável ambiental CASSANDRA_HOME:

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

Modifique o arquivo storage-conf.xml conforme as suas necessidades e crie as pastas:

  # 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...

Alessandro Faria é sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software. Leva o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.

Veja a relação completa dos artigos de Alessandro de Oliveira Faria

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (914 votos)

Opinião dos Leitores

Diana Calvo
07 Dez 2010, 01:12
Olá...Estou com problemas no site do twitter. nao sei se eesse apache funcionaria. como tb nao entendi. Nao consigo entra no site qndo entro Aparece a msg, "Apache is functioning normally". Se puder me ajudarficarei grata . bjus
Danilo Cabana
30 Nov 2010, 21:41
Famoso artigo ctrl c + ctrl v
:/
Rafael
02 Set 2010, 21:24
Cara, muito bom seu artigo, porém, como aplicarmos o uso do cassandra em uma aplicação jeeeb, estabelecer a conexão e persistir os dados?
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

PDF Explicado