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!

Gorm for cassandra

  • 1.
  • 2.
    ¿Y tú? Soy unyonki 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 orcolumn 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 ❏ ApacheCassandra ■ 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 ❏ ApacheCassandra ■ 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áscomplejo...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! ❏ ApacheCassandra ■ 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 CassandraJava 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 forHibernate ○ 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 { StringfirstName 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 yAllowFiltering ● 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!