Banco de Dados Cassandra com Python no Ubuntu

Esses são apenas os primeiros passos para quem estiver interessado em começar a aprender sobre o Banco de Dados Cassandra.

Sobre o Cassandra

O Cassandra é um Banco de Dados NoSQL (Not Only SQL). Ele é utilizado principalmente para grande quantidade de dados, de forma que possa ser replicado e escalado linearmente, de acordo com o seu uso. Para saber um pouco mais, leia aqui: Tutorial Point

Observação: Eu comecei seguindo esse tutorial, mas devido problemas, imaginei que ele estivesse um pouco desatualizado. Por isso, passei a ler de outros lugares. Mas acredito que os conceitos continuem os mesmos.

Criando uma instância AWS EC2 (opcional)

Preferi utilizar instância EC2 da Amazon. O motivo, é facilidade de usar um sistema limpo, sem sobrecarregar meu computador atual.

Basta criar uma instância, seguindo os passos da Amazon (Utilizei o Ubuntu Server 14.04 LTS (HVM)). Acredito que seja um passo bem simples para quem utiliza a AWS (ou um outro, como Digital Ocean, ou Rackspace), mas se precisar de ajuda, basta deixar um comentário que preparo um tutorial para isso.

Instalação

Basicamente, são 3 passos:

Instalar o Java Adicionar o repositório do Cassandra Instalar o Cassandra Vamos do começo. Se conecte à sua instância via SSH. Em seguida, crie um arquivo chamado cassandra.sh. Dentro desse arquivo, coloque o seguinte conteúdo (aqui o gist):

# Install Cassandra on Ubuntu
# Source: https://www.digitalocean.com/community/tutorials/how-to-install-cassandra-and-run-a-single-node-cluster-on-ubuntu-14-04
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-set-default
echo "deb http://www.apache.org/dist/cassandra/debian 22x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
echo "deb-src http://www.apache.org/dist/cassandra/debian 22x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -
gpg --keyserver pgp.mit.edu --recv-keys 0353B12C
gpg --export --armor 0353B12C | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra
sudo reboot
# For me, worked fine. Maybe, it is necessary edit /etc/init.d/cassandra
# (check the source)
# Run with: cqlsh

Em seguida, rode o comando desse arquivo com:

sh cassandra.sh

E pronto. Você já pode utilizá-lo. Vamos rodar alguns comandos iniciais. Conecte-se ao Cassandra com:

cqlsh

Agora, você está interagindo com ele (da mesma forma que fazemos com o MySQL).

Vamos criar um keyspace (semelhante a um DATABASE do MySQL):

CREATE KEYSPACE mykeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};

Para esse exemplo, estamos usando SimpleStrategy. Em ambientes de produção, provavelmente utilizaremos NetworkTopologyStrategy (veja mais aqui). Certo, agora vamos utilizar esse keyspace que acabamos de criar:

USE mykeyspace;

Isso mesmo. Bem semelhante com o MySQL. Dentro dele, vamos criar uma tabela de usuários (users):

CREATE TABLE users ( firstname text, lastname text, age int, PRIMARY KEY (lastname));

Criamos nossa tabela, com apenas 3 campos, sendo o lastname o primary key. Através dele que faremos nossas buscas. Inserimos as informações nele assim:

INSERT INTO users (firstname, lastname, age) VALUES ('John', 'Smith', 46);
INSERT INTO users (firstname, lastname, age) VALUES ('Jane', 'Doe', 36);

E agora, quando fizérmos o SELECT:

SELECT * FROM users;

Teremos o seguinte resultado:

 lastname | age | firstname
----------+-----+-----------
      Doe |  36 |      Jane
    Smith |  46 |      John

Ou então, podemos filtrar:

SELECT * FROM users WHERE lastname='Smith';

Resultando em:

 lastname | age | firstname
----------+-----+-----------
    Smith |  46 |      John

Pois é. Também achei bastante parecido com o MySQL. O que é bom, facilitando a aprendizagem. Mas agora, vamos utilizar o python para se conectar e executar comandos simples.

Python e Cassandra

Tenha o python com virtualenv instalado (se precisar de ajuda, utilize esse gist).

Em seguida, vamos criar um virtualenv para trabalhar:

virtualenv myenv
source myenv/bin/activate
pip install cassandra-driver
python

E pronto. Agora você está no ambiente de execução do python, utilizando o Cassandra. Vamos rodar alguns comandos simples.

Primeiro, vamos inicializar:

from cassandra.cluster import Cluster
cluster = Cluster()
session = cluster.connect('mykeyspace')

Estamos conectados em nosso keyspace. Agora, vamos inserir uma linha:

session.execute(
    """
    INSERT INTO users (firstname, lastname, age)
    VALUES (%s, %s, %s)
    """,
    ('Ted', 'Mosby', 37)
)

Por fim, para checar se funcionou, fazemos o SELECT:

rows = session.execute('SELECT firstname, lastname, age FROM users')
for user_row in rows:
    print user_row.firstname, user_row.lastname, user_row.age

Como resultado, espera-se:

Ted Mosby 37
Jane Doe 36
John Smith 46

Conclusão

Esse é o fim. Serve apenas como um guia inicial (e bem inicial) para não perder tempo na instalação e conceitos iniciais. Para continuar, sugiro utilizar a documentação do driver python cassandra. Com ele, verá como atualizar e apagar dados.

Espero ter ajudado, e qualquer dúvida poste nos comentários. Obrigado.