Top Banner
©2013 DataStax Confidential. Do not distribute without consent. Um Tutorial Ben Coverston @bcoverston DSE Architect, Datastax Inc. NoSQL Com Apache Cassandra 1 Wednesday, September 18, 13
60

NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

May 20, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

©2013 DataStax Confidential. Do not distribute without consent.

Um Tutorial

Ben Coverston @bcoverstonDSE Architect, Datastax Inc.

NoSQL Com Apache Cassandra

1Wednesday, September 18, 13

Page 2: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Quem Sou?• Ben Coverston• DSE Architect• DataStax Inc•Morei em SC por dois anos (em 1994-1996)

Wednesday, September 18, 13

Page 3: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Objetivos Da Sessão• O que é Apache Cassandra?• Para que posso usá-lo?• Discussão dos casos de uso• Dar vocês experiência na utilização da Cassandra• Questões

Wednesday, September 18, 13

Page 4: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Que É Apache Cassandra?• E um banco de dados• Inicialmente criado pelo Facebook• Em 2008 foi doada para Apache• De 2008-2010 foi mantida de individuais• Até que DataStax foi estabelecido em Abril 2010

Wednesday, September 18, 13

Page 5: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Wednesday, September 18, 13

Page 6: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Que é Apache Cassandra (Cont.)• Apache Cassandra é uma mistura• Google Big Table

• Amazon Dynamo

• O modelo de dados vem de Big Table• A maneira de distribuição vem de Dynamo

Wednesday, September 18, 13

Page 7: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

• Massivamente Escalável• Alto Desempenho• Confiávil / Disponível

Wednesday, September 18, 13

Page 8: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

VLDB Benchmark

Wednesday, September 18, 13

Page 9: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Endpoint Benchmark

Wednesday, September 18, 13

Page 10: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Wednesday, September 18, 13

Page 11: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Wednesday, September 18, 13

Page 12: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Porque é Popular?• Um base de dados OLTP• Focalizado em cenários de tempo real

• Disponibilidade é o mais importante• Aplicações orientadas ou consumidor.

Wednesday, September 18, 13

Page 13: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Que É ‘Real Time’?• Sem JOIN• Sem subqueries• Sem Agregação (GROUP BY)• ORDER BY é limitado

Wednesday, September 18, 13

Page 14: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Quando Devo Utilizar Cassandra• Se Você Tem Qualquer De:• Armazenamento além de uma região só

• Alto desempenho (High Performance)• Alta disponibilidade (High Availability)

• Cassandra deve ser considerado

Wednesday, September 18, 13

Page 15: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Em Outras Palavras• Precisa uma presença em mais que um Centro de Dados (os ambos

ativos)• Quando Estás Escalando De 0 ate .. não Sei!• Precisa 100% disponibilidade, (tão perto de possível)• Quando a aquisição disso com outro soluções é inviável ($)

. . . e também . . .

Wednesday, September 18, 13

Page 16: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo De Dados tem que estarcerto

Wednesday, September 18, 13

Page 17: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Antes de modelar, temos que Instalar.

Como Instalar Cassandra

Wednesday, September 18, 13

Page 18: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Maneiras De Installar Cassandra• Instalador Embalado (packaged installer) (deb/rpm)• Tarball (Vamos fazer isso hoje)• Datastax Community (DSC) (há por Windows)• Datastax Enterprise (DSE)• Os arquivos necessários estão no USB

Wednesday, September 18, 13

Page 19: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Installar• http://cassandra.apache.org

Wednesday, September 18, 13

Page 20: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Installar

Wednesday, September 18, 13

Page 21: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Installar$ java --version

# Cassandra é uma aplicação baseada em Java Precisa Java para funcionar# Pelas coisas que faremos hoje, OpenJDK talvez funcionará, mas precisamos# alguma Java

Wednesday, September 18, 13

Page 22: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Installar (OS X, Linux)$ tar -xvf apache-cassandra-1.2.8-bin.tar.gz

## modifica permissiões ou locais dos archivos

$ mv apache-cassandra-1.2.8-bin ~./cassandra$ cd ~./cassandra$ vim config/cassandra/cassandra.yaml

#change data directory# saved caches- saved_caches_directory: /user/lib/cassandra/saved_caches+ saved_caches_directory: /home/user/(you)/cassandra/saved_caches

#data_file_directories:- - /var/lib/cassandra/data+ - /var/users/(you)/cassandra/data

# commit log- commitlog_directory: /var/lib/cassandra/commitlog+ commitlog_directory: /var/users/(you)/cassandra/commitlog

Wednesday, September 18, 13

Page 23: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Installar (cont.)$ emacs conf/log4j-server.properties

- log4j.appender.R.File=/var/log/cassandra/system.log+ (your home)/cassandra/log/system.log

# run cassandra, o -f significa ‘foreground’$ bin/cassandra -f

# Abre uma nova ‘console’ e executa cqlsh$ bin/cqlsh

Wednesday, September 18, 13

Page 24: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Fazer• Quatro exemplos do mundo real• O causo atual, o modelo para fazer• Sao comum, talvez é seu causo de uso.• Vamos Fazer os soluções im CQL3

Wednesday, September 18, 13

Page 25: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Cria Uma Tabulo• Juntos• E tenta um WHERE• tracing on

Wednesday, September 18, 13

Page 26: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Simple Queries and TracingCREATE TABLE test ( a int PRIMARY KEY, b text);

INSERT INTO test (a, b) VALUES (1, 'example');INSERT INTO test (a, b) VALUES (2, 'example');INSERT INTO test (a, b) VALUES (3, 'example');INSERT INTO test (a, b) VALUES (4, 'example');INSERT INTO test (a, b) VALUES (5, 'example');INSERT INTO test (a, b) VALUES (6, 'example');INSERT INTO test (a, b) VALUES (7, 'example');INSERT INTO test (a, b) VALUES (8, 'example');INSERT INTO test (a, b) VALUES (9, 'example');INSERT INTO test (a, b) VALUES (10, 'example');

Wednesday, September 18, 13

Page 27: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Simple Queriesset tracing on;

SELECT * FROM test;

# bom

SELECT * FROM test WHERE a = 1;

# mais uma vez, bom

SELECT * FROM test WHERE b = 'Example';

## Cassandra? O que?

Wednesday, September 18, 13

Page 28: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Secondary IndexesCREATE INDEX ON test (b);

SELECT * FROM test WHERE b = 'Example';

Wednesday, September 18, 13

Page 29: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Espera!

CQL não faz ‘wide rows’!

Wednesday, September 18, 13

Page 30: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Faz, sim• Faz na mesma maneira que Thrift• É certo! Prometo!• Leia Aqui:

http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows

...ou, pode confiar em mim, e vou demonstrar

Wednesday, September 18, 13

Page 31: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Também conhecido em Português como ‘Shopping Cart’,Um bom motivo para ter disponibilidade é que os pessoas querem dar-lhe dinheiro.

Modelo do Carrinho De Compras

Wednesday, September 18, 13

Page 32: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

‘Shopping Cart’ Caso De Uso* Armazenar dados do Carrinho com segurança

* Minimizar, ou eliminar falhas (downtime). Multi-dc

* Escalar pela problema “Cyber Monday” problem

* Cada moment com falhas é $$

* Compradores on-line querem velocidade

The bad

Wednesday, September 18, 13

Page 33: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo do ‘Shopping Cart’• Cada consumidor pode ter max

que um ‘Cart’.• De-normaliza por acesso rápido• Um ‘Cart‘ == Um Partition

(storage row)• Cada coluna é um item

Wednesday, September 18, 13

Page 34: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo do ‘Shopping Cart’

CREATE TABLE user (! username varchar,! firstname varchar,! lastname varchar,! shopping_carts set<varchar>,! PRIMARY KEY (username));

CREATE TABLE shopping_cart (! username varchar,! cart_name text! item_id int,! item_name varchar,description varchar,! price float,! item_detail map<varchar,varchar>! PRIMARY KEY ((username,cart_name),item_id));

INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,price,item_detail)VALUES ('bcoverston','Gadgets I want',8675309,'Garmin 910XT','Multisport training watch',349.99,{'Related':'Timex sports watch','Volume Discount':'10'});

INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,price,item_detail)VALUES ('pmcfadin','Gadgets I want',9748575,'Polaris Foot Pod','Bluetooth Smart foot pod',64.00{'Related':'Timex foot pod','Volume Discount':'25'});

Um partition (storage row) de dados

Detalhas do item, flexível por qualquer coisa

Partition chave da linha pela ‘cart’ de um usuário só

Cria da chave pela linha (row key)

Wednesday, September 18, 13

Page 35: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Vamos Criar Nosso Modelo$ bin/cqlsh

cqlsh> CREATE KEYSPACE cart WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

cqlsh> USE cart;

cqlsh> CREATE TABLE user ( username varchar, firstname varchar, lastname varchar, shopping_carts set<varchar>, PRIMARY KEY (username));

Wednesday, September 18, 13

Page 36: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Nosso Modelo (cont)cqlsh> CREATE TABLE shopping_cart ( username varchar, cart_name text item_id int, item_name varchar, description varchar, price float, item_detail map<varchar,varchar> PRIMARY KEY ((username,cart_name),item_id));

Wednesday, September 18, 13

Page 37: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Inserir Dadoscqlsh> INSERT INTO shopping_cart (username, cart_name, item_id, item_name, description, price, item_detail)VALUES ('pmcfadin', 'Gadgets I want', 8675309, 'Garmin 910XT', 'Multisport training watch', 349.99, {'Related':'Timex sports watch','Volume Discount':'10'});

cqlsh> INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,price,item_detail) VALUES ('pmcfadin', 'Gadgets I want',9748575,'Polaris Foot Pod','Bluetooth Smart pod',64.00 {'Related':'Timex foot pod', 'Volume Discount':'25'});

cqlsh> SELECT * FROM shopping_cart;

Wednesday, September 18, 13

Page 38: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Duvidas?

Wednesday, September 18, 13

Page 39: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Arrepiante, mas legal (com permissão)

Monitoração dos atividades de usuários

Wednesday, September 18, 13

Page 40: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Monitoração dos Usarios* Reagir em ‘tempo real’

* Apoia por muitas aplicações simultâneos

* Escalar por velocidade

* Interações perdidos são caras

* ‘Batch’ (Hadoop) é muito lento

O mal

Wednesday, September 18, 13

Page 41: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo* Os pontos de interação vão em um ‘Users Table’

* Interações de longo prazo vão em um tabulo com um partition com um data (date).

* Dados de longo prazo pode ser processado em ‘batch’.

* Os outros dados são na ordem inversa.

Wednesday, September 18, 13

Page 42: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo de ActividadesCREATE TABLE user_activity (! username varchar,! interaction_time timeuuid,! activity_code varchar,! detail varchar,! PRIMARY KEY (username, interaction_time)) WITH CLUSTERING ORDER BY (interaction_time DESC);

CREATE TABLE user_activity_history (! username varchar,! interaction_date varchar,! interaction_time timeuuid,! activity_code varchar,! detail varchar,! PRIMARY KEY ((username,interaction_date),interaction_time));

INSERT INTO user_activity (username,interaction_time,activity_code,detail)VALUES ('bcoverston',0D1454E0-D202-11E2-8B8B-0800200C9A66,'100','Normal login')USING TTL 2592000;

INSERT INTO user_activity_history (username,interaction_date,interaction_time,activity_code,detail)VALUES ('bcoverston','20130605',0D1454E0-D202-11E2-8B8B-0800200C9A66,'100','Normal login');

Ordem inversa baseado em timestamp

Expirar após de 30 dias

Wednesday, September 18, 13

Page 43: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo de Actividadescqlsh> CREATE TABLE user_activity ( username varchar, interaction_time timeuuid, activity_code varchar, detail varchar, PRIMARY KEY (username, interaction_time)) WITH CLUSTERING ORDER BY (interaction_time DESC);

cqlsh> CREATE TABLE user_activity_history ( username varchar, interaction_date varchar, interaction_time timeuuid, activity_code varchar, detail varchar, PRIMARY KEY ((username,interaction_date),interaction_time));

Wednesday, September 18, 13

Page 44: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo de Actividadescqlsh> INSERT INTO user_activity (username,interaction_time,activity_code,detail) VALUES ('bcoverston', 0D1454E0-D202-11E2-8B8B-0800200C9A66,'100','Normal login') USING TTL 2592000;

cqlsh> INSERT INTO user_activity_history (username,interaction_date,interaction_time,activity_code,detail) VALUES ('bcoverston','20130605', 0D1454E0-D202-11E2-8B8B-0800200C9A66,'100','Normal login');

Wednesday, September 18, 13

Page 45: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Os Dados em Ação

username | interaction_time | detail | activity_code----------+--------------------------------------+------------------------------------------+------------------ pmcfadin | 9ccc9df0-d076-11e2-923e-5d8390e664ec | Entered shopping area: Jewelry | 301 pmcfadin | 9c652990-d076-11e2-923e-5d8390e664ec | Created shopping cart: Anniversary gifts | 202 pmcfadin | 1b5cef90-d076-11e2-923e-5d8390e664ec | Deleted shopping cart: Gadgets I want | 205 pmcfadin | 1b0e5a60-d076-11e2-923e-5d8390e664ec | Opened shopping cart: Gadgets I want | 201 pmcfadin | 1b0be960-d076-11e2-923e-5d8390e664ec | Normal login | 100

select * from user_activity limit 5;

Talvez flores também?

Wednesday, September 18, 13

Page 46: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Em Pt, “Logging”? Maquinas gerem dados rapidamente, seja pronto.

Coleção de Dados (Logging)

Wednesday, September 18, 13

Page 47: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo por ‘Logging’• Colher dados com alta velocidade• Cassandra é perto de onde os dados são gerados• Dados úteis, reportagem.

• RDBMS é caro pela escala essencial• ‘Batch’ e muito lento

O mal

Wednesday, September 18, 13

Page 48: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo por ‘Logging’• Flume para colher e distribuir dados

para tabelas vários.• Tabelas por pesquisa pela origem e

tempo.• Tabelas pela agregação e

sumarização dos dados.

Wednesday, September 18, 13

Page 49: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

O Modelo de ‘Logs’

CREATE TABLE log_lookup (! source varchar,! date_to_minute varchar,! timestamp timeuuid,! raw_log blob,! PRIMARY KEY ((source,date_to_minute),timestamp));

CREATE TABLE login_success (! source varchar,! date_to_minute varchar, ! successful_logins counter, ! PRIMARY KEY (source,date_to_minute)) WITH CLUSTERING ORDER BY (date_to_minute DESC);

CREATE TABLE login_failure (! source varchar,! date_to_minute varchar, ! failed_logins counter, ! PRIMARY KEY (source,date_to_minute)) WITH CLUSTERING ORDER BY (date_to_minute DESC);

raw_logs pode ser em GZIP

Wednesday, September 18, 13

Page 50: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Aggregação dos Logs

0

25

50

75

100

10:01 10:03 10:05 10:07 10:09 10:11 10:13 10:15 10:17 10:19

Sucessful LoginsFailed Logins

SELECT date_to_minute,successful_loginsFROM login_successLIMIT 20;

SELECT date_to_minute,failed_loginsFROM login_failureLIMIT 20;

Wednesday, September 18, 13

Page 51: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

cqlsh> CREATE TABLE log_lookup ( source varchar, date_to_minute varchar, timestamp timeuuid, raw_log blob, PRIMARY KEY ((source,date_to_minute),timestamp) );

cqlsh> CREATE TABLE login_success ( source varchar, date_to_minute varchar, successful_logins counter, PRIMARY KEY (source,date_to_minute)) WITH CLUSTERING ORDER BY (date_to_minute DESC);

cqlsh> CREATE TABLE login_failure ( source varchar, date_to_minute varchar, failed_logins counter, PRIMARY KEY (source,date_to_minute)) WITH CLUSTERING ORDER BY (date_to_minute DESC);

Wednesday, September 18, 13

Page 52: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Incrementing the Counterscqlsh> UPDATE login_success SET successful_logins = successful_logins + 2 WHERE source = 'foo' AND date_to_minute = 'bar';

cqlsh> UPDATE login_failure SET successful_logins = successful_logins + 2 WHERE source = 'foo' AND date_to_minute = 'bar';

cqlsh> SELECT date_to_minute,successful_logins FROM login_success LIMIT 20;

cqlsh> SELECT date_to_minute,failed_logins FROM login_failure LIMIT 20;

Wednesday, September 18, 13

Page 53: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Porque errors erros acontecem

Controle de Versões

Wednesday, September 18, 13

Page 54: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo controle de versões•Manter todas as versões• Escalar a qualquer numero de usuários• Cometer/Reverter (commit/rollback) numa formulário.

O mal• Em um RDBMS, Muitos relaciones que precisam um ‘JOIN’ • Precisa ficar em o Cloud, e o centro de dados.

Wednesday, September 18, 13

Page 55: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo controle de versões• Cada usuário tem um formulário• Cada formulário precisa controle

de versões• Um tabulo dedicado para

arquivar o versão actual• Acesso exclusivo para um

formulário

Wednesday, September 18, 13

Page 56: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo controle de versões

CREATE TABLE working_version (! username varchar,! form_id int,! version_number int,! locked_by varchar,! form_attributes map<varchar,varchar> ! PRIMARY KEY ((username, form_id), version_number)) WITH CLUSTERING ORDER BY (version_number DESC);

INSERT INTO working_version (username, form_id, version_number, locked_by, form_attributes)VALUES ('pmcfadin',1138,1,'',{'FirstName<text>':'First Name: ','LastName<text>':'Last Name: ','EmailAddress<text>':'Email Address: ','Newsletter<radio>':'Y,N'});

UPDATE working_version SET locked_by = 'pmcfadin'WHERE username = 'pmcfadin'AND form_id = 1138AND version_number = 1;

INSERT INTO working_version (username, form_id, version_number, locked_by, form_attributes)VALUES ('pmcfadin',1138,2,null,{'FirstName<text>':'First Name: ','LastName<text>':'Last Name: ','EmailAddress<text>':'Email Address: ','Newsletter<checkbox>':'Y'});

1. A primera versão

2. ‘Lock’ por um usuário

3. Insere uma nova versão, liberar o ‘Lock’

Wednesday, September 18, 13

Page 57: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo controle de versõescqlsh> CREATE TABLE working_version ( username varchar, form_id int, version_number int, locked_by varchar, form_attributes map<varchar,varchar> PRIMARY KEY ((username, form_id), version_number)) WITH CLUSTERING ORDER BY (version_number DESC);’

#a primeira versão

cqlsh> INSERT INTO working_version (username, form_id, version_number, locked_by, form_attributes)VALUES ('pmcfadin',1138,1,'',{'FirstName<text>':'First Name: ','LastName<text>':'Last Name: ','EmailAddress<text>':'Email Address: ','Newsletter<radio>':'Y,N'});

Wednesday, September 18, 13

Page 58: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

Causo controle de versõescqlsh> UPDATE working_version SET locked_by = 'pmcfadin'WHERE username = 'pmcfadin'AND form_id = 1138AND version_number = 1;

cqlsh> INSERT INTO working_version (username, form_id, version_number, locked_by, form_attributes)VALUES ('pmcfadin',1138,2,null,{'FirstName<text>':'First Name: ','LastName<text>':'Last Name: ','EmailAddress<text>':'Email Address: ','Newsletter<checkbox>':'Y'});

Wednesday, September 18, 13

Page 59: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

É Tudo• Duvidas?

Wednesday, September 18, 13

Page 60: NoSQL Com Apache Cassandra...O Que é Apache Cassandra (Cont.) •Apache Cassandra é uma mistura • Google Big Table • Amazon Dynamo •O modelo de dados vem de Big Table •A

©2013 DataStax Confidential. Do not distribute without consent. 60

• Vai, e experimentar.• Se tem duvidas, a comunidade existe para assistir.• Se precisa mais, buscar por um espeicalista

•Me segue @bcoverston no Twitter.

Wednesday, September 18, 13