SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
1
Apache Cassandra
2
…
3
4
5
6
7
8
9
http://goo.gl/7tMTaE
10
11
Tolerante a falhas, sem ponto único central de controle,
não existe um nó “master”
Utiliza o Protocolo Peer-to-Peer (ao invés do modelo
master/slave)
12
A taxa de transferência (throughput) de operações de
leitura e escrita aumenta linearmente a medida que
novas máquinas são adicionadas
13
Cassandra não usa transações ACID com nos
RDBMS com rollback ou mecanismos de lock.
Oference controle de atomicidade e isolamento no
contexto de linha (row-level)
14
Escrita é atômica no contexto da partição (row).
Atualização ou Inserção de colunas são tratadas como
uma operação de write.
Utiliza timestamps para determinar o valor mais
atualizado de uma coluna (Last Wins)
15
A consistência e disponibilidade podem ser ajustadas
(tunable).
Não há lock ou consistência transacional quando
múltiplas linhas ou tabelas são alteradas
concorrentemente.
Cassandra >= 2.0, micro transações (lighweight
transactions) use em menos de 1% de suas transações
16
Full row-level isolation: Escrita a uma linha é totalmente
isolada ao cliente que está executando a escrita e não é
visível a nenhum outro cliente até que a operação
complete (version >= 1.1)
UPDATE Users
SET login='scott' AND password='tiger'
WHERE key='550e8400';
SELECT login, password
FROM Users WHERE key='550e8400';
17
As escritas são duráveis: Todas as escritas aos nós são
registrados em memória e em disco antes de retornar
como uma operação completa (acknowledge)
18
●
●
eventually -> after some time
eventualmente -> talvez, possivelmente
19
20
21
22
23
24
Dados MODELOS DADOSAPLICAÇÃO
25
26
●
●
●
27
28
●
●
●
○
○
○
●
29
cd $CASSANDRA_HOME/bin
./cqlsh
Connected to cassandra-cluster at localhost:9160.
[cqlsh 3.1.8 | Cassandra 2.1.2 | CQL spec 3.0.5 |
Thrift protocol 19.36.2]
Use HELP for help.
cqlsh> _
30
# ccm create -v 2.0.14 --nodes 3 --start clusterName
# ccm status
Cluster: 'clusterName'
--------------
node1: UP
node3: UP
node2: UP
# ccm node1 status
# ccm node1 stop
# ccm node2 start
#ccm stop
#ccm start
31
-- multinode keyspace configuration (cluster)
CREATE KEYSPACE music
WITH REPLICATION = { 'class' :
'NetworkTopologyStrategy', 'datacenter1' : 3 };
32
cqlsh> use music;
cqlsh:music>
CREATE TABLE songs (
id varchar PRIMARY KEY,
title text,
album text,
artist text,
data blob
);
$CASSANDRA_HOME/logs/system.log
INFO 14:23:58,307 Initializing music.songs
33
INSERT INTO songs (id, title, artist, album)
VALUES ('song-1','Ojo Rojo', 'Fu Manchu', 'No One Rides');
INSERT INTO songs (id, title, artist, album)
VALUES ('song-2','Enter Sandman', 'Metallica', 'Black');
INSERT INTO songs (id, title, artist, album)
VALUES ('song-3','The Unforgiven', 'Metallica', 'Black');
INSERT INTO songs (id, title, artist, album)
VALUES ('song-4','Run to the hills', 'Iron Maiden',
'Collections');
34
cqlsh:music> select * from songs;
35
id int PRIMARY KEY / PRIMARY KEY (id)
PRIMARY KEY (PARTITION_KEY,
CLUSTERING_KEY, CLUSTERING_KEY… );
36
CREATE TABLE playlists (
id varchar,
song_order int,
song_id varchar,
title text,
album text,
artist text,
PRIMARY KEY (id, song_order));
●
●
37
cqlsh:music> delete from songs where id = 'song-4';
cqlsh:music> delete from songs where id = 'song-3';
cqlsh:music> delete from songs where id = 'song-2';
cqlsh:music> select * from songs;
38
39
40
http://www.datastax.com/download-drivers
41
public void connect(String node) {
cluster = Cluster.builder().addContactPoint(node).build();
// get some cluster meta data
Metadata metadata = cluster.getMetadata();
for (Host host : metadata.getAllHosts()) {
System.out.printf("Datatacenter: %s; Host: %s; Rack: %sn",
host.getDatacenter(), host.getAddress(),
host.getRack());
}
// retrieve a connected session
session = cluster.connect();
}
42
SimpleClient client = new SimpleClient();
client.connect("127.0.0.1");
Session session = client.getSession();
ResultSet results =
session.execute("SELECT * FROM music.playlists");
for (Row row : results.all()) {
print(row);
}
client.close();
43
Caso de Uso Movile
44
45
★
★
★
46
47
●
●
48
●
●
●
●
49
C*
50
51
cqlsh:music> tracing on;
Now Tracing is enabled
cqlsh:music> INSERT INTO songs (id, title, artist, album)
VALUES ('song-4','Run to the hills', 'Iron Maiden',
'Collections');
52
CREATE TABLE queues (
id text,
created_at timeuuid,
value blob,
PRIMARY KEY (id, created_at)
);
SELECT * FROM queues WHERE id = 'myqueue'
ORDER BY created_at LIMIT 1;
53
VMs
54
Node 1 - : 200.xxx.xxx.71
load_avg: 0.39
write_latency(us): 900.8
read_latency(us): 894.6
Node 2 - : 200.xxx.xxx.72
load_avg: 0.51
write_latency(us): 874.1
read_latency(us): 1062.5
Node 3 - : 200.xxx.xxx.73
load_avg: 0.35
write_latency(us): 900.87
read_latency(us): 887.6
Node 1 - : 200.xxx.xxx.71
load_avg: 0.63
write_latency(us): 1037
read_latency(us): 1749
Node 2 - : 200.xxx.xxx.72
load_avg: 0.37
write_latency(us): 819.8
read_latency(us): 909.0
Node 3 - : 200.xxx.xxx.74
load_avg: 0.62
write_latency(us): 1006
read_latency(us): 1056.43
DATACENTER 1DATACENTER 2
Now: 2015-07-22 13:11:00
Total Reads/second: 12441
Total Writes/second: 8883
55
tempo
num.operações
56
Dica 1#: usar quando a disponibilidade é um fator
importante, onde exista um alto volume de dados, com
número grande de operações de escrita.
Dica 2#: entenda os requisitos da aplicação, identifique os
padrões de acesso a informação.
Dica #3: pense em desnormalização de dados, mas com
cuidado…
Dica #4: usar quando desempenho é um fator importante
para a aplicação
57
@eitikimura
facebook.com/eiti.kimura
talentos@movile.com
http://www.movile.com/pt/carreiras
eiti-kimura-movile
eitikimura

Mais conteúdo relacionado

Mais procurados

SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileEiti Kimura
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisEiti Kimura
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra Otávio Santana
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso PráticoEiti Kimura
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLOrlando Vitali
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na PráticaEiti Kimura
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Otávio Santana
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi
 
Distribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraDistribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraMário Marroquim
 
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...Zabbix BR
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPAricelio Souza
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLMatheus Espanhol
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdFrederico Madeira
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosAricelio Souza
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidadeMarcelo Garcia
 

Mais procurados (20)

SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @MovileSP Big Data Meetup - Conhecendo Apache Cassandra @Movile
SP Big Data Meetup - Conhecendo Apache Cassandra @Movile
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
Primeiros passos com o Cassandra
 Primeiros passos com o Cassandra  Primeiros passos com o Cassandra
Primeiros passos com o Cassandra
 
Cassandra overview: Um Caso Prático
Cassandra overview:  Um Caso PráticoCassandra overview:  Um Caso Prático
Cassandra overview: Um Caso Prático
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
 
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
[TDC2016] Apache SparkMLlib:  Machine Learning na Prática[TDC2016] Apache SparkMLlib:  Machine Learning na Prática
[TDC2016] Apache SparkMLlib: Machine Learning na Prática
 
Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra) Bancos orientados a colunas (Cassandra)
Bancos orientados a colunas (Cassandra)
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
 
Distribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com CassandraDistribuição de Dados em Escala Global com Cassandra
Distribuição de Dados em Escala Global com Cassandra
 
Seminário - NoSQL
Seminário - NoSQLSeminário - NoSQL
Seminário - NoSQL
 
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e Drbd
 
Banco de Dados - NoSQL
Banco de Dados - NoSQLBanco de Dados - NoSQL
Banco de Dados - NoSQL
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplos
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidade
 

Semelhante a Cassandra: Banco de Dados Distribuído e Tolerante a Falhas

Mysql cluster quick start webinar
Mysql cluster quick start webinarMysql cluster quick start webinar
Mysql cluster quick start webinarhenriquesidney
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Rodrigo Campos
 
Comando para rede
Comando para redeComando para rede
Comando para redeAlan Jorge
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto DesempenhoEiti Kimura
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon Web Services LATAM
 
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...Bruno Castelucci
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni
 
Redes Mesh wifi para disponibilização de acesso à internet
Redes Mesh wifi para disponibilização de acesso à internetRedes Mesh wifi para disponibilização de acesso à internet
Redes Mesh wifi para disponibilização de acesso à internetMatheus Lincoln
 
Aula 8.3 - Iptables Tabela NAT
Aula 8.3 - Iptables Tabela NATAula 8.3 - Iptables Tabela NAT
Aula 8.3 - Iptables Tabela NATAndrei Carniel
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm ClusterFernando Ike
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...iMasters
 
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - Vitoria
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - VitoriaAWS EC2 Container Service (ECS) In Action - iMasters Developer Week - Vitoria
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - VitoriaHeitor Vital
 

Semelhante a Cassandra: Banco de Dados Distribuído e Tolerante a Falhas (20)

Mysql cluster quick start webinar
Mysql cluster quick start webinarMysql cluster quick start webinar
Mysql cluster quick start webinar
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
 
Comando para rede
Comando para redeComando para rede
Comando para rede
 
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
[DataFest-2017] Apache Cassandra Para Sistemas de Alto Desempenho
 
Sistemas Distribuídos - Clusters
Sistemas Distribuídos - ClustersSistemas Distribuídos - Clusters
Sistemas Distribuídos - Clusters
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenho
 
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
Aceleração em Hardware para OpenSSL em Sistemas Embarcados: Introdução e conc...
 
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration SampleValdir Adorni - Infra and S.A.N Assessment Integration Sample
Valdir Adorni - Infra and S.A.N Assessment Integration Sample
 
Cluster
ClusterCluster
Cluster
 
Redes Mesh wifi para disponibilização de acesso à internet
Redes Mesh wifi para disponibilização de acesso à internetRedes Mesh wifi para disponibilização de acesso à internet
Redes Mesh wifi para disponibilização de acesso à internet
 
Cluster
ClusterCluster
Cluster
 
Aula 8.3 - Iptables Tabela NAT
Aula 8.3 - Iptables Tabela NATAula 8.3 - Iptables Tabela NAT
Aula 8.3 - Iptables Tabela NAT
 
4. cloud ninja rede para faixa preta
4. cloud ninja rede para faixa preta4. cloud ninja rede para faixa preta
4. cloud ninja rede para faixa preta
 
Docker Swarm Cluster
Docker Swarm ClusterDocker Swarm Cluster
Docker Swarm Cluster
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
 
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - Vitoria
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - VitoriaAWS EC2 Container Service (ECS) In Action - iMasters Developer Week - Vitoria
AWS EC2 Container Service (ECS) In Action - iMasters Developer Week - Vitoria
 

Cassandra: Banco de Dados Distribuído e Tolerante a Falhas

  • 3. 3
  • 4. 4
  • 5. 5
  • 6. 6
  • 7. 7
  • 8. 8
  • 10. 10
  • 11. 11 Tolerante a falhas, sem ponto único central de controle, não existe um nó “master” Utiliza o Protocolo Peer-to-Peer (ao invés do modelo master/slave)
  • 12. 12 A taxa de transferência (throughput) de operações de leitura e escrita aumenta linearmente a medida que novas máquinas são adicionadas
  • 13. 13 Cassandra não usa transações ACID com nos RDBMS com rollback ou mecanismos de lock. Oference controle de atomicidade e isolamento no contexto de linha (row-level)
  • 14. 14 Escrita é atômica no contexto da partição (row). Atualização ou Inserção de colunas são tratadas como uma operação de write. Utiliza timestamps para determinar o valor mais atualizado de uma coluna (Last Wins)
  • 15. 15 A consistência e disponibilidade podem ser ajustadas (tunable). Não há lock ou consistência transacional quando múltiplas linhas ou tabelas são alteradas concorrentemente. Cassandra >= 2.0, micro transações (lighweight transactions) use em menos de 1% de suas transações
  • 16. 16 Full row-level isolation: Escrita a uma linha é totalmente isolada ao cliente que está executando a escrita e não é visível a nenhum outro cliente até que a operação complete (version >= 1.1) UPDATE Users SET login='scott' AND password='tiger' WHERE key='550e8400'; SELECT login, password FROM Users WHERE key='550e8400';
  • 17. 17 As escritas são duráveis: Todas as escritas aos nós são registrados em memória e em disco antes de retornar como uma operação completa (acknowledge)
  • 18. 18 ● ● eventually -> after some time eventualmente -> talvez, possivelmente
  • 19. 19
  • 20. 20
  • 21. 21
  • 22. 22
  • 23. 23
  • 25. 25
  • 27. 27
  • 29. 29 cd $CASSANDRA_HOME/bin ./cqlsh Connected to cassandra-cluster at localhost:9160. [cqlsh 3.1.8 | Cassandra 2.1.2 | CQL spec 3.0.5 | Thrift protocol 19.36.2] Use HELP for help. cqlsh> _
  • 30. 30 # ccm create -v 2.0.14 --nodes 3 --start clusterName # ccm status Cluster: 'clusterName' -------------- node1: UP node3: UP node2: UP # ccm node1 status # ccm node1 stop # ccm node2 start #ccm stop #ccm start
  • 31. 31 -- multinode keyspace configuration (cluster) CREATE KEYSPACE music WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 };
  • 32. 32 cqlsh> use music; cqlsh:music> CREATE TABLE songs ( id varchar PRIMARY KEY, title text, album text, artist text, data blob ); $CASSANDRA_HOME/logs/system.log INFO 14:23:58,307 Initializing music.songs
  • 33. 33 INSERT INTO songs (id, title, artist, album) VALUES ('song-1','Ojo Rojo', 'Fu Manchu', 'No One Rides'); INSERT INTO songs (id, title, artist, album) VALUES ('song-2','Enter Sandman', 'Metallica', 'Black'); INSERT INTO songs (id, title, artist, album) VALUES ('song-3','The Unforgiven', 'Metallica', 'Black'); INSERT INTO songs (id, title, artist, album) VALUES ('song-4','Run to the hills', 'Iron Maiden', 'Collections');
  • 35. 35 id int PRIMARY KEY / PRIMARY KEY (id) PRIMARY KEY (PARTITION_KEY, CLUSTERING_KEY, CLUSTERING_KEY… );
  • 36. 36 CREATE TABLE playlists ( id varchar, song_order int, song_id varchar, title text, album text, artist text, PRIMARY KEY (id, song_order)); ● ●
  • 37. 37 cqlsh:music> delete from songs where id = 'song-4'; cqlsh:music> delete from songs where id = 'song-3'; cqlsh:music> delete from songs where id = 'song-2'; cqlsh:music> select * from songs;
  • 38. 38
  • 39. 39
  • 41. 41 public void connect(String node) { cluster = Cluster.builder().addContactPoint(node).build(); // get some cluster meta data Metadata metadata = cluster.getMetadata(); for (Host host : metadata.getAllHosts()) { System.out.printf("Datatacenter: %s; Host: %s; Rack: %sn", host.getDatacenter(), host.getAddress(), host.getRack()); } // retrieve a connected session session = cluster.connect(); }
  • 42. 42 SimpleClient client = new SimpleClient(); client.connect("127.0.0.1"); Session session = client.getSession(); ResultSet results = session.execute("SELECT * FROM music.playlists"); for (Row row : results.all()) { print(row); } client.close();
  • 43. 43 Caso de Uso Movile
  • 44. 44
  • 46. 46
  • 49. 49 C*
  • 50. 50
  • 51. 51 cqlsh:music> tracing on; Now Tracing is enabled cqlsh:music> INSERT INTO songs (id, title, artist, album) VALUES ('song-4','Run to the hills', 'Iron Maiden', 'Collections');
  • 52. 52 CREATE TABLE queues ( id text, created_at timeuuid, value blob, PRIMARY KEY (id, created_at) ); SELECT * FROM queues WHERE id = 'myqueue' ORDER BY created_at LIMIT 1;
  • 54. 54 Node 1 - : 200.xxx.xxx.71 load_avg: 0.39 write_latency(us): 900.8 read_latency(us): 894.6 Node 2 - : 200.xxx.xxx.72 load_avg: 0.51 write_latency(us): 874.1 read_latency(us): 1062.5 Node 3 - : 200.xxx.xxx.73 load_avg: 0.35 write_latency(us): 900.87 read_latency(us): 887.6 Node 1 - : 200.xxx.xxx.71 load_avg: 0.63 write_latency(us): 1037 read_latency(us): 1749 Node 2 - : 200.xxx.xxx.72 load_avg: 0.37 write_latency(us): 819.8 read_latency(us): 909.0 Node 3 - : 200.xxx.xxx.74 load_avg: 0.62 write_latency(us): 1006 read_latency(us): 1056.43 DATACENTER 1DATACENTER 2 Now: 2015-07-22 13:11:00 Total Reads/second: 12441 Total Writes/second: 8883
  • 56. 56 Dica 1#: usar quando a disponibilidade é um fator importante, onde exista um alto volume de dados, com número grande de operações de escrita. Dica 2#: entenda os requisitos da aplicação, identifique os padrões de acesso a informação. Dica #3: pense em desnormalização de dados, mas com cuidado… Dica #4: usar quando desempenho é um fator importante para a aplicação