SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
GORM
for
Cassandra
@rafbermudez
¿Y tú?
Soy un yonki de Groovy
Cassandra, te quiero conocer
¿Cómo he llegado hasta aquí?
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
APACHE CASSANDRA
EN
8
PASOS
Intro
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
● Sistema NoSQL, distribuído y open source
● Objetivo: Big Data
○ Escalabilidad y Disponibilidad
● Topología en Anillo
○ Masterless
○ Clustering Column
● INSERT Y DELETE
○ INSERT = UPDATE (casi)
● CQL (Cassandra Query Language)
Row oriented or column oriented?
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
● rows oriented
○ Row id, Columnas diferentes
apple -> colour weight price variety
"red" 100 40 "Cox"
orange -> colour weight price origin
"orange" 120 50 "Spain"
● column oriented
○ Column id, 1 fila y millones de columnas
temperature -> 2012-09-01 2012-09-02 2012-09-03 ...
40 41 39 ...
● CASSANDRA = rows contain columns!!
○ Idénticas columnas
○ Acceso fila + columna
CAP Theorem
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
¿Aquí?
● PRIMARY KEY
○ Clave primaria
○ Simple o compuesta
● PARTITION KEY
○ Distribuye los datos por los nodos
○ primary key simple = partition key
○ primary key compuesta = 1er atributo es la partition key
● CLUSTERING COLUMN
○ Define cómo se ordenan los datos en el nodo
○ son los siguientes atributos de una primary key compuesta
Distribución de los datos en el anillo
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
Replication factor = 1
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
Replication factor = multi
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
Consistency Level
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
● N = Determina el número n de réplicas que tienen
que validar una lectura
○ N = QUORUM = mayoría simple
Un poquito más complejo...y eficaz
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
● Realmente usa virtual nodes
¡No muerde!
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
● CREATE TABLE
CREATE TABLE users (
user_name varchar PRIMARY KEY,
password varchar,
gender varchar,
birth_year bigint
);
● SELECT
SELECT * FROM users
WHERE gender = 'male' LIMIT 50000;
● UPDATE
UPDATE users SET password = '123456' WHERE user_name = 'rafbermudez'
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
CASSANDRA Y GROOVY
● Astyanax Cassandra Java Client (Netflix)
● Datastax Cassandra Java driver
● GORM 5 for Cassandra
○ Basado en últimos drivers de Datastax
○ Soporte para:
■ Grails 2, Grails 3, SpringBoot
■ dynamic finders, criteria and named queries
■ Cassandra schema creation
■ Marshalling from Cassandra to Groovy/Java types and back again
■ ...
Posibilidades
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
● GORM for Hibernate
○ Soporta Hibernate 3,4 y 5
○ Reescrito basándose en Traits
● GORM for Neo4j
○ Neo4j 2.3.x
○ Mapea “trivialmente” modelos de dominio a grafos
● MongoDB
○ Reescrito basándose en MongoDB 3.x driver
○ Mejora en la conversión: documento <-> objeto
● GORM 5 for Cassandra
GORM 5
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
● Domain Class
○ Crea un UUID autoincremental internamente
class Person {
String firstName
String lastName
}
new Person(firstName: "Fred", lastName: "Flintstone").save()
● Cassandra e Hibernate
class Person {
UUID id
String firstName
String lastName
static mapping = {
id generator:’uuid2’
}
}
static mapWith = "cassandra"
Clases de dominio
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
class Person {
String firstName
String lastName
}
● Caso 1: 72% de Juanes en España
def people = Person.findAllByFirstName("Juan")
def people = Person.findAllByFirstName("Juan", [allowFiltering:true])
def people = Person.findAllByFirstName("Juan", [allowFiltering:true, fetchSize: 200])
● Caso 2: Muy pocos Wallys
def wallys = Person.
findAllByFirstNameAndAgeLessThanEquals('Wally', [allowFiltering:true])
def wallys = Person.
findAllByFirstNameAndAgeLessThanEquals('Wally', [allowFiltering:true, max:5])
Crea un índice
Consultas
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
● FetchSize y AllowFiltering
● No existe offset
● También provee una low-level API
def cassandraTemplate
String personCQL = "SELECT firstName FROM person"
List personList = cassandraTemplate.select(personCQL, Person.class)
Consultas
❏ Apache Cassandra
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
❏ Apache Cassandra
■ Intro
■ Key-value vs Column
■ CAP
■ Partition Key
■ Replication Factor
■ Consistency Level
■ Virtual Nodes
■ Example
❏ Groovy + Cassandra
■ Posibilidades
■ Gorm 5
■ Gorm 5 for Cassandra
Finished! Thank you!

Contenu connexe

En vedette

Monitor LED AOC - e970Swn
Monitor LED AOC - e970SwnMonitor LED AOC - e970Swn
Monitor LED AOC - e970SwnAOC vision
 
Bài thực hành số 1
Bài thực hành số 1Bài thực hành số 1
Bài thực hành số 1Lã Văn Hải
 
Search Engine Optimization @ Bergh's School of Communication
Search Engine Optimization @ Bergh's School of CommunicationSearch Engine Optimization @ Bergh's School of Communication
Search Engine Optimization @ Bergh's School of CommunicationSebastian Marmolin
 
Economic Opportunities and Challenges in Rakhine State
Economic Opportunities and Challenges in Rakhine StateEconomic Opportunities and Challenges in Rakhine State
Economic Opportunities and Challenges in Rakhine StateEthical Sector
 
Testen binnen dev ops DTC 2014
Testen binnen dev ops DTC 2014Testen binnen dev ops DTC 2014
Testen binnen dev ops DTC 2014Kaspar van Dam
 
Medina m. storyboard w sound
Medina m. storyboard w soundMedina m. storyboard w sound
Medina m. storyboard w soundMarissa Medina
 
[PLCUG] Hyper converged - Atlantis USX (PL)
[PLCUG] Hyper converged - Atlantis USX (PL)[PLCUG] Hyper converged - Atlantis USX (PL)
[PLCUG] Hyper converged - Atlantis USX (PL)Jaroslaw Sobel
 
Social Media Assessment for Higher Ed Professionals
Social Media Assessment for Higher Ed ProfessionalsSocial Media Assessment for Higher Ed Professionals
Social Media Assessment for Higher Ed ProfessionalsJennifer Keegin
 
Pietro Ichino sulla riforma costituzionale
Pietro Ichino sulla riforma costituzionalePietro Ichino sulla riforma costituzionale
Pietro Ichino sulla riforma costituzionaleAntonino Leone
 

En vedette (15)

Monitor LED AOC - e970Swn
Monitor LED AOC - e970SwnMonitor LED AOC - e970Swn
Monitor LED AOC - e970Swn
 
Slide
SlideSlide
Slide
 
Bài thực hành số 1
Bài thực hành số 1Bài thực hành số 1
Bài thực hành số 1
 
Music video ideas!
Music video ideas!Music video ideas!
Music video ideas!
 
Search Engine Optimization @ Bergh's School of Communication
Search Engine Optimization @ Bergh's School of CommunicationSearch Engine Optimization @ Bergh's School of Communication
Search Engine Optimization @ Bergh's School of Communication
 
Economic Opportunities and Challenges in Rakhine State
Economic Opportunities and Challenges in Rakhine StateEconomic Opportunities and Challenges in Rakhine State
Economic Opportunities and Challenges in Rakhine State
 
Skaters kk
Skaters kkSkaters kk
Skaters kk
 
500 033 prezentaciq android
500 033 prezentaciq android500 033 prezentaciq android
500 033 prezentaciq android
 
Digipak
DigipakDigipak
Digipak
 
Testen binnen dev ops DTC 2014
Testen binnen dev ops DTC 2014Testen binnen dev ops DTC 2014
Testen binnen dev ops DTC 2014
 
Medina m. storyboard w sound
Medina m. storyboard w soundMedina m. storyboard w sound
Medina m. storyboard w sound
 
[PLCUG] Hyper converged - Atlantis USX (PL)
[PLCUG] Hyper converged - Atlantis USX (PL)[PLCUG] Hyper converged - Atlantis USX (PL)
[PLCUG] Hyper converged - Atlantis USX (PL)
 
Social Media Assessment for Higher Ed Professionals
Social Media Assessment for Higher Ed ProfessionalsSocial Media Assessment for Higher Ed Professionals
Social Media Assessment for Higher Ed Professionals
 
Mobile marketing
Mobile marketingMobile marketing
Mobile marketing
 
Pietro Ichino sulla riforma costituzionale
Pietro Ichino sulla riforma costituzionalePietro Ichino sulla riforma costituzionale
Pietro Ichino sulla riforma costituzionale
 

Similaire à Gorm for cassandra

José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
 
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
 

Similaire à Gorm for cassandra (6)

José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
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
 
Codemotion 2014 Scala @real life
Codemotion 2014 Scala @real lifeCodemotion 2014 Scala @real life
Codemotion 2014 Scala @real life
 
Scala @ Real Life Codemotion 2014
Scala @ Real Life Codemotion 2014Scala @ Real Life Codemotion 2014
Scala @ Real Life Codemotion 2014
 
Intro cassandra
Intro cassandraIntro cassandra
Intro cassandra
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 

Plus de Rafael Bermúdez Míguez

Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Rafael Bermúdez Míguez
 
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)Rafael Bermúdez Míguez
 
Desafío total: cómo resolver retos extremos
Desafío total:  cómo resolver retos extremosDesafío total:  cómo resolver retos extremos
Desafío total: cómo resolver retos extremosRafael Bermúdez Míguez
 
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Construyendo tu propia bola de cristal  predicción de precios con machine lea...Construyendo tu propia bola de cristal  predicción de precios con machine lea...
Construyendo tu propia bola de cristal predicción de precios con machine lea...Rafael Bermúdez Míguez
 
Cross management experiences. mis 7 conclusiones
Cross management experiences.  mis 7 conclusionesCross management experiences.  mis 7 conclusiones
Cross management experiences. mis 7 conclusionesRafael Bermúdez Míguez
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresRafael Bermúdez Míguez
 
Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Rafael Bermúdez Míguez
 
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...Rafael Bermúdez Míguez
 

Plus de Rafael Bermúdez Míguez (9)

Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)
 
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
 
Desafío total: cómo resolver retos extremos
Desafío total:  cómo resolver retos extremosDesafío total:  cómo resolver retos extremos
Desafío total: cómo resolver retos extremos
 
Construyendo tu propia bola de cristal predicción de precios con machine lea...
Construyendo tu propia bola de cristal  predicción de precios con machine lea...Construyendo tu propia bola de cristal  predicción de precios con machine lea...
Construyendo tu propia bola de cristal predicción de precios con machine lea...
 
Cross management experiences. mis 7 conclusiones
Cross management experiences.  mis 7 conclusionesCross management experiences.  mis 7 conclusiones
Cross management experiences. mis 7 conclusiones
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadores
 
Acercádonos a dart
Acercádonos a dartAcercádonos a dart
Acercádonos a dart
 
Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)Crea tu propio motor de videojuegos con backbone y canvas (html5)
Crea tu propio motor de videojuegos con backbone y canvas (html5)
 
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...Xii betabeers galicia   todo lo que me hubiera gustado saber cuando abrace el...
Xii betabeers galicia todo lo que me hubiera gustado saber cuando abrace el...
 

Dernier

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 

Dernier (11)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Gorm for cassandra

  • 2. ¿Y tú? Soy un yonki de Groovy Cassandra, te quiero conocer ¿Cómo he llegado hasta aquí?
  • 3. ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra APACHE CASSANDRA EN 8 PASOS
  • 4. Intro ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ● Sistema NoSQL, distribuído y open source ● Objetivo: Big Data ○ Escalabilidad y Disponibilidad ● Topología en Anillo ○ Masterless ○ Clustering Column ● INSERT Y DELETE ○ INSERT = UPDATE (casi) ● CQL (Cassandra Query Language)
  • 5. Row oriented or column oriented? ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ● rows oriented ○ Row id, Columnas diferentes apple -> colour weight price variety "red" 100 40 "Cox" orange -> colour weight price origin "orange" 120 50 "Spain" ● column oriented ○ Column id, 1 fila y millones de columnas temperature -> 2012-09-01 2012-09-02 2012-09-03 ... 40 41 39 ... ● CASSANDRA = rows contain columns!! ○ Idénticas columnas ○ Acceso fila + columna
  • 6. CAP Theorem ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ¿Aquí?
  • 7. ● PRIMARY KEY ○ Clave primaria ○ Simple o compuesta ● PARTITION KEY ○ Distribuye los datos por los nodos ○ primary key simple = partition key ○ primary key compuesta = 1er atributo es la partition key ● CLUSTERING COLUMN ○ Define cómo se ordenan los datos en el nodo ○ son los siguientes atributos de una primary key compuesta Distribución de los datos en el anillo ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra
  • 8. Replication factor = 1 ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra
  • 9. Replication factor = multi ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra
  • 10. Consistency Level ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ● N = Determina el número n de réplicas que tienen que validar una lectura ○ N = QUORUM = mayoría simple
  • 11. Un poquito más complejo...y eficaz ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ● Realmente usa virtual nodes
  • 12. ¡No muerde! ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ● CREATE TABLE CREATE TABLE users ( user_name varchar PRIMARY KEY, password varchar, gender varchar, birth_year bigint ); ● SELECT SELECT * FROM users WHERE gender = 'male' LIMIT 50000; ● UPDATE UPDATE users SET password = '123456' WHERE user_name = 'rafbermudez'
  • 13. ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra CASSANDRA Y GROOVY
  • 14. ● Astyanax Cassandra Java Client (Netflix) ● Datastax Cassandra Java driver ● GORM 5 for Cassandra ○ Basado en últimos drivers de Datastax ○ Soporte para: ■ Grails 2, Grails 3, SpringBoot ■ dynamic finders, criteria and named queries ■ Cassandra schema creation ■ Marshalling from Cassandra to Groovy/Java types and back again ■ ... Posibilidades ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra
  • 15. ● GORM for Hibernate ○ Soporta Hibernate 3,4 y 5 ○ Reescrito basándose en Traits ● GORM for Neo4j ○ Neo4j 2.3.x ○ Mapea “trivialmente” modelos de dominio a grafos ● MongoDB ○ Reescrito basándose en MongoDB 3.x driver ○ Mejora en la conversión: documento <-> objeto ● GORM 5 for Cassandra GORM 5 ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra
  • 16. ● Domain Class ○ Crea un UUID autoincremental internamente class Person { String firstName String lastName } new Person(firstName: "Fred", lastName: "Flintstone").save() ● Cassandra e Hibernate class Person { UUID id String firstName String lastName static mapping = { id generator:’uuid2’ } } static mapWith = "cassandra" Clases de dominio ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra
  • 17. class Person { String firstName String lastName } ● Caso 1: 72% de Juanes en España def people = Person.findAllByFirstName("Juan") def people = Person.findAllByFirstName("Juan", [allowFiltering:true]) def people = Person.findAllByFirstName("Juan", [allowFiltering:true, fetchSize: 200]) ● Caso 2: Muy pocos Wallys def wallys = Person. findAllByFirstNameAndAgeLessThanEquals('Wally', [allowFiltering:true]) def wallys = Person. findAllByFirstNameAndAgeLessThanEquals('Wally', [allowFiltering:true, max:5]) Crea un índice Consultas ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra
  • 18. ● FetchSize y AllowFiltering ● No existe offset ● También provee una low-level API def cassandraTemplate String personCQL = "SELECT firstName FROM person" List personList = cassandraTemplate.select(personCQL, Person.class) Consultas ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra
  • 19. ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra Finished! Thank you!