Loading…

Cassandra NoSQL – Quebrando a barreira do som

 

Cassandra NoSQL – Quebrando a barreira do som

Este post tem como objetivo tratar dos aspectos gerais do banco de dados NoSQL Cassandra, mais informações sobre o Cassandra, além de outros bancos NoSQL podem ser encontradas aqui.

Instalação

O site da DataStax disponibiliza um tutorial descrevendo o processo de instalação no linux, de forma simples, o que deve ser feito é:
Checar se você tem todos os pré requisitos:
Acesso ao root/sudo
JRE 6, Java 7 não é recomendado (Para ter certeza da versão instalada você pode usar o comando java -version)
Java Native Access (Tutorial à parte aqui)

Caso você tenha todos os itens acima, siga os passos abaixo:

1)Adicionar o repositório do DataStax para o arquivo source do apt usando o comando:
deb http://debian.datastax.com/community stable main

2)(Apenas para o Debian) Em /etc/apt/sources.list ache a linha que descreve a source do repositório e adicione contrib non-free ao fim da linha, isso permite a instalação da JVM Oracle ao inves do OpenJDK JVM (Use o comando:
deb http://some.debian.mirror/debian/ $distro main contrib non-free)

3)Adicione a chave do repositório do DataStax à lista de chaves confiáveis:
curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add-
(Talvez seja necessário instalar o cUrl, para isso apenas use sudo apt-get install curl)

4)Instale o CQL, Cassandra e o OpsCenter
sudo apt-get update
sudo apt-get install python-cql
sudo apt-get install dsc1.1 cassandra=1.1.9
(possivelmente o cassandra será executado automaticamente, é possível parar o serviço usando sudo service cassandra stop)

Opcionalmente, caso você esteja usando o Ubuntu é possível fazer o download do .tar.gz no site, que incluirá praticamente todos os arquivos necessários para a execução (considerando uma execução local).
(Use o comando sudo tar -zxvf apache-cassandra-2.0.8-bin.tar.gz)

Caso você tenha seguido esses passos é provavel que o banco esteja funcionando. Como teste tentaremos criar uma database simples. Para isso é necessário, primeiro, iniciar o Cassandra (apenas digite cassandra no console), depois, em outra aba do terminal será necessário iniciar o cassandra-cli (command line interface) ou o cqlsh(Cassandra query language shell, cqlsh >>ip<< >>porta<<). Note que a sintaxe dos comandos usada na -cli é, em alguns casos diferente da usada no cqlsh.

Termos utilizados pela Cassandra e seus correspondentes sql

SQL CQL
Database Keyspace
Table Column Family
Primary Key Row Key
Column Name Column name/key
Column Value Column Value

 

Tipos de dados:

Nome Descrição
ascii String de caracteres ASCII
bigint Inteiro de 64b com sinal
blob Bytes arbitrários sem validação
boolean Verdadeiro ou Falso
counter Coluna contador 64b
decimal Decimal de precisão variada
double Número de ponto flutuante, 64b (IEEE-754)
float Número de ponto futuante, 32b (IEEE-754)
int Inteiro, 32 bits com sinal
text String no formato UTF8
timestamp Data
uuid UUID de tipo 1 ou 4(Universal unique id – id universalmente único)
varchar String no formato UTF8
varint Inteiro de precisão variada

Comentários

–Comentário
//Outro comentário
/*Comentário em
mais de uma linha*/

Comandos

Conectar o -cli
cassandra-cli -host localhost(Substituir pelo ip) -port 9160
Iniciar o cqlsh
cqlsh localhost 9160

Criar o keyspace
Pelo -cli:
create keyspace >>nome<<
with placement_strategy = ‘org.apache.cassandra.locator.SimpleStrategy’
//(Define o modo com que os dados serão guardados)
and strategy_options = [{replication_factor:1}];
//Tem relação com a replicação de dados entre os nós, veja mais aqui

Usando o CQLsh:
create keyspace >>nome<< with replication={‘class’:’SimpleStrategy’,’replication_factor’:1};

Mais informações sobre o comando create keyspace aqui

Ver keyspaces criados
show keyspaces; no -cli ou
describe keyspaces; no cqlsh

Usar o keyspace criado
use >>nome<<; em ambos

Criar uma column famiy:

create column family >>nome<<
with comparator = UTF8Type
and key_validation_class = UTF8Type
and column_metadata = [
{column_name: nome_da_coluna_1, validation_class: UTF8Type}
{column_name: nome_da_coluna_2, validation_class: LongType}

{column_name: nome_da_coluna_n, validation_class: >>N<<}
]; //no -cli

create columnfamily >>nome<<
(
nome_do_campo1 tipo_campo1 primary key,
nome_do_campo2 tipo_campo2,

nome_do_campo_n tipo_campo_n
); //no cqlsh

Também é possivel definir a(s) chave(s) primária(s) ao final do create, usando
“Primary Key(campo1,… campoN)”

Inserir uma coluna

insert into >>nome_da_tabela<< (campo1, campo2) values (valor1, valor2) (Using TTL 86400); //usando o -cli

TTL no caso significa “time to live”, que define um tempo para os dados afetados expirarem, você pode fazer um teste, usando um insert qualquer, esperando alguns segundos e usando um select TTL(>>nome do campo<<) from >>tabela<<, o resultado será o tempo em segundos que restam para que o campo expire. Da mesma forma, usando o cqlsh:

insert into >>nome_da_tabela<< (campo1, campo2) values (valor1, valor2) (Using TTL 86400);

Select

select * from >>tabela<< where key = ‘valor’; //sintaxe igual

Update

update >>tabela<< set >>campo<< = >>valor<< where >>condição<<;

Alter Column

Alter table >>nome da tabela<< add >>nome do campo<< >>tipo<<; //-cli

Alter columnfamily >>nome da tabela<< add >>nome do campo<< >>tipo<< //cqlsh

Da mesma forma que em sql, podem ser feitas várias operações usando o alter table: add para adicionar uma nova, drop para remover e alter para mudar o tipo, a documentação pode ser vista aqui

Delete

Delete from >>tabela<< where >>condição<<;

Praticamente igual a sintaxe sql, delete apaga uma entrada na tabela

Indexando uma coluna
Create index >>nome do index<< on >>nomde da tabela<<(>>campo<<);

Em cql não é possível usar o select em campos que não possuem indices, assim se você fizer um insert na tabela clientes, por exemplo, contendo o nome, endereço e um campo chave, Select * from clientes where nome = ‘cliente1’ mesmo tendo a sintaxe correta devolverá um erro (“no indexed columns present in by-columns clause with equal operator”), para esse select funcionar será necessário inserir um index nele, usando o comando acima.

Sobre o OpsCenter

O OpsCenter é uma interface gráfica para o banco, ele pode ser acessadoo pelo browser (por padrão http://127.0.0.1:8888/opscenter/index.html), à partir dele é possível ter acesso à vários dados, como o número de nós funcionando, latência, estrutura do banco, performance, log de erros e eventos, além de várias outras informações que podem ser úteis.

 

Autor: Franklin Messias Barbosa