Download - Primeiros passos com o Cassandra
Globalcode – open4education
Cassandra
Primeiros passos com o Cassandra
Otávio Santana@otaviojava
Globalcode – open4education
Cassandra Brasil
Planeta CassandraCassandra Brasil Google GroupsCassandra Brasil LinkedinCassandra Meetup
Globalcode – open4education
Cassandra
O Cassandra é um banco de dados NOSQL orientado à família de coluna que nasceu para resolver problemas com aplicações que precisam operar com gigantescas cargas de dados além de poder escalar com grande facilidade. Ele nasceu no facebook e hoje vem sendo usado intensamente por empresas dos mais variados portes, tais como Netflix, Twitter, Instagram, HP, IBM, dentre muitas outras. Um fator importante que vale ser citado é a sua adoção crescente inclusive em mercados mais conversadores tais como, instituições financeiras e agências governamentais como a NASA.
Globalcode – open4education
Data Science
● Terra● Ouro● Petróleo● Informação● Big Data
● Empirical ● Theoretical ● Computational● eScience
Globalcode – open4education
Data Science
Globalcode – open4education
Data Science
Preparing to run a model Running the model Communicating the results
Globalcode – open4education
Globalcode – open4education
Flu trends
Redes Sociais
Globalcode – open4education
Eleições
Globalcode – open4education
Negócios
E-commerceMarketingCerveja e FraldasTail Target
Globalcode – open4education
Big Data
• 3 Vs (Velocidade, variedade e volume)
• Sem definição
Globalcode – open4education
Big Data
CacheData GridAlgoritmo
Globalcode – open4education
Hadoop
Hadoop CommonHadoop Distributed File System (HDFS™)Hadoop YARNHadoop MapReduceAmbari™Avro™Cassandra™Chukwa™HBase™Hive™Mahout™Pig™ZooKeeper™
Globalcode – open4education
NOSQL
Não apenas SQL
Conhecer o melhor
dos dois mundos
Uso específico
Globalcode – open4education
A.C.I.D. vs B.A.S.E
Atomicidade
Consistência
Isolamento
Durabilidade
Basicamente Avaliado
Soft-state
Eventualmente persistente
Globalcode – open4education
SQL vs NOSQLDriver
SQL ANSI
Transação
Alto custo de IO
Fácil troca de Banco
Relacionamento
API
Não padronizado
Não Transação
Busca por chave
Difícil troca de Banco
Não relacionamento
Globalcode – open4education
Classificação
Arquitetura Armazenamento Estrutura Dados
Chave-Valor
Documentos
Grafo
Família
de Colunas
Globalcode – open4education
Arquitetura Distribuída
Mestre Escravo P2P
A B C
mestre
Globalcode – open4education
Arquitetura Distribuída
Fragmentação Réplica
A
BD
C
ABCD
ABCD
ABCD
ABCD
Servidor com informações diferentes Servidor com as mesmas informações
Globalcode – open4education
Estrutura de Dados
Chave-valor
SQL Riak
Banco de Dados Cluster Riak
Tabela Bucket
Linha chave-valor
Chave Primária chave
Informações da sessão Perfis de usuário Carrinho de compras
Relacionamento Transações complexas Consulta por dados
(não chave)
Globalcode – open4education
Estrutura de Dados
Documentos
SQL MongoDB
Banco de Dados Instância
Tabela Coleção
Linha Documento
Chave Primária _id
CMS Análise Web Leitura em larga escala
Transações complexas
Globalcode – open4education
Estrutura de Dados
Grafos
Redes sociais (Dados conectados) Mecanimos de recomendação
Transações complexas Não Grafos
Globalcode – open4education
Estrutura de Dados
Família de Colunas
SQL Cassandra
Banco de Dados KeySpace
Tabela Família de Colunas
Linha Linha
Chave Primária chave
Registrado de Evento (log) CMS Contadores (categorizar) Escrita Complexa
Transações ACID Relação Leitura complexa
(SUM, AVG, etc.)
Globalcode – open4education
CAP
Consistência
Disponibilidade
Partição (tolerância)
CA: Banco de dados TradicionaisCP: BigTable, HBase, MongoDBAP: Dynamo, Cassandra, RiakPorcentagem
Globalcode – open4education
Outras formas
Sistema de Arquivos
Banco XML
Banco de Dados OO
solução
problema
Globalcode – open4education
Cassandra
Distribuída
Configurável
Família de Colunas
Globalcode – open4education
Cassandra
Gossip
Nível de consistência
Leitura e Escrita
ANYONELOCAL_QUORUMEACH_QOURUMALL
Disponibilidade
Consistência
Globalcode – open4education
Cassandra
Commit log
Memtable
SSTable
request
Commit logMemtable
SSTable
escrever (k1, c1:v1)escrever (k2, c1:v1 C2:v2)escrever (k1, c1:v4 c3:v3 c2:v2)
k1 c1:v4 c2:v2 c3:v3k2 c1:v1 c2:v2 k1, c1:v1
k2, c1:v1 C2:v2k1, c1:v4 c3:v3 c2:v2
k1 c1:v4 c2:v2 c3:v3k2 c1:v1 c2:v2
Globalcode – open4education
Cassandra
Gossip: Protocolo de comunicação P2P entre os nós
Partitioner: determina como será distribuido as informações através dos nós.
Snitch: define a topologia e as informações físicas.
Replica placement strategy: define como será realiza as cópias (réplicas da informação).
Cassandra.yaml: arquivo onde contém as principais configurações do Cassandra
Globalcode – open4education
Gossip
Gossip: Protocolo de comunicação P2P entre os nós
Roda a cada segundoDescobrir outros nósNó sementeSobre eles e sobre os outrosTem versão de tempoNodes Seed
Globalcode – open4education
Distribuição e réplica
Distribuição e réplica:
Ocorrem ao mesmo tempo A primeira inserção é baseado na chave Particionador Define Segunda cópia réplica
Jim Carro: Camaro Idade: 32
carol Cor: rosa
Suzy Time: Bahia
Jim 1
carol 3
Suzy 15
rowkey
rowkey Partitioner
A[0-3]
B[4-8]
C[9-13]
D[14-18]
Globalcode – open4education
Partitioner
Partitioner: determina como será distribuído as informações através dos nós.
Hash da Chave Murmur3Partitioner(default) RandomPartitioner (MD5) ByteOrderedPartitioner (não recomendado)
Jim -2245462676723223822
carol 7723358927203680754
Suzy 1168604627387940318
rowkey Murmur3 Partitioner
Globalcode – open4education
Replica placement strategy
Replica placement strategy: define como será realiza as cópias (réplicas da informação)
Fator de réplica: Define a unidade de nós que serão copiadosSimpleStrategy: usa apenas um único datacenter.NetworkTopologyStrategy: para mais de um datacenter,
recomendados para uma tendência de crescimento futura.
Globalcode – open4education
Snitch
Snitch: define a topologia e as informações físicas.
Dynamic snitching: Escolhe as melhores réplicas baseado no histórico. SimpleSnitch: Não reconhece, informações do data center
timezone (default). EC2Snitch: Utiliza um simples cluster na Amazon EC2MultiRegionSnitch: data centers em múltiplas regiões
Globalcode – open4education
Escrita
O primeiro nó funciona como coordenador Retorna sucesso quando o nível informado sucesso Cada Data center possui um coordenador
Globalcode – open4education
Leitura
O primeiro nó funciona como coordenador Cada Data center possui um coordenador Sincroniza e verifica qual á versão mais recente (timestamp) BackGround read repair
Globalcode – open4education
Leitura
Verifica se a chave existe no Bloom filter Procura a informação no key cache Caso encontre vai para o compressor offsets para pegar a
informação no disco Caso não encontre vai para o sumário, partição index para em
seguida ir no compressor offsets map
Compressor offsets map funciona como i-node que contém a localização da informação no disco
Globalcode – open4education
Cassandra.yaml
Cassandra.yaml: arquivo onde contém as principais configurações do Cassandra
cluster_name: Nome do cluster, ele deve ser o mesmo nome para todos nós no cluster listen_address: O ip or host que o cassandra usa para
conectar nesse nó, este deve ter o endereço público. seed_provider: A lista de nós sementes (separados os ips
por vírgulas), esses nós o gossip usará para aprender sobre a topologia. Em multiplos data center deve ter nós de cada um deles. storage_port: Porta de comunicação Caminhos: informar os caminhos de commit log, ssd tables
Globalcode – open4education
CQL
Cassandra Query Language
Semelhante ao SQL
Não existe JOIN
Se pode criar estruturas
Realizar Consultas
Para saber mais: http://cassandra.apache.org/doc/cql3/CQL.html
Globalcode – open4education
CQL
KeySpace
CREATE KEYSPACE Excelsior WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
CREATE KEYSPACE Excalibur WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 3};
ALTER KEYSPACE Excelsior WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 4};
USE Excalibur;
DROP KEYSPACE Excalibur;
Globalcode – open4education
CQL
Column Family
CREATE TABLE monkeySpecies ( species text PRIMARY KEY, common_name text, population varint, average_size int) WITH comment='Important biological records'
ALTER TABLE monkeySpecies ALTER average_size TYPE varint;
ALTER TABLE monkeySpecies ADD gravesite varchar;
DROP TABLE monkeySpecies;
TRUNCATE monkeySpecies;
Globalcode – open4education
CQL
Index
CREATE INDEX userIndex ON NerdMovies (user);
CREATE INDEX ON Mutants (abilityId);
DROP INDEX userIndex;
Globalcode – open4education
CQL
Manipulação de dados
INSERT INTO NerdMovies (movie, director, main_actor, year) VALUES ('Serenity', 'Joss Whedon', 'Nathan Fillion', 2005);
UPDATE NerdMovies SET director = 'Joss Whedon', main_actor = 'Nathan Fillion', year = 2005 WHERE movie = 'Serenity';
DELETE FROM NerdMovies USING TIMESTAMP 1240003134 WHERE movie = 'Serenity';
Globalcode – open4education
CQL
Manipulação de dados
BEGIN BATCH
INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user'); UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3'; INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c'); DELETE name FROM users WHERE userid = 'user1';
APPLY BATCH;
Globalcode – open4education
CQL
Select
SELECT name, occupation FROM users WHERE userid IN (199, 200, 207);
SELECT name AS user_name, occupation AS user_occupation FROM users;
SELECT time, value FROM events WHERE event_type = 'myEvent' AND time > '2011-02-03' AND time <= '2012-01-01'
SELECT COUNT(*) FROM users;
SELECT COUNT(*) AS user_count FROM users;
Globalcode – open4education
Variáveis
ascii strings
bigint integers
blob blobs
boolean booleans
counter integers
decimal integers, floats
double integers
float integers, floats
Globalcode – open4education
Variáveis
inet strings
int integers
text strings
timestamp integers, strings
timeuuid uuids
uuid uuids
varchar strings
varint integers
Globalcode – open4education
Variáveis
Coleçõesmap Dicionário de dados (chave valor)
set Coleção de unico valor
list coleção
Globalcode – open4education
Variáveis
Map
CREATE TABLE users ( id text PRIMARY KEY, given text, surname text, favs map<text, text> );
INSERT INTO users (id, given, surname, favs) VALUES ('jsmith', 'John', 'Smith', { 'fruit' : 'apple', 'band' : 'Beatles' });
UPDATE users SET favs['author'] = 'Ed Poe' WHERE id = 'jsmith'
UPDATE users SET favs = favs + { 'movie' : 'Cassablanca' } WHERE id = 'jsmith'
Globalcode – open4education
Variáveis
Set
CREATE TABLE images ( name text PRIMARY KEY, owner text, date timestamp, tags set<text>);
INSERT INTO images (name, owner, date, tags) VALUES ('cat.jpg', 'jsmith', 'now', { 'kitten', 'cat', 'pet' });
UPDATE images SET tags = tags + { 'cute', 'cuddly' } WHERE name = 'cat.jpg';
UPDATE images SET tags = tags - { 'lame' } WHERE name = 'cat.jpg';
Globalcode – open4education
Variáveis
ListCREATE TABLE plays ( id text PRIMARY KEY, game text, players int, scores list<int>)
INSERT INTO plays (id, game, players, scores) VALUES ('123-afde', 'quake', 3, [17, 4, 2]);
UPDATE plays SET players = 5, scores = scores + [ 14, 21 ] WHERE id = '123-afde';UPDATE plays SET players = 5, scores = [ 12 ] + scores WHERE id = '123-afde';
UPDATE plays SET scores[1] = 7 WHERE id = '123-afde'; DELETE scores[1] FROM plays WHERE id = '123-afde'; UPDATE plays SET scores = scores - [ 12, 21 ] WHERE id = '123-afde';
Globalcode – open4education
Modelagem
TwittSandra
Usuários Seguidores Seguidos
User Line TimeLine Tweets
Globalcode – open4education
Cassandra
DEMO
Globalcode – open4education
Obrigado
Cassandra
Otávio Santanahttp://www.slideshare.net/otagonsan/@otaviojava