Primeiros passos com o Cassandra

Preview:

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

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