Introducción a CQL3
José Hernández
Isthari
jose.Hernandez@isthari.com

ISTHARI – INTRODUCCIÓN CQL3
Apache Cassandra


Base de datos NoSQL



Descentralizada



Replicación en multiples datacenter



Tolerante a fallos...
Key - value
Users
Email

Name

3d2ce2d2-933b

john@nobody.com

John

54a026ae-933b

doe@nobody.com

Doe

ISTHARI – INTRODU...
Desnormalización
Users
Email

Name

3d2ce2d2-933b

john@nobody.com

John

54a026ae-933b

doe@nobody.com

Doe

Users_by_ema...
Replicación


Primary key john@nobody.com => hash: 18

ISTHARI – INTRODUCCIÓN CQL3
Replicación


Primary key john@nobody.com => hash: 18

ISTHARI – INTRODUCCIÓN CQL3
Placement


SimpleStrategy



NetworkTopologyStrategy


SimpleSnitch, pruebas y desarrollo



DynamicSnitch, en funció...
Consistency level
Any

(write)

ISTHARI – INTRODUCCIÓN CQL3
Consistency level
One

ISTHARI – INTRODUCCIÓN CQL3
Consistency level
Two

ISTHARI – INTRODUCCIÓN CQL3
Consistency level
Any

(write)

ISTHARI – INTRODUCCIÓN CQL3
Consistency level
Quorum

Replicas/1+2

ISTHARI – INTRODUCCIÓN CQL3
Consistency level
All

ISTHARI – INTRODUCCIÓN CQL3
Keyspace
CREATE KEYSPACE cql WITH replication = {
'class': ‘NetworkTopologyStrategy',
and strategy_options:Madrid = 3,
and...
Table
CREATE TABLE users (
id uuid PRIMARY KEY , email text, name text ) ;

ISTHARI – INTRODUCCIÓN CQL3
Insert
CREATE TABLE users (
id uuid PRIMARY KEY , email text, name text ) ;
INSERT INTO users (id, email , name )
VALUES (...
Update
CREATE TABLE users (
id uuid PRIMARY KEY , email text, name text ) ;
INSERT INTO users (id, email , name )
VALUES (...
Delete
CREATE TABLE users (
id uuid PRIMARY KEY , email text, name text ) ;
INSERT INTO users (id, email , name )
VALUES (...
Select
SELECT * from users ;
id

| email

| name

------------+-----------------+-----4b8f9e26-… | john@nobody.com |

ISTH...
UPSERT
SELECT * from users ;
id

| email

| name

------------+-----------------+-----4b8f9e26-… | john@nobody.com |

Doe
...
Primary key compuesto
CREATE TABLE employees (
company text,
name text,
age int,
role text,
primary key (company, name));
...
Primary key compuesto
CREATE TABLE employees (

Name

Age

Role

company text,

IST

John

30

Dev

name text,

IST

Doe

...
Primary key compuesto
CREATE TABLE employees (

Name

Age

Role

company text,

IST

John

30

Dev

name text,

IST

Doe

...
Primary key compuesto
CREATE TABLE employees (

Name

Age

Role

company text,

IST

John

30

Dev

name text,

IST

Doe

...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid ,
date timestamp,
value decimal,
primary KEY (sensor_id ...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid ,
date timestamp,
value decimal,
primary KEY (sensor_id ...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid ,
date timestamp,
value decimal,
primary KEY (sensor_id ...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid,
year int,
date timestamp,
value decimal,
primary KEY ((...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid,
year int,
date timestamp,
value decimal,
primary KEY ((...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid,
year int,
date timestamp,
value decimal,
primary KEY ((...
Partition key compuesto
CREATE TABLE sensor_data (
sensor_id uuid,
year int,
date timestamp,
value decimal,
primary KEY ((...
Lightweight transacion
CREATE TABLE user_by_email (
email text PRIMARY KEY ,
user_id uuid);

ISTHARI – INTRODUCCIÓN CQL3
Lightweight transacion
CREATE TABLE user_by_email (
email text PRIMARY KEY ,
user_id uuid);
INSERT INTO user_by_email (ema...
Batch
BEGIN BATCH
INSERT INTO user_by_email (email, user_id )
VALUES ( 'john@nobody.com', d3979598-93cf-…) if not exists;
...
Set
CREATE TABLE articulo (
id uuid PRIMARY KEY ,
contenido text,
tags set<text >);

ISTHARI – INTRODUCCIÓN CQL3
Set
CREATE TABLE articulo (
id uuid PRIMARY KEY ,
contenido text,
tags set<text >);

ISTHARI – INTRODUCCIÓN CQL3

Contenid...
Set
CREATE TABLE articulo (
id uuid PRIMARY KEY ,
contenido text,

e2a9b6e6-…

tags set<text >);

Contenido
e2a9b6e6-…

IS...
Set
CREATE TABLE articulo (
id uuid PRIMARY KEY ,
contenido text,
tags set<text >);
INSERT INTO articulo (id, contenido , ...
Set
CREATE TABLE articulo (
id uuid PRIMARY KEY ,
contenido text,
tags set<text >);
INSERT INTO articulo (id, contenido , ...
List
CREATE TABLE ruta(
id uuid PRIMARY KEY ,
nombre text,
ciudades list<text >);

ISTHARI – INTRODUCCIÓN CQL3

Nombre
e2a...
List
CREATE TABLE ruta(
id uuid PRIMARY KEY ,
nombre text,
ciudades list<text >);

Nombre
e2a9b6e6-…

Ciudades

Ruta 1

[‘...
List
CREATE TABLE ruta(
id uuid PRIMARY KEY ,
nombre text,
ciudades list<text >);

Nombre
e2a9b6e6-…

Ciudades

Ruta 1

[‘...
List
CREATE TABLE ruta(
id uuid PRIMARY KEY ,
nombre text,
ciudades list<text >);

Nombre
e2a9b6e6-…

Ciudades

Ruta 1

[‘...
Map
CREATE TABLE producto(
id uuid PRIMARY KEY ,
nombre text,
caracteristicas
map<string, string >);

ISTHARI – INTRODUCCI...
Map
CREATE TABLE producto(
id uuid PRIMARY KEY ,
nombre text,

Nombre
e2a9b6e6-…

caracteristicas

Caracteristicas

Mesa

...
Map
CREATE TABLE producto(
id uuid PRIMARY KEY ,
nombre text,
caracteristicas

Nombre
e2a9b6e6-…

Caracteristicas

Mesa

{...
Preguntas y sugerencias
Gracias por asistir

ISTHARI – INTRODUCCIÓN CQL3
Upcoming SlideShare
Loading in …5
×

Introduccion a Cassandra CQL3

470 views

Published on

Introducción a Cassandra CQL3

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
470
On SlideShare
0
From Embeds
0
Number of Embeds
74
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introduccion a Cassandra CQL3

  1. 1. Introducción a CQL3 José Hernández Isthari jose.Hernandez@isthari.com ISTHARI – INTRODUCCIÓN CQL3
  2. 2. Apache Cassandra  Base de datos NoSQL  Descentralizada  Replicación en multiples datacenter  Tolerante a fallos  Escalabilidad lineal  Tunable consistency ISTHARI – INTRODUCCIÓN CQL3
  3. 3. Key - value Users Email Name 3d2ce2d2-933b john@nobody.com John 54a026ae-933b doe@nobody.com Doe ISTHARI – INTRODUCCIÓN CQL3
  4. 4. Desnormalización Users Email Name 3d2ce2d2-933b john@nobody.com John 54a026ae-933b doe@nobody.com Doe Users_by_email ID john@nobody.com 3d2ce2d2-933b doe@nobody.com 54a026ae-933b ISTHARI – INTRODUCCIÓN CQL3
  5. 5. Replicación  Primary key john@nobody.com => hash: 18 ISTHARI – INTRODUCCIÓN CQL3
  6. 6. Replicación  Primary key john@nobody.com => hash: 18 ISTHARI – INTRODUCCIÓN CQL3
  7. 7. Placement  SimpleStrategy  NetworkTopologyStrategy  SimpleSnitch, pruebas y desarrollo  DynamicSnitch, en función del rendimiento  PropertyFileSnitch, asignación IP => Datacenter y rack  EC2Snitch  EC2MultiRegionSnitch  RackInferringSnitch, a partir de red ISTHARI – INTRODUCCIÓN CQL3
  8. 8. Consistency level Any (write) ISTHARI – INTRODUCCIÓN CQL3
  9. 9. Consistency level One ISTHARI – INTRODUCCIÓN CQL3
  10. 10. Consistency level Two ISTHARI – INTRODUCCIÓN CQL3
  11. 11. Consistency level Any (write) ISTHARI – INTRODUCCIÓN CQL3
  12. 12. Consistency level Quorum Replicas/1+2 ISTHARI – INTRODUCCIÓN CQL3
  13. 13. Consistency level All ISTHARI – INTRODUCCIÓN CQL3
  14. 14. Keyspace CREATE KEYSPACE cql WITH replication = { 'class': ‘NetworkTopologyStrategy', and strategy_options:Madrid = 3, and strategy_options:Barcelona = 6, and strategy_options:Paris = 30 } ISTHARI – INTRODUCCIÓN CQL3
  15. 15. Table CREATE TABLE users ( id uuid PRIMARY KEY , email text, name text ) ; ISTHARI – INTRODUCCIÓN CQL3
  16. 16. Insert CREATE TABLE users ( id uuid PRIMARY KEY , email text, name text ) ; INSERT INTO users (id, email , name ) VALUES ( 4b8f9e26-…, 'john@nobody.com', 'John'); ISTHARI – INTRODUCCIÓN CQL3
  17. 17. Update CREATE TABLE users ( id uuid PRIMARY KEY , email text, name text ) ; INSERT INTO users (id, email , name ) VALUES ( 4b8f9e26-…, 'john@nobody.com', 'John'); UPDATE users SET name = 'Doe' where id=4b8f9e26-…; ISTHARI – INTRODUCCIÓN CQL3
  18. 18. Delete CREATE TABLE users ( id uuid PRIMARY KEY , email text, name text ) ; INSERT INTO users (id, email , name ) VALUES ( 4b8f9e26-…, 'john@nobody.com', 'John'); UPDATE users SET name = 'Doe' where id=4b8f9e26-…; DELETE from user WHERE id=4b8f9e26-…; ISTHARI – INTRODUCCIÓN CQL3
  19. 19. Select SELECT * from users ; id | email | name ------------+-----------------+-----4b8f9e26-… | john@nobody.com | ISTHARI – INTRODUCCIÓN CQL3 Doe
  20. 20. UPSERT SELECT * from users ; id | email | name ------------+-----------------+-----4b8f9e26-… | john@nobody.com | Doe INSERT INTO users (id, email , name ) VALUES ( 4b8f9e26-…, 'john@nobody.com', 'Doe'); UPDATE users SET email = 'doe@nobody.com', name='Doe' where id=859086f4-…; ISTHARI – INTRODUCCIÓN CQL3
  21. 21. Primary key compuesto CREATE TABLE employees ( company text, name text, age int, role text, primary key (company, name)); ISTHARI – INTRODUCCIÓN CQL3
  22. 22. Primary key compuesto CREATE TABLE employees ( Name Age Role company text, IST John 30 Dev name text, IST Doe 40 Admin age int, RPT Peter 30 Dev role text, primary key (company, name)); ISTHARI – INTRODUCCIÓN CQL3
  23. 23. Primary key compuesto CREATE TABLE employees ( Name Age Role company text, IST John 30 Dev name text, IST Doe 40 Admin age int, RPT Peter 30 Dev role text, primary key (company, name)); Doe:age IST ISTHARI – INTRODUCCIÓN CQL3 Doe:role John:age John:role 40 Admin 30 Dev
  24. 24. Primary key compuesto CREATE TABLE employees ( Name Age Role company text, IST John 30 Dev name text, IST Doe 40 Admin age int, RPT Peter 30 Dev role text, primary key (company, name)); company | name | age | role ---------+-------+-----+------RPT | Peter | 30 | IST | Doe | 40 | Admin IST | John | ISTHARI – INTRODUCCIÓN CQL3 30 | Dev Dev
  25. 25. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid , date timestamp, value decimal, primary KEY (sensor_id , date)); Fecha1:value sensor1 ISTHARI – INTRODUCCIÓN CQL3 Fecha2:value Fecha3:value 20 0.5 -10.3
  26. 26. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid , date timestamp, value decimal, primary KEY (sensor_id , date)); Límite 2.000.000.000 de columnas por registro, teórico ISTHARI – INTRODUCCIÓN CQL3
  27. 27. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid , date timestamp, value decimal, primary KEY (sensor_id , date)); Límite 2.000.000.000 de columnas por registro, teórico Límite práctico 100.000 columnas por registro ISTHARI – INTRODUCCIÓN CQL3
  28. 28. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid, year int, date timestamp, value decimal, primary KEY ((sensor_id, year), date)); Fecha1:value Sensor_1:2014 ISTHARI – INTRODUCCIÓN CQL3 Fecha2:value Fecha3:value 20 0.5 -10.3
  29. 29. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid, year int, date timestamp, value decimal, primary KEY ((sensor_id, year), date)); SELECT * FROM sensor_data where sensor_id=c3e04efc-…; ISTHARI – INTRODUCCIÓN CQL3
  30. 30. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid, year int, date timestamp, value decimal, primary KEY ((sensor_id, year), date)); SELECT * FROM sensor_data where sensor_id=c3e04efc-…; SELECT * FROM sensor_data where sensor_id=c3e04efc-… and year =2014; ISTHARI – INTRODUCCIÓN CQL3
  31. 31. Partition key compuesto CREATE TABLE sensor_data ( sensor_id uuid, year int, date timestamp, value decimal, primary KEY ((sensor_id, year), date)); SELECT * FROM sensor_data where sensor_id=c3e04efc-…; SELECT * FROM sensor_data where sensor_id=c3e04efc-… and year =2014; SELECT * FROM sensor_data where sensor_id=c3e04efc-… and year =2014 and date > '2014-02-11 12:00:00'; ISTHARI – INTRODUCCIÓN CQL3
  32. 32. Lightweight transacion CREATE TABLE user_by_email ( email text PRIMARY KEY , user_id uuid); ISTHARI – INTRODUCCIÓN CQL3
  33. 33. Lightweight transacion CREATE TABLE user_by_email ( email text PRIMARY KEY , user_id uuid); INSERT INTO user_by_email (email, user_id ) VALUES ( 'john@nobody.com', d3979598-93cf-…) if not exists; ISTHARI – INTRODUCCIÓN CQL3
  34. 34. Batch BEGIN BATCH INSERT INTO user_by_email (email, user_id ) VALUES ( 'john@nobody.com', d3979598-93cf-…) if not exists; INSERT INTO user (id, email , name ) VALUES (d3979598-93cf-…, 'john@nobody.com', 'john'); APPLY BATCH ISTHARI – INTRODUCCIÓN CQL3
  35. 35. Set CREATE TABLE articulo ( id uuid PRIMARY KEY , contenido text, tags set<text >); ISTHARI – INTRODUCCIÓN CQL3
  36. 36. Set CREATE TABLE articulo ( id uuid PRIMARY KEY , contenido text, tags set<text >); ISTHARI – INTRODUCCIÓN CQL3 Contenido e2a9b6e6-… Tags Articulo {‘ciencia’, ‘noticia’}
  37. 37. Set CREATE TABLE articulo ( id uuid PRIMARY KEY , contenido text, e2a9b6e6-… tags set<text >); Contenido e2a9b6e6-… ISTHARI – INTRODUCCIÓN CQL3 Contenido Articulo Tags Articulo {‘ciencia’, ‘noticia’} Tags:ciencia Tags:noticia
  38. 38. Set CREATE TABLE articulo ( id uuid PRIMARY KEY , contenido text, tags set<text >); INSERT INTO articulo (id, contenido , tags ) VALUES ( e2a9b6e6- …, 'articulo', {'ciencia', 'noticia'}); ISTHARI – INTRODUCCIÓN CQL3
  39. 39. Set CREATE TABLE articulo ( id uuid PRIMARY KEY , contenido text, tags set<text >); INSERT INTO articulo (id, contenido , tags ) VALUES ( e2a9b6e6- …, 'articulo', {'ciencia', 'noticia'}); UPDATE articulo SET tags = tags+{'politica'} where id=e2a9b6e6-…; UPDATE articulo SET tags = tags-{'politica'} where id=e2a9b6e6-…; ISTHARI – INTRODUCCIÓN CQL3
  40. 40. List CREATE TABLE ruta( id uuid PRIMARY KEY , nombre text, ciudades list<text >); ISTHARI – INTRODUCCIÓN CQL3 Nombre e2a9b6e6-… Ciudades Ruta 1 [‘Madrid’, ‘Barcelona’]
  41. 41. List CREATE TABLE ruta( id uuid PRIMARY KEY , nombre text, ciudades list<text >); Nombre e2a9b6e6-… Ciudades Ruta 1 [‘Madrid’, ‘Barcelona’] Nombre e2a9b6e6-… ISTHARI – INTRODUCCIÓN CQL3 Ciudades:f7e5450 039..8d Ciudades:7e54501 39..8d Articulo Madrid Barcelona
  42. 42. List CREATE TABLE ruta( id uuid PRIMARY KEY , nombre text, ciudades list<text >); Nombre e2a9b6e6-… Ciudades Ruta 1 [‘Madrid’, ‘Barcelona’] Insert into ruta (id, nombre, ciudades) Values (e2a9b6e6-…, ‘Ruta 1’, [‘Madrid’, ‘Barcelona’]); ISTHARI – INTRODUCCIÓN CQL3
  43. 43. List CREATE TABLE ruta( id uuid PRIMARY KEY , nombre text, ciudades list<text >); Nombre e2a9b6e6-… Ciudades Ruta 1 [‘Madrid’, ‘Barcelona’] Insert into ruta (id, nombre, ciudades) Values (e2a9b6e6-…, ‘Ruta 1’, [‘Madrid’, ‘Barcelona’]); Update ruta set ciudades = ciudades + [‘Paris’] where id =e2a9b6e6-…; Update ruta set ciudades = [‘Paris’] + ciudades where id=e2a9b6e6-…; Update ruta set ciudades[1]=[‘Roma’] where id=e2a9b6e6-…; ISTHARI – INTRODUCCIÓN CQL3
  44. 44. Map CREATE TABLE producto( id uuid PRIMARY KEY , nombre text, caracteristicas map<string, string >); ISTHARI – INTRODUCCIÓN CQL3 Nombre e2a9b6e6-… Caracteristicas Mesa {‘alto’:’100cm’, ‘ancho’:’20cm’, ‘fondo’:’50cm’}
  45. 45. Map CREATE TABLE producto( id uuid PRIMARY KEY , nombre text, Nombre e2a9b6e6-… caracteristicas Caracteristicas Mesa {‘alto’:’100cm’, ‘ancho’:’20cm’, ‘fondo’:’50cm’} map<string, string >); Nombre e2a9b6e6-… ISTHARI – INTRODUCCIÓN CQL3 Caracteristicas :alto Caracteristicas :ancho Caracteristicas: fondo Mesa 100cm 20cm 50cm
  46. 46. Map CREATE TABLE producto( id uuid PRIMARY KEY , nombre text, caracteristicas Nombre e2a9b6e6-… Caracteristicas Mesa {‘alto’:’100cm’, ‘ancho’:’20cm’, ‘fondo’:’50cm’} map<string, string >); Insert into producto (id, nombre, caracteristicas) Values (e2a9b6e6-…, ‘Mesa’, {‘alto’:’100cm’, ‘ancho’:’20cm’, …}); Update product set caracteristicas[‘alto’]=‘120cm’ where id=e2a9b6e6-… ISTHARI – INTRODUCCIÓN CQL3
  47. 47. Preguntas y sugerencias Gracias por asistir ISTHARI – INTRODUCCIÓN CQL3

×