SlideShare una empresa de Scribd logo
1 de 82
Descargar para leer sin conexión
Octubre 2014
José Alvarez Muguerza 
Big Data Architect 
jose.muguerza@globant.com 
@jamuguerza josealvarezmuguerza josealvarezmuguerza
Modalidad 
Workshop (Teórico / Práctico) 
Google 
Q&A 
muchos Bookmarks !! 
? ? 
? 
? 
? 
? 
? 
? 
? 
irc
NoSql
Agenda 
➢ NoSql 
- Conceptos 
- Alternativas 
➢ Cassandra 
- Historia 
- Arquitectura 
- Escritura / Lectura 
- Conceptos 
- Herramientas 
- CQL 
- Modelado de Datos 
- Administración y Rendimiento 
- Drivers 
- Buenas Prácticas 
Objetivo???
NoSQL: qué es? 
Database 
No Relacional 
Distribuída 
Open Source 
Escala horizontalmente
NoSQL: Escalando en RDBMS 
decremento de 
performance 
al escalar 
consistencia y performance deseada 
Database Query 
Performance 
Escalabilidad 
Mayor 
atención en 
Sharding, 
Cache, 
SPoF….
NoSQL: Data Model en RDBMS 
Modelo de Datos 
<k, V>
NoSQL: Modelo Agregado en RDBMS 
Modelo Agregado 
< i,< <ki,Vi>,<ki,Vi>,<ki,Vi> >>
NoSQL: ACID en RDBMS 
Atomicity 
Consistency 
Isolation 
Durability 
Basic Availability 
Soft-state 
Eventual consistency
NoSql: CAP Theorem 
R+W>N. 
R+W=N+1
NoSql: CAP Theorem
NoSql: Ventajas sobre RDMS 
Polyglot Persistence 
➢ Esquema dinámico 
➢ Diseñados para escalar (linear) 
➢ Performance escalable 
➢ Simplicidad de uso 
Impedance Mismatch
NoSql: Database landscape
NoSql: Tipos - Clave valor 
Riak 
Redis 
MemcachedDB 
Amz DynamoDB 
Voldemort 
Berkeley 
RDBMS K,V 
Ej: RIAK 
DB Instance Riak Cluster 
table bucket 
row key,value 
row id key 
DynamoDB open source
NoSql: Tipos - Documentos 
MongoDB 
CouchDB 
Terrastore 
RavenDB 
RDBMS Documentos 
Ej: Mongo 
DB Instance Mongo Instance 
Schema Database 
Table Collection 
Row Document 
Row id _id
NoSql: Tipos - Columnar 
Cassandra 
HBase 
Hypertable 
Amz SimpleDB 
RDBMS Columnar 
Ej: Cassandra 
DB Instance Ring / Cluster 
Database Keyspace 
Table Column Family 
Row Row 
Column (# fijo) Column (# variable)
NoSql: Tipos - Grafos 
Neo4j 
Infinite Graph 
OrientDB 
“A Graph —records data in→ Nodes —which have→ Properties” 
fmi: http://en.wikipedia.org/wiki/Graph_database
Apache 
Cassandra
C*: Origen
C*: Proyecto Cassandra 
Escalabilidad 
Performance 
Disponibilidad 
Simplicidad
Cassandra: Arquitectura - Ring 
A 
B 
C 
D 
E 
F 
G 
Cassandra 
ring
Cassandra: Arquitectura - Ring MultiDatacenter
Cassandra: Arquitectura - Schema
C*: Escritura
C*: Compaction 
➢ Fusiona varias SSTables en 1 
➢ Elimina los “descartados” 
➢ Optimiza disco 
➢ Proceso pesado 
➢ automático o manual 
nodetool compact
C*: Lectura
C*: Lectura - cache
C*: repair 
➢ Repara discrepancias 
➢ CL QUORUM & ALL 
➢ DELETES, nulls y restaurado de nodos 
➢ Proceso pesado 
➢ automático o manual 
nodetool repair
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í!!!
C*: Los Tokens 
0 
25 
75 
50 
Generador de Tokens 
ON-LINE HERE !!!
C*: Partitiones 
➢ ByteOrderedPartitioner 
➢ RandomPartitioner 
➢ Murmur3Partitioner
C*: Virtual Nodes
C*: Snitches DataStax Doco! 
SimpleSnitch 
DynamicSnitch 
PropertyFileSnitch 
RackInferingSnitch
C*: Snitches para AWS
Cassandra: Snitches para AWS
C*: Snitches para AWS 
EC2Snitch 
EC2MultiRegionSnitch
C*: Quienes lo usan? casos de Usos
Ejercicios 
Instalación
Ejercicios 
Conociendo los Keyspaces
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 !!!
Ejercicios 
Múltiples nodos en local
C*: Tools - nodetool 
[cassandra-home]/bin/nodetool 
~/tools/apache-cassandra-2.0.8/tools/bin$ ./nodetool -h 192.168.1.104 status 
argumentos CLICK 
Datacenter: datacenter1 
======================= 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address Load Tokens Owns (effective) Host ID Rack 
UJ 192.168.2.104 29.19 KB 256 ? d82a7a31-591f-4ffd-998f-1557b6b95510 rack1 
UN 192.168.2.101 84.66 KB 256 70.7% e3677182-3860-49c8-992e-6cc9019eab2f rack1 
UN 192.168.2.103 71.46 KB 256 61.2% 82b84eb1-0830-45b5-8968-c1a263c3e66a rack1 
UN 192.168.2.102 55.26 KB 256 68.2% 0f9a1f05-085d-4591-9edd-85174aa55458 rack1 
HERE !!!
ClusterSSH 
cssh
ClusterSSH 
$ vi .csshrc 
clusters = node1 node2 node3 node4 ring 
node1 = jose@192.168.2.101 
node2 = jose@192.168.2.102 
node3 = jose@192.168.2.103 
node4 = jose@192.168.2.104 
ring = node1 node2 node3 node4 
$ cssh ring
Cassandra: 
CQL 
CREATE TABLE usuarios ( 
usuario varchar, 
clave varchar, 
nombre varchar, 
token varchar, 
sexo varchar, 
nacimiento bigint, 
PRIMARY KEY (usuario));
C*: CQL 
CREATE TABLE eventos ( 
tipo text, 
fecha timestamp, 
evento blob, 
PRIMARY KEY (tipo, fecha) 
) 
WITH CLUSTERING ORDER BY (fecha DESC); 
partition key 
DDL
C*: CQL 
DML 
SELECT * FROM system.schema_keyspaces;
Cassandra: CQL 
Data Types
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>)
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
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
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
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);
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!!
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);
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';
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';
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
Ejercicios 
Prácticas CQL
C*: Tools - DevCenter 
http://www.datastax.com/download#dl-devcenter
Data Model
C*: Principios en Modelado 
➢ Pensar en Entidades y en Consultas 
➢ “write many, read one” 
➢ Des-normalizar, datos duplicados, JOIN 
➢ Wide-rows: múltiples columnas 
➢ Timeseries 
➢ Iterativo 
➢ Partition-keys compuestas
Administración 
& 
Rendimiento
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';
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
C*: Tools - JMX 
Métricas
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
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
C*: Backups 
snapshots 
nodetool snapshot [snapshotName] 
nodetool clearsnapshot [snapshotName]
Ejercicios 
Rendimiento
C*: Tools - tracing en CQL 
TRACING ON; 
INSERT INTO empleados 
(ID, departamento, nombre, apellido) 
VALUES (104, 15, 'juan', 'perez');
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
C*: Tools - OpsCenter 
http://www.datastax.com/documentation/opscenter/5.0/opsc/about_c.html
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/
Drivers
C*: Clientes 
Java 
PHP 
Perl 
Ruby 
C++ 
Python 
CQL 
Node.js .Net Clojure 
Scala Erlang 
https://wiki.apache.org/cassandra/ClientOptions
Ejercicios 
C* + Java
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
C*: Conceptos 
Anillo (Ring o Cluster) 
Keyspace 
Column Family (Table) 
Primary Key 
Partition Key 
Memtable 
SSTable 
CommitLog 
Counter 
TTL 
Snappy 
ESTRUCTURA
C*: Conceptos (cont.) 
Compaction 
Coordinator 
Flushing 
Replication Factor 
Consistency Level 
Quorum 
Read Repair 
Token 
CQL 
Seq I/O vs Random I/O 
Snitch 
Bootstrap 
Hinted handoff 
Gossip 
CAPACIDADES
C*: Principales Fuentes de Doc 
http://www.datastax.com/documentation/cassandra/2.1/ 
http://planetcassandra.org/documentation/ 
Blogs 
google

Más contenido relacionado

Destacado

Big Data using NoSQL Technologies
Big Data using NoSQL TechnologiesBig Data using NoSQL Technologies
Big Data using NoSQL TechnologiesAmit Singh
 
Introduction to Bigdata and NoSQL
Introduction to Bigdata and NoSQLIntroduction to Bigdata and NoSQL
Introduction to Bigdata and NoSQLTushar Shende
 
Introduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & HadoopIntroduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & HadoopSavvycom Savvycom
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQLRTigger
 
SQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureSQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureVenu Anuganti
 
A Beginners Guide to noSQL
A Beginners Guide to noSQLA Beginners Guide to noSQL
A Beginners Guide to noSQLMike Crabb
 

Destacado (6)

Big Data using NoSQL Technologies
Big Data using NoSQL TechnologiesBig Data using NoSQL Technologies
Big Data using NoSQL Technologies
 
Introduction to Bigdata and NoSQL
Introduction to Bigdata and NoSQLIntroduction to Bigdata and NoSQL
Introduction to Bigdata and NoSQL
 
Introduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & HadoopIntroduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & Hadoop
 
Sql vs NoSQL
Sql vs NoSQLSql vs NoSQL
Sql vs NoSQL
 
SQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data ArchitectureSQL, NoSQL, BigData in Data Architecture
SQL, NoSQL, BigData in Data Architecture
 
A Beginners Guide to noSQL
A Beginners Guide to noSQLA Beginners Guide to noSQL
A Beginners Guide to noSQL
 

Similar a BigData - NoSQL

Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandrajesusnoseq
 
Cassandra Meetup
Cassandra MeetupCassandra Meetup
Cassandra MeetupStratebi
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005oswchavez
 
Sql plus temario
Sql plus temarioSql plus temario
Sql plus temarioHugo Mdz
 
Bd 2 1 fundamentos transact sql
Bd 2   1 fundamentos transact sqlBd 2   1 fundamentos transact sql
Bd 2 1 fundamentos transact sqlCarlos Lopez
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Julián Castiblanco
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My SqlJose Ponce
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpEdgar Solis
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
 

Similar a BigData - NoSQL (20)

Presentacion sobre cassandra
Presentacion sobre cassandraPresentacion sobre cassandra
Presentacion sobre cassandra
 
Cassandra Meetup
Cassandra MeetupCassandra Meetup
Cassandra Meetup
 
Integración de DataStax de Spark con Cassandra
Integración de DataStax de Spark con CassandraIntegración de DataStax de Spark con Cassandra
Integración de DataStax de Spark con Cassandra
 
IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005IntroduccióN A Sql Server 2005
IntroduccióN A Sql Server 2005
 
Sql plus temario
Sql plus temarioSql plus temario
Sql plus temario
 
Bd 2 1 fundamentos transact sql
Bd 2   1 fundamentos transact sqlBd 2   1 fundamentos transact sql
Bd 2 1 fundamentos transact sql
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 
Curso gratuito de Redis
Curso gratuito de RedisCurso gratuito de Redis
Curso gratuito de Redis
 
Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)
 
Base de datos
Base de datosBase de datos
Base de datos
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
 
Ejemplo bbdd sqlite (android)
Ejemplo bbdd sqlite (android)Ejemplo bbdd sqlite (android)
Ejemplo bbdd sqlite (android)
 
Mysql
MysqlMysql
Mysql
 
MANUAL
MANUALMANUAL
MANUAL
 
Postgresql expo
Postgresql expoPostgresql expo
Postgresql expo
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmp
 
Sql server(1)
Sql server(1)Sql server(1)
Sql server(1)
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 

BigData - NoSQL

  • 2. José Alvarez Muguerza Big Data Architect jose.muguerza@globant.com @jamuguerza josealvarezmuguerza josealvarezmuguerza
  • 3. Modalidad Workshop (Teórico / Práctico) Google Q&A muchos Bookmarks !! ? ? ? ? ? ? ? ? ? irc
  • 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….
  • 8. NoSQL: Data Model en RDBMS Modelo de Datos <k, V>
  • 9. NoSQL: Modelo Agregado en RDBMS Modelo Agregado < i,< <ki,Vi>,<ki,Vi>,<ki,Vi> >>
  • 10. NoSQL: ACID en RDBMS Atomicity Consistency Isolation Durability Basic Availability Soft-state Eventual consistency
  • 11. NoSql: CAP Theorem R+W>N. R+W=N+1
  • 13. NoSql: Ventajas sobre RDMS Polyglot Persistence ➢ Esquema dinámico ➢ Diseñados para escalar (linear) ➢ Performance escalable ➢ Simplicidad de uso Impedance Mismatch
  • 15. NoSql: Tipos - Clave valor Riak Redis MemcachedDB Amz DynamoDB Voldemort Berkeley RDBMS K,V Ej: RIAK DB Instance Riak Cluster table bucket row key,value row id key DynamoDB open source
  • 16. NoSql: Tipos - Documentos MongoDB CouchDB Terrastore RavenDB RDBMS Documentos Ej: Mongo DB Instance Mongo Instance Schema Database Table Collection Row Document Row id _id
  • 17. NoSql: Tipos - Columnar Cassandra HBase Hypertable Amz SimpleDB RDBMS Columnar Ej: Cassandra DB Instance Ring / Cluster Database Keyspace Table Column Family Row Row Column (# fijo) Column (# variable)
  • 18. NoSql: Tipos - Grafos Neo4j Infinite Graph OrientDB “A Graph —records data in→ Nodes —which have→ Properties” fmi: http://en.wikipedia.org/wiki/Graph_database
  • 21. C*: Proyecto Cassandra Escalabilidad Performance Disponibilidad Simplicidad
  • 22. Cassandra: Arquitectura - Ring A B C D E F G Cassandra ring
  • 23. Cassandra: Arquitectura - Ring MultiDatacenter
  • 26. C*: Compaction ➢ Fusiona varias SSTables en 1 ➢ Elimina los “descartados” ➢ Optimiza disco ➢ Proceso pesado ➢ automático o manual nodetool compact
  • 28. C*: Lectura - cache
  • 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 !!!
  • 32. C*: Partitiones ➢ ByteOrderedPartitioner ➢ RandomPartitioner ➢ Murmur3Partitioner
  • 34. C*: Snitches DataStax Doco! SimpleSnitch DynamicSnitch PropertyFileSnitch RackInferingSnitch
  • 37. C*: Snitches para AWS EC2Snitch EC2MultiRegionSnitch
  • 38. C*: Quienes lo usan? casos de Usos
  • 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 !!!
  • 43. C*: Tools - nodetool [cassandra-home]/bin/nodetool ~/tools/apache-cassandra-2.0.8/tools/bin$ ./nodetool -h 192.168.1.104 status argumentos CLICK Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UJ 192.168.2.104 29.19 KB 256 ? d82a7a31-591f-4ffd-998f-1557b6b95510 rack1 UN 192.168.2.101 84.66 KB 256 70.7% e3677182-3860-49c8-992e-6cc9019eab2f rack1 UN 192.168.2.103 71.46 KB 256 61.2% 82b84eb1-0830-45b5-8968-c1a263c3e66a rack1 UN 192.168.2.102 55.26 KB 256 68.2% 0f9a1f05-085d-4591-9edd-85174aa55458 rack1 HERE !!!
  • 45. ClusterSSH $ vi .csshrc clusters = node1 node2 node3 node4 ring node1 = jose@192.168.2.101 node2 = jose@192.168.2.102 node3 = jose@192.168.2.103 node4 = jose@192.168.2.104 ring = node1 node2 node3 node4 $ cssh ring
  • 46. Cassandra: CQL CREATE TABLE usuarios ( usuario varchar, clave varchar, nombre varchar, token varchar, sexo varchar, nacimiento bigint, PRIMARY KEY (usuario));
  • 47. C*: CQL CREATE TABLE eventos ( tipo text, fecha timestamp, evento blob, PRIMARY KEY (tipo, fecha) ) WITH CLUSTERING ORDER BY (fecha DESC); partition key DDL
  • 48. C*: CQL DML SELECT * FROM system.schema_keyspaces;
  • 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
  • 61. C*: Tools - DevCenter http://www.datastax.com/download#dl-devcenter
  • 63. C*: Principios en Modelado ➢ Pensar en Entidades y en Consultas ➢ “write many, read one” ➢ Des-normalizar, datos duplicados, JOIN ➢ Wide-rows: múltiples columnas ➢ Timeseries ➢ Iterativo ➢ Partition-keys compuestas
  • 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
  • 67. C*: Tools - JMX Métricas
  • 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
  • 70. C*: Backups snapshots nodetool snapshot [snapshotName] nodetool clearsnapshot [snapshotName]
  • 72. C*: Tools - tracing en CQL TRACING ON; INSERT INTO empleados (ID, departamento, nombre, apellido) VALUES (104, 15, 'juan', 'perez');
  • 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
  • 74. C*: Tools - OpsCenter http://www.datastax.com/documentation/opscenter/5.0/opsc/about_c.html
  • 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/
  • 77. C*: Clientes Java PHP Perl Ruby C++ Python CQL Node.js .Net Clojure Scala Erlang https://wiki.apache.org/cassandra/ClientOptions
  • 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
  • 80. C*: Conceptos Anillo (Ring o Cluster) Keyspace Column Family (Table) Primary Key Partition Key Memtable SSTable CommitLog Counter TTL Snappy ESTRUCTURA
  • 81. C*: Conceptos (cont.) Compaction Coordinator Flushing Replication Factor Consistency Level Quorum Read Repair Token CQL Seq I/O vs Random I/O Snitch Bootstrap Hinted handoff Gossip CAPACIDADES
  • 82. C*: Principales Fuentes de Doc http://www.datastax.com/documentation/cassandra/2.1/ http://planetcassandra.org/documentation/ Blogs google