This presentation belongs to 1 of 9 sections within the Big Data Workshop.
Other topics are Parallel Processing, SNA, Data Ingestion, Visualization, among others
5. Agenda
➢ NoSql
- Conceptos
- Alternativas
➢ Cassandra
- Historia
- Arquitectura
- Escritura / Lectura
- Conceptos
- Herramientas
- CQL
- Modelado de Datos
- Administración y Rendimiento
- Drivers
- Buenas Prácticas
Objetivo???
6. NoSQL: qué es?
Database
No Relacional
Distribuída
Open Source
Escala horizontalmente
7. NoSQL: Escalando en RDBMS
decremento de
performance
al escalar
consistencia y performance deseada
Database Query
Performance
Escalabilidad
Mayor
atención en
Sharding,
Cache,
SPoF….
29. C*: repair
➢ Repara discrepancias
➢ CL QUORUM & ALL
➢ DELETES, nulls y restaurado de nodos
➢ Proceso pesado
➢ automático o manual
nodetool repair
30. C*: R/W en cluster
CONSISTENCY LEVEL
ALL= ACK de todos los nodos
QUORUM = > 51% de los nodos
LOCAL_QUORUM = > 51% en mi DC
ONE = ACK de 1 nodo
Eventual / Strong consistency for dummies: Aquí!!!
31. C*: Los Tokens
0
25
75
50
Generador de Tokens
ON-LINE HERE !!!
41. C*: Tools - cassadra-cli
//Adding data to the Column families
set Accounts['1234']['balance'] = long(1000);
//Reading the columns
[default@Bank] get Accounts [utf8('1234')];
=> (column=62616c616e6365, value=1000,
timestamp=1389652586026000)
=> (column=6e616d65, value=John,
timestamp=1389652425044000)
Returned 2 results.
//Drop CF
drop column family Accounts;
//connect to a cluster
connect 127.0.0.1/9160;
//Creating the database
create keyspace Bank;
//Using the Database
use Bank;
//Creating a CF
create column family Accounts;
//Making Cassandra aware of the data type
assume Accounts keys as utf8;
//Adding data to the Column families
set Accounts['1234']['name'] = 'Jose';
Deprecado !!!
50. C*: Colecciones
➢ List
➢ Set
➢ Map
CREATE TABLE colecciones (
id int PRIMARY KEY,
ejemplo_list list<text>,
ejemplo_set set<text>,
ejemplo_map map<int,text>)
51. C*: Colecciones - List
Respeta orden de inserción!!!
ejemplo_list list<text>
Nombre de Colección Tipo de Colección Tipo CQL de los
elementos
52. C*: Colecciones - Set
orden en base a Comparator !!
ejemplo_set set<text>
Nombre de Colección Tipo de Colección Tipo CQL de los
elementos
53. C*: Colecciones - Map
orden en base a Comparator !!
ejemplo_map map<int,text>
Nombre de Colección Tipo de Colección Tipo CQL de los
elementos
54. C*: Colecciones - List - Ejemplos
INSERT INTO colecciones (id, ejemplo_list)
VALUES (1, ['juan', 'pedro']);
UPDATE colecciones SET ejemplo_list = ejemplo_list + ['luis']
WHERE id = 1);
UPDATE colecciones SET ejemplo_list = ['mario'] + ejemplo_list
WHERE id = 1);
id ejemplo_list
1 [ 'mario', 'juan', 'pedro', 'luis']
UPDATE colecciones SET ejemplo_list = ejemplo_list - ['pedro']
WHERE id = 1);
55. C*: Colecciones - Set - Ejemplos
INSERT INTO colecciones (id, ejemplo_set)
VALUES (1, {'juan', 'pedro'});
UPDATE colecciones SET ejemplo_set = ejemplo_set + {'luis'}
WHERE id = 1);
UPDATE colecciones SET ejemplo_set = ['mario'] + ejemplo_set
WHERE id = 1);
id ejemplo_map
1 [ 'juan', 'luis', 'mario', 'pedro',]
UPDATE colecciones SET ejemplo_set = ejemplo_set - {'pedro'}
WHERE id = 1);
llaves!!
56. C*: Colecciones - Map - Ejemplos
INSERT INTO colecciones (id, ejemplo_map)
VALUES (1, {1:'juan', 2:'pedro'});
UPDATE colecciones SET ejemplo_map[7] = 'luis'
WHERE id = 1);
id ejemplo_map
1 [ 1 :'juan' , 2 :pedro' , 7 :'luis' ]
DELETE ejemplo_map[7] FROM colecciones WHERE id = 1);
57. C*: TTL
INSERT INTO usuarios (usuario, clave)
segundos!!
VALUES ('juan001', '123abc') USING TTL 86400
1 día 5 días
UPDATE usuarios USING TTL 432000 SET clave = '678xzy'
WHERE usuario = 'juan001';
SELECT clave, TTL(clave) from usuarios WHERE usuario = 'juan001';
58. C*: Counters
CREATE TABLE websites.visitas
(visitas counter,
url varchar,
pagina varchar,
PRIMARY KEY (url, pagina)
);
UPDATE websites.visitas
+1
0
-3
➢ tabla dedicada a contadores
➢ No soporta Index ni delete
➢ Tampoco TTL ni TIMESTAMPS
➢ No puede ser KEY
➢ Sólo por in/de-crementos, no
se puede setear
➢ No reutilizables
SET visitas = visitas + 2
WHERE url='www.planetcassandra.org' AND pagina='home';
59. C*: Timestamps
Cell
NAME
‘Edad'
VALUE
65
TIMESTAMP
1357866010549000
public interface Cell extends
OnDiskAtom {
…
public CellName More name();
public ByteBuffer More value();
public long More timestamp()
…
microsegundos!!! } INSERT INTO usuarios (usuario, clave)
VALUES ('juan001', '123abc') USING TIMESTAMP 1357866010549000
65. C*: Autenticación
cassandra.yaml
authenticator: AllowAllAuthenticator|PasswordAuthenticator
CREATE USER 'jose' WITH PASSWORD '123456' SUPERMANAGER;
ALTER USER 'cassandra' WITH PASSWORD 'nueva_pass';
ó
DROP USER 'cassandra';
66. C*: Autorización
cassandra.yaml
authority: AllowAllAuthority|CassandraAuthorizer
GRANT select ON tabla1 TO 'jose';
LIST ALL PERMISSIONS ON keyspace1.tabla1 OF 'jose'
GRANT LIST
REVOK
E
68. C*: Tools - JMX
org.apache.cassandra.db:
cache, table metric, commitlog, compaction, cluster info,
org.apache.cassandra.internal:
operaciones internas del server: cache, gossip, flush, hinted off
org.apache.cassandra.metrics
métricas internas de las operaciones arriba mencionadas, latencias
org.apache.cassandra.net
En relación a transmisión de datos en la red, fallas, origen->destino, etc
org.apache.cassandra.request
reads, blocked tasks, pools, etc
69. C*: manipulando nodos
- Retirar un nodo
- Re-insertar un nodo
(seeds)
- Agregar un nuevo nodo
<< auto_bootstrap >>
A
B
C
D
E
F
G
Cassandra
ring
nodetool decommission
nodetool repair
73. C*: Tools - cassandra-stress
[cassandra-home]/tools/bin/cassandra-stress
~/tools/apache-cassandra-2.0.8/tools/bin$ ./cassandra-stress
Created keyspaces. Sleeping 1s for propagation.
total,interval_op_rate,interval_key_rate,latency,95th,99.9th,elapsed_time
22623,2262,2262,7.4,32.5,793.8,10
87791,6516,6516,2.3,15.8,528.3,20
183523,9573,9573,1.6,11.7,212.0,30
argumentos CLICK
HERE !!!
99% por debajo de esta latencia
95% por debajo de esta latencia
latencia promedio x operación en este intervalo
# de keys manipuladas en este intervalo
# de operaciones en este intervalo (10 seg por defecto)
# de operaciones desde que inició el test
tiempo desde que se inició el test
75. C*: Tools - cstar_perf
Stress tests en múltiples clusters
Diferentes versiones / branches de C*
Diferentes yaml por cluster
https://github.com/datastax/cstar_perf
http://datastax.github.io/cstar_perf/
79. Buenas Prácticas
Hardware
➢ CPU con Múltiples cores
➢ Mínimo 2 HD (SSTables y commitLog separados)
➢ Net: Gossip y Data por dif interfases
Software
➢ Usarlo bajo ‘nix -
➢ Updates no “Leer antes de Escribir” -
➢ Evitar SuperColumns -
➢ usar Murmur3Partitioner -
➢ Oracle JVM (no otra) -
➢ Usar secuencia de baja, no Ctrl+C -
➢ Backups
➢ Monitorear