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