54
Globalcode – open4education Cassandra Primeiros passos com o Cassandra Otávio Santana @otaviojava

Primeiros passos com o Cassandra

Embed Size (px)

DESCRIPTION

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. Assuntos abordados - Conceito Data Science - Conceito BigData - NOSQL - Histórico - Tipos de Bancos - Comparação com o Modelo relacional - Cassandra - Arquitetura Cassandra - Configurações Básica do Cassandra - Configuração de multi-nodes no Cassandra - Conhecendo o DevOpsCenter - Instalando os Agentes

Citation preview

Page 1: Primeiros passos com o Cassandra

Globalcode – open4education

Cassandra

Primeiros passos com o Cassandra

Otávio Santana@otaviojava

Page 2: Primeiros passos com o Cassandra

Globalcode – open4education

Cassandra Brasil

Planeta CassandraCassandra Brasil Google GroupsCassandra Brasil LinkedinCassandra Meetup

Page 3: Primeiros passos com o Cassandra

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.

Page 4: Primeiros passos com o Cassandra

Globalcode – open4education

Data Science

● Terra● Ouro● Petróleo● Informação● Big Data

● Empirical ● Theoretical ● Computational● eScience

Page 5: Primeiros passos com o Cassandra

Globalcode – open4education

Data Science

Page 6: Primeiros passos com o Cassandra

Globalcode – open4education

Data Science

Preparing to run a model Running the model Communicating the results

Page 7: Primeiros passos com o Cassandra

Globalcode – open4education

Page 8: Primeiros passos com o Cassandra

Globalcode – open4education

Flu trends

Redes Sociais

Page 9: Primeiros passos com o Cassandra

Globalcode – open4education

Eleições

Page 10: Primeiros passos com o Cassandra

Globalcode – open4education

Negócios

E-commerceMarketingCerveja e FraldasTail Target

Page 11: Primeiros passos com o Cassandra

Globalcode – open4education

Big Data

• 3 Vs (Velocidade, variedade e volume)

• Sem definição

Page 12: Primeiros passos com o Cassandra

Globalcode – open4education

Big Data

CacheData GridAlgoritmo

Page 13: Primeiros passos com o Cassandra

Globalcode – open4education

Hadoop

Hadoop CommonHadoop Distributed File System (HDFS™)Hadoop YARNHadoop MapReduceAmbari™Avro™Cassandra™Chukwa™HBase™Hive™Mahout™Pig™ZooKeeper™

Page 14: Primeiros passos com o Cassandra

Globalcode – open4education

NOSQL

Não apenas SQL

Conhecer o melhor

dos dois mundos

Uso específico

Page 15: Primeiros passos com o Cassandra

Globalcode – open4education

A.C.I.D. vs B.A.S.E

Atomicidade

Consistência

Isolamento

Durabilidade

Basicamente Avaliado

Soft-state

Eventualmente persistente

Page 16: Primeiros passos com o Cassandra

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

Page 17: Primeiros passos com o Cassandra

Globalcode – open4education

Classificação

Arquitetura Armazenamento Estrutura Dados

Chave-Valor

Documentos

Grafo

Família

de Colunas

Page 18: Primeiros passos com o Cassandra

Globalcode – open4education

Arquitetura Distribuída

Mestre Escravo P2P

A B C

mestre

Page 19: Primeiros passos com o Cassandra

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

Page 20: Primeiros passos com o Cassandra

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)

Page 21: Primeiros passos com o Cassandra

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

Page 22: Primeiros passos com o Cassandra

Globalcode – open4education

Estrutura de Dados

Grafos

Redes sociais (Dados conectados) Mecanimos de recomendação

Transações complexas Não Grafos

Page 23: Primeiros passos com o Cassandra

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

Page 24: Primeiros passos com o Cassandra

Globalcode – open4education

CAP

Consistência

Disponibilidade

Partição (tolerância)

CA: Banco de dados TradicionaisCP: BigTable, HBase, MongoDBAP: Dynamo, Cassandra, RiakPorcentagem

Page 25: Primeiros passos com o Cassandra

Globalcode – open4education

Outras formas

Sistema de Arquivos

Banco XML

Banco de Dados OO

solução

problema

Page 26: Primeiros passos com o Cassandra

Globalcode – open4education

Cassandra

Distribuída

Configurável

Família de Colunas

Page 27: Primeiros passos com o Cassandra

Globalcode – open4education

Cassandra

Gossip

Nível de consistência

Leitura e Escrita

ANYONELOCAL_QUORUMEACH_QOURUMALL

Disponibilidade

Consistência

Page 28: Primeiros passos com o Cassandra

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

Page 29: Primeiros passos com o Cassandra

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

Page 30: Primeiros passos com o 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

Page 31: Primeiros passos com o Cassandra

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]

Page 32: Primeiros passos com o Cassandra

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

Page 33: Primeiros passos com o Cassandra

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.

Page 34: Primeiros passos com o Cassandra

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

Page 35: Primeiros passos com o Cassandra

Globalcode – open4education

Escrita

O primeiro nó funciona como coordenador Retorna sucesso quando o nível informado sucesso Cada Data center possui um coordenador

Page 36: Primeiros passos com o Cassandra

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

Page 37: Primeiros passos com o Cassandra

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

Page 38: Primeiros passos com o Cassandra

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

Page 39: Primeiros passos com o Cassandra

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

Page 40: Primeiros passos com o Cassandra

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;

Page 41: Primeiros passos com o Cassandra

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;

Page 42: Primeiros passos com o Cassandra

Globalcode – open4education

CQL

Index

CREATE INDEX userIndex ON NerdMovies (user);

CREATE INDEX ON Mutants (abilityId);

DROP INDEX userIndex;

Page 43: Primeiros passos com o Cassandra

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';

Page 44: Primeiros passos com o Cassandra

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;

Page 45: Primeiros passos com o Cassandra

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;

Page 46: Primeiros passos com o Cassandra

Globalcode – open4education

Variáveis

ascii strings

bigint integers

blob blobs

boolean booleans

counter integers

decimal integers, floats

double integers

float integers, floats

Page 47: Primeiros passos com o Cassandra

Globalcode – open4education

Variáveis

inet strings

int integers

text strings

timestamp integers, strings

timeuuid uuids

uuid uuids

varchar strings

varint integers

Page 48: Primeiros passos com o Cassandra

Globalcode – open4education

Variáveis

Coleçõesmap Dicionário de dados (chave valor)

set Coleção de unico valor

list coleção

Page 49: Primeiros passos com o Cassandra

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'

Page 50: Primeiros passos com o Cassandra

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';

Page 51: Primeiros passos com o Cassandra

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';

Page 52: Primeiros passos com o Cassandra

Globalcode – open4education

Modelagem

TwittSandra

Usuários Seguidores Seguidos

User Line TimeLine Tweets

Page 53: Primeiros passos com o Cassandra

Globalcode – open4education

Cassandra

DEMO

Page 54: Primeiros passos com o Cassandra

Globalcode – open4education

Obrigado

Cassandra

Otávio Santanahttp://www.slideshare.net/otagonsan/@otaviojava