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
3. Globalcode –
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.
16. Globalcode –
SQL vs NOSQL
Driver
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
20. Globalcode –
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)
21. Globalcode –
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
22. Globalcode –
Estrutura de Dados
Grafos
Redes sociais (Dados conectados)
Mecanimos de recomendação
Transações complexas
Não Grafos
23. Globalcode –
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.)
29. Globalcode –
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
30. Globalcode –
Gossip
Gossip: Protocolo de comunicação P2P entre os nós
Roda a cada segundo
Descobrir outros nós
Nó semente
Sobre eles e sobre os outros
Tem versão de tempo
Nodes Seed
31. Globalcode –
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]
32. Globalcode –
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
33. Globalcode –
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
copiados
SimpleStrategy: usa apenas um único datacenter.
NetworkTopologyStrategy: para mais de um datacenter,
recomendados para uma tendência de crescimento futura.
34. Globalcode –
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
35. Globalcode –
Escrita
O primeiro nó funciona como coordenador
Retorna sucesso quando o nível informado sucesso
Cada Data center possui um coordenador
36. Globalcode –
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
37. Globalcode –
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
38. Globalcode –
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
39. Globalcode –
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
40. Globalcode –
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;
41. Globalcode –
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;
43. Globalcode –
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';
44. Globalcode –
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;
45. Globalcode –
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;
49. Globalcode –
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'
50. Globalcode –
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';
51. Globalcode –
Variáveis
List
CREATE 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';