SlideShare une entreprise Scribd logo
1  sur  65
pour
les (ch‟tis) Développeurs Java

                        Jérémy Sevellec
Merci à


• Nate McCall (@zznate)

• Sylvain Lebresne (@pcmanus)

• Jonathan Ellis (@spyced)
Qui est-ce?




        MB « Qui Est-ce? »
Qui est-ce?
<moi>
• Jérémy Sevellec

• Je travaille chez
Sarbacane Software
sur la problématique
NoSQL
 (entre autres choses…)
Qui est-ce?
• Je suis développeur (« What else? »)
Qui est-ce?
• Oui, j‟ai lu « Clean Code » et vous?
Qui est-ce?
• Twitter :




• http://unchticafe.fr


                                 </moi>
« Agenda »
• Cassandra
Les principaux concepts

• Hector
Comment l‟utiliser

• cassandra-unit
Une librairie indispensable ;-)
NoSQL
Au delà du buzz




         Toy Story
NoSQL
« Il ne peut en rester qu‟un? »

Non :
« The right tool for the right job »

Les solutions NoSQL sont
simplement des outils.

Ce n‟est donc pas la mort des
RDBMS.
                                       Highlander
NoSQL




             Les solutions NoSQL aussi!
Il ne faut pas en faire si vous n‟en n‟avez pas besoin
Définition




Cassandra, c‟est quoi?
Définition


Map cassandra = new HashMap();


(de toute façon dans la vie tout est hashmap)
 Ok, C‟est quand même plus que ça
Définition

Apache Cassandra™ est une Base de données :

• Distribuée
• Hautement performante
• Extrêmement scalable
• Tolérante aux pannes (i.e. “no single point of
  failure”)
• proposant un modèle plus riche que le simple
  modèle “key/value”
Les origines


 Dynamo                                 Big table


Modèle distribué                  Modèle de données et
                                  architecture de stockage
Quelques dates
• Développé initialement par Facebook pour la partie
  « inbox search »

• « Open sourcé » en 2008

• Devient un projet apache dans l‟incubator en 2009

• « Top level project » apache en 2010

• Release 1.0 en Octobre 2011 (aujourd‟hui en 1.0.5)
Architecture
• Tous les nœuds du cluster ont le même rôle
• Pas de spof (les clients peuvent se connecter à
  n‟importe quel nœud)
• Schéma optionnel
• Communication peer to peer (gossip protocol)
• Datacenter « aware »
• Eventuellement consistant
• Cache applicatif
Architecture




      vs   RDBMS
Architecture
vs RDBMS : ce qu‟on perd

• Pas de jointure (à faire coté client ou avec
Map/reduce)

• Pas de lock ni de transactions (à faire coté
  client, zookeeper, cage)

Ok et qu‟est ce qu‟il se passe quand on fait du
« sharding » sur un RDBMS? 
Architecture
vs RDBMS : ce qu‟on gagne

• Pas de SPOF (réellement)

• Schéma optionnel (avec possibilité de rajouter des
  metadata pour faciliter le requêtage)

• Scalabilité linéaire (pour être 2x plus performant :
  rajouter 2x plus de nœuds et sans coupure ;-))

• (Very) Big Data
Modèle de données




Et le modèle de données dans tout ça?
Modèle de données



Map<Key,Columns> cassandra =
     new HashMap<> ();
                         (« java 1.7 style »)

Ok, C‟est quand même plus que ça
« Columns »



     column
   name value ts

  ”fname” “jeremy”
« Rows »
    row

   « jsevellec »

”fname” “jeremy”

“lname” “sevellec”

“phone” 060809..

”age”    30
« Column Family »

                     ColumnFamily

   « jsevellec»          « cnorris »         « sjob»

”fname” “jeremy”     ”fname” “Chuck”    ”fname” “steve”

“lname” “sevellec”   “lname” “norris”   “lname” “job”

“phone” 060809..     “phone” 000000..   “phone” 060809..

”age”    21                             “picture” 0x1590..
                                                  .
« Column Family »

                (super) ColumnFamily

           « superKey1»                  « superKey2»


     « key2»              « key3 »          « key1»

10      “…”        5          “…”    1         “…”

11      “...”      10         “…”    123       “…”

17      “…”        18         “…”    1234      “…”
        ..
18      “…”                          12345     “…”
Modèle de données
• Les « columns » et « super columns » sont triés sur
  le nom de la colonne

• Ce tri est défini au niveau « column family »

• Les tris prédéfinis sont:
   – ByteType (default)
   – LongType
   – UTF8Type
   – LexicalUUIDType
   – TimeUUIDType
API




Qu‟est-ce que je peux faire avec?
API

    cassandra.put(key,value);
   value = cassandra.get(key);

Ok, C‟est quand même plus que ça
API
• Ecriture / mise à jour / suppression (en fait c‟est la
  même opération) sur une colonne, plusieurs
  colonnes, une ligne.
   – Toutes ces actions sont idempotentes! (sauf les
     compteurs)
• Lecture
   – Get : lire une seule colonne
   – get_slice : lire un ensemble de colonnes (par nom
     ou par intervalle)
   – get_range_slice : un slice sur un ensemble de
     lignes.
   – Query by value (secondary index)
API
• Manipulation sur le schema

• CQL execution (depuis la 0.8)
  – Aussi un moyen d‟effectuer des lectures
  – Langage de requêtage « SQL like » simplifié.
Partitionnement et Replication




                        irobot
Partionnement

• Le partionnement permet de répartir les lignes sur
  les nœuds du cluster (à partir de la clé)

• Plusieurs choix de partitionnement (au niveau
  cluster) :
   – RandomPartitioner : (par defaut)
   – ByteOrderedPartitioner : stocke les lignes dans
     l‟ordre des <rowkey> à travers les nœuds du
     cluster
Partionnement
• RandomPartioner
  – Un token est défini au niveau de chaque nœud
    un BigInteger entre 0 et 2**127

  – Chaque nœud est responsable des cles qui sont
    dans l‟intervalle qu‟il gère (intervalle entre le
    token du nœud précédent et le token du nœud).

  – Un hash (md5) de la clé est effectué et définit un
    token. La ligne est envoyé sur le nœud qui gère
    l‟intervalle concerné.
Partionnement
RandomPartitioner Exemple :
• 4 nœuds
• Token = de A à Z
                                     A   BCDEFGHIJKL
                              XYZA
md5(« jsevellec ») =D



                               W              L



                              UVW
                                          MNOPQRST
                                     T
Replication

• La réplication est gérée au niveau d‟un keyspace
  par le replication_factor

• Le replication_factor définit le nombre de copies
  globales sur le cluster d‟une ligne

• La façon dont sont placés les replicas dépend de la
  stratégie choisie
Replication
SimpleStrategy : les réplicas sont placés sur les
nœuds suivants dans le cluster

Exemple avec un RF = 3                     A    BCDEFGHIJKL
                                  XYZA
md5(« jsevellec ») =D



                                   W                   L
                                                           D
                              D


                              UVW
                                                    MNOPQRST
                                           T
                                          D
Replication
NetworkTopologyStrategy :
• la ligne est placée avec le « partitioner »
• les réplicas peuvent être placés dans un autre rack,
  un autre datacenter…

• Il faut définir la topology du cluster : snitch.
Consistance
Mais c‟est quoi cette histoire de consistance?
Consistance
• Le théorème CAP




• Tu ne peux en prendre que 2 et puis c‟est tout.
Consistance
• Cassandra a fait le choix :
  – Availability
  – Partition Tolerance

•    Et la consistance???
    - “Instead of designing (costly) measure to prevent
    inconsistency, we acknowledge that the cluster may
    be in an inconsistent state for a brief period of time,
    and we deal with it”
Consistance
• Cassandra permet au client de faire le choix entre
  consistance et latence (pour chaque opération).

• Le consistency_level est liée au replication_factor. Il
  définit le nombre de nœud devant se synchroniser avant
  de répondre à une opération.

• Les différents niveaux de consistance sont :
   – None
   – One
   – Quorum
   – All
Consistance
WRITE
                 Write(„Y‟)                Y

                                           A       BCDEFGHIJKL
Combien de nœuds doivent
répondre pour que ce soit un    XYZA
succès ?

- CL.NONE : aucun
                                 W                      L
- CL.ONE : 1                           ?                    Y
- CL.QUORUM : 1 de plus que
  la moitié des réplicas
- CL.ALL : tous les nœuds       UVW
  concernés par les réplicas.                       MNOPQRST
                                           T
                                               Y
Consistance
READ
                 READ(„Y‟)                 Y

                                           A       BCDEFGHIJKL
Combien de nœuds doivent
répondre pour que ce soit un    XYZA
succès ?

- CL.ONE : 1
                                 W                      L
- CL.QUORUM : 1 de plus que            ?                    Y
  la moitié des réplicas
- CL.ALL : tous les nœuds
  concernés par les réplicas.   UVW
                                                    MNOPQRST
                                           T
                                               Y
Consistance
Pour réparer de « l‟inconsistance » quand elle se
produit (perte d‟un nœud, …) :

• Hintend handoff : Quand un nœud n‟est pas
  disponible, les insertions sont envoyés à un autre
  nœud qui lui renverra quand le nœud redeviendra
  disponible.

• Read repair : En lecture, si les valeurs différents, les
  nœuds désynchronisés sont réparés en insérant les
  nouvelles valeurs (basé sur le timestamp)
Outillage
Outillage

• cassandra-cli : client ligne de commande de
  requêtage (meta_data, put et get).

• cqlsh : client cql de requêtage

• nodetool : opération d‟administration sur les nœuds
  du cluster
Outillage
• OPSCenter
Client




Et mon application dans tout ça?
Client
Cassandra n‟impose pas un client, il faut en choisir
un dans son langage




                                                 …
Client
Besoin d‟un client en Java?
Client
• Clients java :
  – Pelops
  – Kundera
  – Easy-Cassandra
  – Cassandrelle

et surtout il y a : Hector, le plus populaire
Hector
Hector
• http://hector-client.org

• Disponible sur le repository maven public

• Des projets exemples disponibles sur github

• Documentation « pas trop mal »
Hector
Connectivité :

• Pool de connexions
• Load balancing configurable (par défaut round
  robin)
• Découverte automatique des noeuds
• Réessai automatique sur les noeuds non
  disponibles
• Suspension des noeuds pour une courte période
  après plusieurs timeout
Hector
Api objet :

• Orienté objet
• Encapsulation complète de Thrift
• Approche typée pour traiter avec le modèle de
  données
• ORM (simple)
• HFactory = helper d‟instanciation d‟objet Hector
Hector




Du code, du code, du code!
Hector
• Intégration sans problème avec Spring
   – Injecter l‟objet « keyspace »

• Hector Object Mapper :
  – ORM simple
  – Propose une implémentation JPA
cassandra-unit
• Tu aimes :
   – Cassandra
   – Le TDD
   – L‟intégration continue

Dans ce cas, cassandra-unit est fait pour toi :
  - démarre un cassandra « embedded »
  - chargement de données à partir de dataset
(xml, json, yaml)
cassandra-unit




Du code, du code, du code!
Conseils


• Tout oublier ce que vous saviez sur les SGBDR
   – Dénormalisation, duplication, …

• Créer votre modèle en pensant aux requêtes que
  vous allez devoir faire

• Installation simple et efficace : apt-get install
  cassandra ou yum install cassandra
Conseils

• Bien choisir votre replication_factor (structurant)

• Bien choisir votre partitioner (très structurant)

• Être couvert par ses tests! (pour permettre de
  refactorer et faire évoluer votre modèle en phase de
  développements)
Conseils

• Il faut bien garder à l‟esprit les principaux concepts
  de cassandra quand vous développez votre
  application



• Être couvert par ses tests! (pour permettre de
  refactorer et faire évoluer votre modèle en phase de
  développements), je sais, je l‟ai déjà dit 
Liens utiles
• Cassandra :
   – http://cassandra.apache.org/
   – ML : user@cassandra.apache.org
     dev@cassandra.apache.org
   – irc.freenode.net #cassandra #cassandra-dev #cassandra-
     ops
   – http://www.datastax.com/ (société commerciale autour de
     cassandra)
• Hector
   – http://hector-client.org
   – Google groups : hector-users@googlegroups.com
• Casandra-Unit :
   – https://github.com/jsevellec/cassandra-unit
   – https://github.com/jsevellec/cassandra-unit-examples
Questions?




   Ceci est un cluster de dev cassandra

Contenu connexe

Tendances

EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
ebiznext
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesos
ebiznext
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
Paris_Storm_UG
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
PALO IT
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDB
MongoDB
 

Tendances (20)

REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesos
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
Pourquoi Terraform n'est pas le bon outil pour les déploiements automatisés d...
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.comStockage et analyse temps réel d'événements avec Riak chez Booking.com
Stockage et analyse temps réel d'événements avec Riak chez Booking.com
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
SQLSaturday Paris 2014 - SQL Server AlwaysOn et les groupes de disponibilités...
SQLSaturday Paris 2014 - SQL Server AlwaysOn et les groupes de disponibilités...SQLSaturday Paris 2014 - SQL Server AlwaysOn et les groupes de disponibilités...
SQLSaturday Paris 2014 - SQL Server AlwaysOn et les groupes de disponibilités...
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
Kafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User GroupKafka Connect & Kafka Streams - Paris Kafka User Group
Kafka Connect & Kafka Streams - Paris Kafka User Group
 
Mariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDCMariadb pour les developpeurs - OSDC
Mariadb pour les developpeurs - OSDC
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDB
 

En vedette

Using Cassandra with your Web Application
Using Cassandra with your Web ApplicationUsing Cassandra with your Web Application
Using Cassandra with your Web Application
supertom
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server Faces
Alphorm
 
L’Histoire Des Nombres
L’Histoire Des NombresL’Histoire Des Nombres
L’Histoire Des Nombres
M2i Formation
 
Kazantip
KazantipKazantip
Kazantip
Antho74
 

En vedette (19)

Cassandra techniques de modelisation avancee
Cassandra techniques de modelisation avanceeCassandra techniques de modelisation avancee
Cassandra techniques de modelisation avancee
 
Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?Quelles stratégies de Recherche avec Cassandra ?
Quelles stratégies de Recherche avec Cassandra ?
 
Introduction à Cassandra - campus plex
Introduction à Cassandra - campus plexIntroduction à Cassandra - campus plex
Introduction à Cassandra - campus plex
 
Moteurs de recommendation avec Neo4j et GraphAwareReco
Moteurs de recommendation avec Neo4j et GraphAwareRecoMoteurs de recommendation avec Neo4j et GraphAwareReco
Moteurs de recommendation avec Neo4j et GraphAwareReco
 
Cassandra Metrics
Cassandra MetricsCassandra Metrics
Cassandra Metrics
 
Using Cassandra with your Web Application
Using Cassandra with your Web ApplicationUsing Cassandra with your Web Application
Using Cassandra with your Web Application
 
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
Apache Cassandra and DataStax Enterprise Explained with Peter Halliday at Wil...
 
Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0Cassandra 2.2 & 3.0
Cassandra 2.2 & 3.0
 
Cassandra 3 new features 2016
Cassandra 3 new features 2016Cassandra 3 new features 2016
Cassandra 3 new features 2016
 
HTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilitéHTML5, Spring, NoSQL et mobilité
HTML5, Spring, NoSQL et mobilité
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec Cassandra
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server Faces
 
Recommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation EngineRecommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation Engine
 
Voyage en économie responsable
Voyage en économie responsableVoyage en économie responsable
Voyage en économie responsable
 
L’Histoire Des Nombres
L’Histoire Des NombresL’Histoire Des Nombres
L’Histoire Des Nombres
 
Création
CréationCréation
Création
 
6405 Verändertes Sternenbild ....
6405   Verändertes Sternenbild ....6405   Verändertes Sternenbild ....
6405 Verändertes Sternenbild ....
 
Kazantip
KazantipKazantip
Kazantip
 

Similaire à Cassandra pour les développeurs java

Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
ENSET, Université Hassan II Casablanca
 
TP_Réseaux_de_neurones_Safae_ElOmari.pdf
TP_Réseaux_de_neurones_Safae_ElOmari.pdfTP_Réseaux_de_neurones_Safae_ElOmari.pdf
TP_Réseaux_de_neurones_Safae_ElOmari.pdf
SafaeElOmari
 

Similaire à Cassandra pour les développeurs java (20)

Se noyer dans les yeux de Cassandre
Se noyer dans les yeux de CassandreSe noyer dans les yeux de Cassandre
Se noyer dans les yeux de Cassandre
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Diagnostic performances
Diagnostic performancesDiagnostic performances
Diagnostic performances
 
Guillaume Chevalier - Deep learning avec tensor flow
Guillaume Chevalier - Deep learning avec tensor flowGuillaume Chevalier - Deep learning avec tensor flow
Guillaume Chevalier - Deep learning avec tensor flow
 
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETICNoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
NoSQL: Quoi, quand et pour qui par Orlando Cassano du CETIC
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
Les réseaux de neurones
Les réseaux de neuronesLes réseaux de neurones
Les réseaux de neurones
 
Introduction NoSql 201406 - lbroudoux
Introduction NoSql 201406 - lbroudouxIntroduction NoSql 201406 - lbroudoux
Introduction NoSql 201406 - lbroudoux
 
NoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler SofteamNoSQL panorama - Jean Seiler Softeam
NoSQL panorama - Jean Seiler Softeam
 
Les bibliothèques de calcul scientifiques
Les bibliothèques de calcul scientifiquesLes bibliothèques de calcul scientifiques
Les bibliothèques de calcul scientifiques
 
Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1 Mise en oeuvre des framework de machines et deep learning v1
Mise en oeuvre des framework de machines et deep learning v1
 
Codes Convolutifs
Codes ConvolutifsCodes Convolutifs
Codes Convolutifs
 
Les bases de donnees nosql
Les bases de donnees nosqlLes bases de donnees nosql
Les bases de donnees nosql
 
Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)Modern DevOps - kill the bottleneck (part 2/2)
Modern DevOps - kill the bottleneck (part 2/2)
 
Présentation LMAX / Disruptor
Présentation LMAX / DisruptorPrésentation LMAX / Disruptor
Présentation LMAX / Disruptor
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
TP_Réseaux_de_neurones_Safae_ElOmari.pdf
TP_Réseaux_de_neurones_Safae_ElOmari.pdfTP_Réseaux_de_neurones_Safae_ElOmari.pdf
TP_Réseaux_de_neurones_Safae_ElOmari.pdf
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
haking wep
haking wep haking wep
haking wep
 

Cassandra pour les développeurs java

  • 1. pour les (ch‟tis) Développeurs Java Jérémy Sevellec
  • 2. Merci à • Nate McCall (@zznate) • Sylvain Lebresne (@pcmanus) • Jonathan Ellis (@spyced)
  • 3. Qui est-ce? MB « Qui Est-ce? »
  • 4. Qui est-ce? <moi> • Jérémy Sevellec • Je travaille chez Sarbacane Software sur la problématique NoSQL (entre autres choses…)
  • 5. Qui est-ce? • Je suis développeur (« What else? »)
  • 6. Qui est-ce? • Oui, j‟ai lu « Clean Code » et vous?
  • 7. Qui est-ce? • Twitter : • http://unchticafe.fr </moi>
  • 8. « Agenda » • Cassandra Les principaux concepts • Hector Comment l‟utiliser • cassandra-unit Une librairie indispensable ;-)
  • 9. NoSQL Au delà du buzz Toy Story
  • 10. NoSQL « Il ne peut en rester qu‟un? » Non : « The right tool for the right job » Les solutions NoSQL sont simplement des outils. Ce n‟est donc pas la mort des RDBMS. Highlander
  • 11. NoSQL Les solutions NoSQL aussi! Il ne faut pas en faire si vous n‟en n‟avez pas besoin
  • 13. Définition Map cassandra = new HashMap(); (de toute façon dans la vie tout est hashmap) Ok, C‟est quand même plus que ça
  • 14. Définition Apache Cassandra™ est une Base de données : • Distribuée • Hautement performante • Extrêmement scalable • Tolérante aux pannes (i.e. “no single point of failure”) • proposant un modèle plus riche que le simple modèle “key/value”
  • 15. Les origines Dynamo Big table Modèle distribué Modèle de données et architecture de stockage
  • 16. Quelques dates • Développé initialement par Facebook pour la partie « inbox search » • « Open sourcé » en 2008 • Devient un projet apache dans l‟incubator en 2009 • « Top level project » apache en 2010 • Release 1.0 en Octobre 2011 (aujourd‟hui en 1.0.5)
  • 17. Architecture • Tous les nœuds du cluster ont le même rôle • Pas de spof (les clients peuvent se connecter à n‟importe quel nœud) • Schéma optionnel • Communication peer to peer (gossip protocol) • Datacenter « aware » • Eventuellement consistant • Cache applicatif
  • 18. Architecture vs RDBMS
  • 19. Architecture vs RDBMS : ce qu‟on perd • Pas de jointure (à faire coté client ou avec Map/reduce) • Pas de lock ni de transactions (à faire coté client, zookeeper, cage) Ok et qu‟est ce qu‟il se passe quand on fait du « sharding » sur un RDBMS? 
  • 20. Architecture vs RDBMS : ce qu‟on gagne • Pas de SPOF (réellement) • Schéma optionnel (avec possibilité de rajouter des metadata pour faciliter le requêtage) • Scalabilité linéaire (pour être 2x plus performant : rajouter 2x plus de nœuds et sans coupure ;-)) • (Very) Big Data
  • 21. Modèle de données Et le modèle de données dans tout ça?
  • 22. Modèle de données Map<Key,Columns> cassandra = new HashMap<> (); (« java 1.7 style ») Ok, C‟est quand même plus que ça
  • 23. « Columns » column name value ts ”fname” “jeremy”
  • 24. « Rows » row « jsevellec » ”fname” “jeremy” “lname” “sevellec” “phone” 060809.. ”age” 30
  • 25. « Column Family » ColumnFamily « jsevellec» « cnorris » « sjob» ”fname” “jeremy” ”fname” “Chuck” ”fname” “steve” “lname” “sevellec” “lname” “norris” “lname” “job” “phone” 060809.. “phone” 000000.. “phone” 060809.. ”age” 21 “picture” 0x1590.. .
  • 26. « Column Family » (super) ColumnFamily « superKey1» « superKey2» « key2» « key3 » « key1» 10 “…” 5 “…” 1 “…” 11 “...” 10 “…” 123 “…” 17 “…” 18 “…” 1234 “…” .. 18 “…” 12345 “…”
  • 27. Modèle de données • Les « columns » et « super columns » sont triés sur le nom de la colonne • Ce tri est défini au niveau « column family » • Les tris prédéfinis sont: – ByteType (default) – LongType – UTF8Type – LexicalUUIDType – TimeUUIDType
  • 28. API Qu‟est-ce que je peux faire avec?
  • 29. API cassandra.put(key,value); value = cassandra.get(key); Ok, C‟est quand même plus que ça
  • 30. API • Ecriture / mise à jour / suppression (en fait c‟est la même opération) sur une colonne, plusieurs colonnes, une ligne. – Toutes ces actions sont idempotentes! (sauf les compteurs) • Lecture – Get : lire une seule colonne – get_slice : lire un ensemble de colonnes (par nom ou par intervalle) – get_range_slice : un slice sur un ensemble de lignes. – Query by value (secondary index)
  • 31. API • Manipulation sur le schema • CQL execution (depuis la 0.8) – Aussi un moyen d‟effectuer des lectures – Langage de requêtage « SQL like » simplifié.
  • 33. Partionnement • Le partionnement permet de répartir les lignes sur les nœuds du cluster (à partir de la clé) • Plusieurs choix de partitionnement (au niveau cluster) : – RandomPartitioner : (par defaut) – ByteOrderedPartitioner : stocke les lignes dans l‟ordre des <rowkey> à travers les nœuds du cluster
  • 34. Partionnement • RandomPartioner – Un token est défini au niveau de chaque nœud un BigInteger entre 0 et 2**127 – Chaque nœud est responsable des cles qui sont dans l‟intervalle qu‟il gère (intervalle entre le token du nœud précédent et le token du nœud). – Un hash (md5) de la clé est effectué et définit un token. La ligne est envoyé sur le nœud qui gère l‟intervalle concerné.
  • 35. Partionnement RandomPartitioner Exemple : • 4 nœuds • Token = de A à Z A BCDEFGHIJKL XYZA md5(« jsevellec ») =D W L UVW MNOPQRST T
  • 36. Replication • La réplication est gérée au niveau d‟un keyspace par le replication_factor • Le replication_factor définit le nombre de copies globales sur le cluster d‟une ligne • La façon dont sont placés les replicas dépend de la stratégie choisie
  • 37. Replication SimpleStrategy : les réplicas sont placés sur les nœuds suivants dans le cluster Exemple avec un RF = 3 A BCDEFGHIJKL XYZA md5(« jsevellec ») =D W L D D UVW MNOPQRST T D
  • 38. Replication NetworkTopologyStrategy : • la ligne est placée avec le « partitioner » • les réplicas peuvent être placés dans un autre rack, un autre datacenter… • Il faut définir la topology du cluster : snitch.
  • 39. Consistance Mais c‟est quoi cette histoire de consistance?
  • 40. Consistance • Le théorème CAP • Tu ne peux en prendre que 2 et puis c‟est tout.
  • 41. Consistance • Cassandra a fait le choix : – Availability – Partition Tolerance • Et la consistance??? - “Instead of designing (costly) measure to prevent inconsistency, we acknowledge that the cluster may be in an inconsistent state for a brief period of time, and we deal with it”
  • 42. Consistance • Cassandra permet au client de faire le choix entre consistance et latence (pour chaque opération). • Le consistency_level est liée au replication_factor. Il définit le nombre de nœud devant se synchroniser avant de répondre à une opération. • Les différents niveaux de consistance sont : – None – One – Quorum – All
  • 43. Consistance WRITE Write(„Y‟) Y A BCDEFGHIJKL Combien de nœuds doivent répondre pour que ce soit un XYZA succès ? - CL.NONE : aucun W L - CL.ONE : 1 ? Y - CL.QUORUM : 1 de plus que la moitié des réplicas - CL.ALL : tous les nœuds UVW concernés par les réplicas. MNOPQRST T Y
  • 44. Consistance READ READ(„Y‟) Y A BCDEFGHIJKL Combien de nœuds doivent répondre pour que ce soit un XYZA succès ? - CL.ONE : 1 W L - CL.QUORUM : 1 de plus que ? Y la moitié des réplicas - CL.ALL : tous les nœuds concernés par les réplicas. UVW MNOPQRST T Y
  • 45. Consistance Pour réparer de « l‟inconsistance » quand elle se produit (perte d‟un nœud, …) : • Hintend handoff : Quand un nœud n‟est pas disponible, les insertions sont envoyés à un autre nœud qui lui renverra quand le nœud redeviendra disponible. • Read repair : En lecture, si les valeurs différents, les nœuds désynchronisés sont réparés en insérant les nouvelles valeurs (basé sur le timestamp)
  • 47. Outillage • cassandra-cli : client ligne de commande de requêtage (meta_data, put et get). • cqlsh : client cql de requêtage • nodetool : opération d‟administration sur les nœuds du cluster
  • 49. Client Et mon application dans tout ça?
  • 50. Client Cassandra n‟impose pas un client, il faut en choisir un dans son langage …
  • 52. Client • Clients java : – Pelops – Kundera – Easy-Cassandra – Cassandrelle et surtout il y a : Hector, le plus populaire
  • 54. Hector • http://hector-client.org • Disponible sur le repository maven public • Des projets exemples disponibles sur github • Documentation « pas trop mal »
  • 55. Hector Connectivité : • Pool de connexions • Load balancing configurable (par défaut round robin) • Découverte automatique des noeuds • Réessai automatique sur les noeuds non disponibles • Suspension des noeuds pour une courte période après plusieurs timeout
  • 56. Hector Api objet : • Orienté objet • Encapsulation complète de Thrift • Approche typée pour traiter avec le modèle de données • ORM (simple) • HFactory = helper d‟instanciation d‟objet Hector
  • 57. Hector Du code, du code, du code!
  • 58. Hector • Intégration sans problème avec Spring – Injecter l‟objet « keyspace » • Hector Object Mapper : – ORM simple – Propose une implémentation JPA
  • 59. cassandra-unit • Tu aimes : – Cassandra – Le TDD – L‟intégration continue Dans ce cas, cassandra-unit est fait pour toi : - démarre un cassandra « embedded » - chargement de données à partir de dataset (xml, json, yaml)
  • 60. cassandra-unit Du code, du code, du code!
  • 61. Conseils • Tout oublier ce que vous saviez sur les SGBDR – Dénormalisation, duplication, … • Créer votre modèle en pensant aux requêtes que vous allez devoir faire • Installation simple et efficace : apt-get install cassandra ou yum install cassandra
  • 62. Conseils • Bien choisir votre replication_factor (structurant) • Bien choisir votre partitioner (très structurant) • Être couvert par ses tests! (pour permettre de refactorer et faire évoluer votre modèle en phase de développements)
  • 63. Conseils • Il faut bien garder à l‟esprit les principaux concepts de cassandra quand vous développez votre application • Être couvert par ses tests! (pour permettre de refactorer et faire évoluer votre modèle en phase de développements), je sais, je l‟ai déjà dit 
  • 64. Liens utiles • Cassandra : – http://cassandra.apache.org/ – ML : user@cassandra.apache.org dev@cassandra.apache.org – irc.freenode.net #cassandra #cassandra-dev #cassandra- ops – http://www.datastax.com/ (société commerciale autour de cassandra) • Hector – http://hector-client.org – Google groups : hector-users@googlegroups.com • Casandra-Unit : – https://github.com/jsevellec/cassandra-unit – https://github.com/jsevellec/cassandra-unit-examples
  • 65. Questions? Ceci est un cluster de dev cassandra