Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Gorm for cassandra

1,638 views

Published on

Apache Cassandra es una base de datos NoSQL altamente escalable. Con la llegada de Gorm 5, se ha abordado una 'as-complete-as-possible' implementación GORM que mapea las clases de dominio e instancias a tablas de Cassandra 2.0. Veremos brevemente qué es Cassandra y qué MAGIA nos proporciona esta capa Gorm para hacernos la vida más fácil.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Gorm for cassandra

  1. 1. GORM for Cassandra @rafbermudez
  2. 2. ¿Y tú? Soy un yonki de Groovy Cassandra, te quiero conocer ¿Cómo he llegado hasta aquí?
  3. 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. 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. 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. 6. CAP Theorem ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra ¿Aquí?
  7. 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. 8. Replication factor = 1 ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra
  9. 9. Replication factor = multi ❏ Apache Cassandra ■ Intro ■ Key-value vs Column ■ CAP ■ Partition Key ■ Replication Factor ■ Consistency Level ■ Virtual Nodes ■ Example ❏ Groovy + Cassandra
  10. 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. 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. 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. 13. ❏ Apache Cassandra ❏ Groovy + Cassandra ■ Posibilidades ■ Gorm 5 ■ Gorm 5 for Cassandra CASSANDRA Y GROOVY
  14. 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. 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. 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. 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. 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. 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!

×