SlideShare a Scribd company logo
1 of 73
Download to read offline
Introduction à
                        Cassandra

                        CampusPlex - Ajaccio
                             6 janvier 2012




   Nicolas Romanetti



vendredi 6 janvier 12
A propos



                        ๏ Nicolas Romanetti
                        ๏ Co-fondateur JAXIO / Architecte / Développeur
                        ๏ Utilisation de Cassandra lors du Challenge USI 2011




vendredi 6 janvier 12
Mon objectif




                        ๏ Vous faire passer de «c’est quoi ce truc!» à «je pige!»
                        ๏ Vous donner envie d’approfondir le sujet




vendredi 6 janvier 12
Cassandra



                        ๏ Base de données distribuée conçue pour
                          ‣ gérer une grande quantité de données
                          ‣ résister aux pannes
                          ‣ être performante




vendredi 6 janvier 12
Historique



                        ๏ Créée par Facebook (Inbox search)
                        ๏ Open Source en 2008
                        ๏ Top Level Apache Project en 2010
                        ๏ Abandonné par Facebook en 2010
                        ๏ Utilisée par Netflix, Twitter, etc...



vendredi 6 janvier 12
Data Model
                         vocabulaire déroutant...




vendredi 6 janvier 12
Column


                                              name
                                              value
                                            timestamp




                        La colonne est la plus petite unité de donnée
                                                         name: 64Ko max
                                                         value: 2Go max



vendredi 6 janvier 12
Row

                                  column


   Row                  Row Key
                                   col. name
                                   col. value
                                                col. name
                                                col. value
                                                             col. name
                                                             col. value
                                                                          col. name
                                                                          col. value




                        Une row: un ensemble de «columns»
                                                                  row key: 64ko max
                                                             nb max de colonnes: 2 milliards



vendredi 6 janvier 12
Exemple
                                                                                                   column
 row              granados@wmaker.net
                                                       facebook                         login          mobile
                                        http://www.facebook.com/jerome.granados         jgrana       0612345678




                 nromanetti@jaxio.com
                                            login           tél. fixe          twitter                  col. name
                                            nico          0495123456       @nromanetti




            row key                                                                              col. value


                          Pas de contraintes sur les colonnes...


vendredi 6 janvier 12
Column Family
                                       ≃Table en relationnel
                                                  login                     facebook                     mobile
                        granados@wmaker.net
                                                  jgrana     http://www.facebook.com/jerome.granados   0612345678


   User
                                                 twitter         login          tél. fixe
                        nromanetti@jaxio.com
                                               @nromanetti       nico         0495123456




                        User[granados@wmaker.net][mobile] = 0612345678



                  col. Family              row key           col. name col. value

vendredi 6 janvier 12
Le nom est une valeur

               XK_4501_2012            6:55                    7:00               7:20
                  _01_06                                                                      etc...
                              décollage face à la mer   survol Capo di Feno   survol Cannes




                        ๏ Le nom de la colonne est aussi une valeur!
                        ๏ Les colonnes sont triées par leur nom
                        ๏ Choix de la stratégie de tri (comparator)
                          Long, UTF8, Byte, etc...


       XK_4501_2012_01_06: vol Air Corsica AJA -> ORY du 6 janvier 2012 à 06:55

vendredi 6 janvier 12
Liens

         ‘BlogEntries’
                                        2011/12/31 10:52          2012/01/01 23:12    2012/01/06 11:11
                              wmaker                                                                     etc...
                                            rowkeyA                     rowkeyB          rowkeyC




           ‘BlogEntry’
                                                                 ������������
                                              Content                     date                Title
                             rowkeyA                                                                          etc...
                                       En cette fin d’année....     2011/12/31 10:52       Bye bye 2011

                        ������




vendredi 6 janvier 12
Valueless column

 ‘TopScores’
                  2012/01/02
                                 093:toto     105:titi   106:tutu   etc...




                        ๏ Le nom de la colonne porte à lui seul l’information
                                         ������������

                          ‣ ici: le score suivi du username
             ������
                        ๏ Intérêt? performance...



vendredi 6 janvier 12
Super Column

     granados@wmaker.net


             login
            jgrana           ๏ Une column contenant des columns
            twitter
        WM_Jerome              ‣ grouper des informations dépendantes
              ville
            Ajaccio



                        User[allusers][granados@wmaker.net][ville] = Ajaccio




          Super     row key super                        sub col. sub
        col. Family        col. name                      name col. value
vendredi 6 janvier 12
Column avec plusieurs données



                                 contactInfo
                                    tel:04...,
                                 email: nr@...,
                                 city: Ajaccio,
                                      etc...




vendredi 6 janvier 12
Expiring Column


                    ๏ Une colonne avec un TTL (Time To Live)




vendredi 6 janvier 12
Counter Column


                    ๏ Fonctionnalité récente
                    ๏ Permet d’incrémenter un compteur distribué




vendredi 6 janvier 12
Tombstone


                    ๏ Delete se fait en écrivant une colonne spéciale!
                        ‣ Timestamp fait foi




vendredi 6 janvier 12
2 usages pour les rows


                        ๏ Wide Row: Contient des milliers, millions de
                          colonnes...
                          ‣ données temporelles (timeline twitter, logs,
                            etc...)


                        ๏ Skinny Row: En contient moins




vendredi 6 janvier 12
Requêtes sur les colonnes

                                                               ...
                                       n1      n2      n5            n1033    n2323   n33444
                           Row Key
                                     qqchose qqchose qqchose         qqchose qqchose qqchose




                                                                Slice

                        ๏ Pas de join!
                        ๏ On récupère une ‘Slice’ de column
                          ‣ ex: toutes les colonnes entre ‘n5’ et ‘n2323’

                        Concevoir son modèle de données en fonction des
                                   requêtes que l’on veut faire
vendredi 6 janvier 12
Secondary Index

                                                 twitter     country     tél. fixe
                        nromanetti@jaxio.com
                                               @nromanetti     FR      0495123456




            ๏ Index sur la valeur d’une colonne
                   ‣ Exemple: index sur la valeur de la column ‘country’
                   ‣ get users where country = 'FR';




vendredi 6 janvier 12
Révisions :)

                        ๏ column (normale ou super)
                        ๏ wide row, skinny row
                        ๏ column family
                        ๏ requêtes (column slice) / secondary index
                        ๏ valueless column
                        ๏ liens
                        ๏ tombstone


vendredi 6 janvier 12
Réplication


         •       Pour assurer la disponibilité des données, il faut les répliquer

         •       ‘Replication Factor’ (RF): nombre de ‘replicas’ (copies)

                                                      RF = 3
                        node* 1            node 2      node 3   node 4        node 5




                        une donnée

                        une autre donnée
                                                                         une ‘Replica’
         * node = serveur
vendredi 6 janvier 12
Répliquer, mais où?



                        ๏ Tous les serveurs sont identiques
                        ๏ Postulats:
                          ‣ 1 row doit tenir sur 1 serveur
                          ‣ On veut répartir les rows uniformément




vendredi 6 janvier 12
Consistent Hashing

       bytes            Consistent     Un ‘token’ entre
     e.g. String          Hash           0 et 2^127
                                                 0
                                                     tokenB


          row keyA      f(keyA)
                                       tokenA

           row keyB     f(keyB)
                                        (2^127) / 2 ≃ 10^38

vendredi 6 janvier 12
Cassandra Ring
                 ๏      A chaque noeud on attribut un numéro de token

                        ‣   #token = node number * (2^127) / nb of nodes

                                                           tokenB
                                                     N0

                                           N7                   N1      token1=1*(2^127)/8

                                                                            token range

                                      N6
                                                                     N2     token2=2*(2^127)/8

                             tokenA

                                           N5                   N3

                                                     N4

      node 2 = contient 1ère replica des rows ayant leur token compris entre token1 et token2


vendredi 6 janvier 12
Stratégie de placement

             ๏          RandomPartioner: Répartir uniformément les différentes ‘rows’ entre les serveurs

             ๏          Placement Strategy: par défaut, sur les noeuds suivants


                                                              tokenB
                                                       N0

      RF = 3                               N7                      N1     1ère replica de la row ‘tokenB’




                                      N6
                                                                         N2       2ème replica...

                             tokenA

                                           N5                      N3     3ème replica...

                                                       N4

vendredi 6 janvier 12
Ecriture

                                                            N0

        Client                                     N7            N1

                                  1
  RF = 3                                                2
  1: le client contacte n’importe quel                                N2
                                              N6
  noeud

  2: le noeud contacté (a.k.a. «storage
  proxy») sert de coordinateur                     N5            N3


  Note: Le client peut disposer d’une pool                  N4
  de connexions vers quelques noeuds.



                        Le client ne sait pas où la donnée sera écrite
vendredi 6 janvier 12
Ecriture
                                          create
                                            password    update delete
                                              xyz        password
                                                                    password
                                            10000          abc

             ๏ Update                                     20000
                                                                    30000

                    ‣ On crée!                         3 columns!
             ๏ Delete
                    ‣ Crée la column sous forme de Tombstone



                            Le timestamp le plus récent fait foi
vendredi 6 janvier 12
Ecriture


                        ๏ Comment le client s’assure-t-il que la donnée est
                          effectivement écrite et répliquée?
                          ‣ Attendre une réponse de tous les serveurs
                            impliqués?
                          ‣ Ne pas attendre?
                        ๏ En pratique, cela dépend du use-case
                          ‣ Solution: Tuneable Consistency



vendredi 6 janvier 12
Tuneable Consistency

                        ๏ En écriture, le client indique le Consistency Level
                          désiré
                          ‣ ONE: Je veux être certain qu’au moins une
                            replica a été persistée durablement
                          ‣ QUORUM: Je veux être certain que la
                            majorité des replicas ont été persistées
                            durablement
                          ‣ ALL: Je veux être certain que toutes les replicas
                            ont été persistées durablement


vendredi 6 janvier 12
Consistency Level ONE

                                                        N0

        Client                 write               N7        N1




                           Success            N6
                                                                  N2




                                                   N5        N3

                                                        N4

   RF = 3
                        write en asynchrone
vendredi 6 janvier 12
Consistency Level ONE

                                             N0

        Client                          N7        N1




                                   N6
                                              X        N2


          puis, en background...
                                        N5        N3

                                             N4

   RF = 3


vendredi 6 janvier 12
Consistency Level QUORUM

                                               N0

        Client              write         N7        N1




                           Failure
                                     N6
                                                X        N2




                                          N5        N3

                                               N4

   RF = 3


vendredi 6 janvier 12
Consistency Level QUORUM

                                                N0

        Client                write        N7        N1




      RF = 3                          N6                  N2




                                           N5        N3


                         Success                N4




vendredi 6 janvier 12
Consistency Level ALL

                                                N0

        Client                write        N7            N1




      RF = 3                          N6
                                                     X        N2




                                           N5            N3


                        Failure                 N4




vendredi 6 janvier 12
Consistency Level ALL

                                               N0

        Client               write        N7        N1




      RF = 3                         N6                  N2




                                          N5        N3


                        Success                N4




vendredi 6 janvier 12
Hinted Handoff


                 ๏ Quid du noeud sur lequel nous n’avons pas pu écrire?
                 ๏ Lorsqu’un noeud est indisponible le noeud
                   coordinateur écrit la donnée sur un autre noeud
                 ๏ Cet autre noeud est en charge de rejouer le write
                   une fois que le noeud indisponible revient dans le ring




vendredi 6 janvier 12
Hinted Handoff

                                                    N0

        Client               write           N7          N1




   RF = 3                                                     N2
                                        N6
CL=QUORUM
                                                  hint
                                             N5          N3


                        Success                     N4




vendredi 6 janvier 12
Hinted Handoff

                                                                     N0

        Client                                           N7                      N1




   RF = 3                                                                             N2
                                                    N6
CL=QUORUM

                                                         N5
                                                                      write      N3

                                                                     N4


                        Lorsque N3 revient, N4 lui envoie la donnée
                            attention au max_hint_window_in_ms (1h par défaut)

vendredi 6 janvier 12
Gossip


                 ๏ Comment un noeud sait-il qu’un autre noeud revient
                   dans le ring?
                 ๏ Les noeuds échangent des meta-données entre eux
                   sur l’état du ring
                 ๏ Protocole peer to peer




vendredi 6 janvier 12
Gossiping
                                                         N0

                                              N7                     N1




                                                                    X
                                         N6
                                                              X            N2



                                                                       X
                                              N5
                                                               X     N3

                                                         N4


                        ๏   Chaque seconde, chaque noeud contacte entre 1et 3 noeuds

                            ‣   Conçu pour éviter la formation d’ilots indépendants

                            ‣   Conçu pour que l’information se propage vite


vendredi 6 janvier 12
Consistency Level ANY

                                                          N0

        Client                    write            N7          N1

                                                        hint
      RF = 3                                  N6
                                                                    N2




                                                   N5          N3
                        Success
                                                          N4




                                     Intérêt? Performance
vendredi 6 janvier 12
Révision / Questions

                 ๏ Consistent Hashing
                 ๏ Token
                 ๏ Replication Factor
                 ๏ Replica placement strategy
                 ๏ Consistency Level
                 ๏ Hinted Handoff
                 ๏ Gossip protocol


vendredi 6 janvier 12
Retour sur Ecriture
                                             create
                                               password   update update
                                                 xyz       password
                                                                     password
                                               10000        abc
                                                                      tralala
                                                           20000
                                                                     30000


                                              3 valeurs pour 1 column


                              Le timestamp le plus récent fait foi


                        Mais les nodes ont-ils bien la dernière version?

vendredi 6 janvier 12
Noeud down revenant dans le ring




                        ๏ Imaginez un noeud KO pendant une durée > durée
                          de vie d’un hint
                          ‣ Il doit récupérer les données
                          ‣ Node repair (Anti Entropy Repair)




vendredi 6 janvier 12
Lecture


                 •      Comment le client s’assure-t-il que la donnée lue est
                        bien la plus récente?

                        •   Attendre une réponse de tous les serveurs
                            impliqués et comparer?

                        •   Se fier à la première réponse?

                 •      En pratique, cela dépend du use-case

                 •      Solution: Tuneable Consistency


vendredi 6 janvier 12
Tuneable Consistency

                        ๏ En lecture, le client indique le Consistency Level
                          désiré
                          ‣ ONE: je veux la donnée d’une des replicas, je
                            m’en fiche si ce n’est pas la plus récente
                          ‣ QUORUM: je veux la donnée la plus récente
                            parmi une majorité de replicas, je me dis que la
                            majorité aura peut être raison
                          ‣ ALL: je veux la donnée la plus récente parmi
                            toutes les replicas, je serai certain d’avoir la plus
                            récente
vendredi 6 janvier 12
Lecture

                                                           N0

        Client                                    N7            N1

                                 1
  RF = 3                                               2
  1: le client contacte n’importe quel                               N2
                                             N6
  noeud

  2: le noeud contacté (a.k.a. «storage
  proxy») sert de coordinateur                    N5            N3


  Note: Le client peut disposer d’une pool                 N4
  de connexions vers qq noeuds.



                        Le client ne sait pas où la donnée sera lue
vendredi 6 janvier 12
Consistency Level ONE

                                                                         N0

        Client                   read                         N7                N1


                                                                    re ad
                                                         N6
                                                                       digest        N2


                                                                   dig
                                                                         est
                                                              N5                N3

                                                                         N4


      OK, mais N1 avait-il la version la plus récente?

                        read en asynchrone (md5), puis read repair si besoin et
                                             si configuré
vendredi 6 janvier 12
Consistency Level ONE

                                                                      N0

        Client                read                            N7           N1


                                                                   re ad
                                                                                N2
                                                         N6




                                                              N5           N3

                                                                      N4


      OK, mais N1 avait-il la version la plus récente?




vendredi 6 janvier 12
Consistency Level QUORUM

                                                                      N0

        Client                                             N7               N1
                                read
                                                                 re ad
      RF = 3                                          N6
                                                                   digest        N2


                                                                dig
                                                                      est
                                                           N5               N3

                                                                      N4



          Retourne version la plus récente entre N1 & N2
          Mais N3 avait-il une version encore plus récente?


vendredi 6 janvier 12
Consistency Level ALL

                                                                         N0

        Client                       read                      N7             N1




      RF = 3                                              N6
                                                                                   N2




                                                               N5             N3

                                                                         N4




                        KO, même pas besoin d’essayer de lire N1 et N2


vendredi 6 janvier 12
Consistency Level ALL

                                                                         N0

        Client                    read                        N7               N1


                                                                    re ad
      RF = 3                                             N6
                                                                      digest        N2


                                                                   dig
                                                                         est
                                                              N5               N3

                                                                         N4


                  OK, retourne version la plus récente




vendredi 6 janvier 12
Consistance forte

              ๏ Comment être certain que la donnée lue est la plus
                récente?
                    ‣ formule        W + R > RF
                           W: nb de replica contactées en écriture
                           R: nb de replica contactées en lecture
                          RF: replication factor
              ๏ Cas trivial
                    ‣ écriture en ALL et lecture en ONE



vendredi 6 janvier 12
Consistency
                                          RF = 3

                           N0
                                QUORUM                       N0      QUORUM
          N7                    N1
                                                    N7               N1



                        Write                            Write
                                     N2
   N6                                                                     N2
                                               N6



                   Read                                  Read
           N5                   N3
                                                    N5               N3

                           N4

                                ONE
                                                             N4
                                                                     QUORUM
                    «Weak»                                  Strong

vendredi 6 janvier 12
En pratique




             ๏ La réplication fonctionne très bien ( < qq ms )




vendredi 6 janvier 12
Noeud down revenant dans le ring



                        ๏ Imaginons qu’un noeud ait loupé un delete pendant
                          son down time
                          ‣ La donnée non supprimée ne doit pas être prise
                            par le autres noeuds (qui l’ont supprimée) pour
                            une nouvelle donnée!
                          ‣ Grace Period des Tombstone (10j par défaut)
                          ‣ Anti-Entropy Repair (nodetool repair)


vendredi 6 janvier 12
Révision / Questions

                 ๏ Storage proxy
                 ๏ Read repair
                 ๏ Strong consistency: R+W > RF
                 ๏ Update
                 ๏ Tombstone
                 ๏ Anti-Entropy




vendredi 6 janvier 12
Performance en écriture



             ๏ En écriture, Cassandra est extrêmement rapide, pourquoi?
                    ‣ Ecrit dans le fichier Commit log (append only)
                    ‣ Ecrit en mémoire (MemTable)
                    ‣ Pas d’update...




vendredi 6 janvier 12
Performance en écriture

                         Mémoire

                          MemTable   MemTable
                                       MemTable
                                        MemTable



                                                 Flush

                          Commit      SSTable
                                       SSTable
                                        SSTable
                                         SSTable
                           Log            SSTable       Compaction   SSTable
                                           SSTable                    SSTable
                                                                       SSTable
                                            SSTable
                                             SSTable                    SSTable
                                              SSTable
                                               SSTable
                                                SSTable

                         Fichier
                                             R.O.                    R.O.
vendredi 6 janvier 12
Compaction


                        create
                         password   update update
                           xyz
                         10000
                                     password
                                      abc
                                             password   update
                                               dada      password
                                     20000
                                             30000        dudu
                                                         50000




vendredi 6 janvier 12
Performance en lecture


                        ๏ En lecture, Cassandra est quasiment aussi
                          performant
                          ‣ Contact en priorité le noeud le plus «proche»
                            de la donnée
                          ‣ Index pour row key et col. name + Cache
                          ‣ Bloom Filter




vendredi 6 janvier 12
Performance en lecture

                                       Cache
                                                                     MemTable
                                                                       MemTable
                                                                        MemTable

                              présent da
                                        ns SSTTabl
                                                                e?
                si p                                                  BloomFilter
                     r  ése
                           nt
                                                                       BloomFilter
                                                                        BloomFilter
                                                                         BloomFilter
                                                                          BloomFilter
                                                                                         Mémoire
                                (fau                                       BloomFilter
                                    xp
                                         osi
                                             tif
                                                   po
                                                     ssib
                                                          le)
                                                                         SSTable
                                                                          SSTable
                                                                                         Fichiers
                                                                           SSTable
                                                                            SSTable
                                                                             SSTable
                                                                              SSTable



vendredi 6 janvier 12
Snitch



                        ๏ Une adresse IP => Un endroit (DataCenter, Rack)
                        ๏ Utile pour répartir les replicas entre les racks,
                          entre les DataCenters
                        ๏ Le ‘dynamic snitch’ prend aussi en compte le temps
                          de réponse des noeuds




vendredi 6 janvier 12
Data Centers / Racks

                        DC USA                             DC Europe
                         Rack 1                               Rack 1
                         token n+1                             token n   Replica 1
                         token p+1   Replica 1 Replica 4       token p

                         token r+1                             token r   Replica 3




                         Rack 2                               Rack 2
                         token o+1   Replica 3                token o    Replica 2
                         token q+1   Replica 2                token q

                         token s+1                             token s   Replica 4




   RF = 4

vendredi 6 janvier 12
Tokens forment toujours un ring

                                                            token n       token n+1


                                                                      rack1

                                    token s+1                                               token o
                                                  rack2                            rack2
                    Replica 4       token s                                                 token o+1




                                token r+1                                                      token p
                                                 rack1                              rack1
                                     token r                                                token p+1
                        Replica 3                                                                        Replica 1

                                                                      rack2
                                                          token q+1           token q
    Europe                                      Replica 2

    USA
vendredi 6 janvier 12
QUORUM pas toujours adapté


                           DC USA            DC Europe
                             Rack 1             Rack 1
      Client
                             token n+1           token n


                                         ☹
                             token p+1           token p

                                                 token r
                             token r+1




                            Rack 2              Rack 2
                             token o+1          token o

                             token q+1          token q


   RF = 6                    token s+1           token s




vendredi 6 janvier 12
LOCAL_QUORUM

                                   DC USA               DC Europe
                                      Rack 1               Rack 1
        Client
                                      token n+1             token n

                                      token p+1             token p

                                                            token r
                                      token r+1


                                                  ☺
                                      Rack 2               Rack 2
                                      token o+1            token o

                                      token q+1            token q

                                      token s+1             token s




                        QUORUM sur 1 seul Data Center
vendredi 6 janvier 12
EACH_QUORUM

                                     DC USA             DC Europe
                                        Rack 1              Rack 1
        Client
                                        token n+1            token n

                                        token p+1            token p

                                                             token r
                                        token r+1


                                                    ☺
                                        Rack 2              Rack 2
                                        token o+1           token o

                                        token q+1           token q

                                        token s+1            token s




                        QUORUM sur chacun des Data Center
vendredi 6 janvier 12
Sujets non abordés...

                        ๏ Ajouter/Supprimer/Remplacer un noeud
                        ๏ OrderPreserving Partitionner
                        ๏ Major Compaction
                        ๏ Failure detector intégré au Gossip
                        ๏ Tunning / Monitoring
                        ๏ Tools
                        ๏ Client API (Hector, etc.), CQL
                        ๏ etc..
vendredi 6 janvier 12
Questions?




                        ๏ Et peut-être des réponses :)




vendredi 6 janvier 12
Pour approfondir...




       http://www.datastax.com/docs/1.0/index

       http://wiki.apache.org/cassandra/

        http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/


vendredi 6 janvier 12

More Related Content

What's hot

Présentation des bases de données NoSql
Présentation des bases de données NoSqlPrésentation des bases de données NoSql
Présentation des bases de données NoSqlSidi LEKHALIFA
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -IliasAEA
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursHatim CHAHDI
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQLebiznext
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingLilia Sfaxi
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6Amal Abid
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
Cassandra techniques de modelisation avancee
Cassandra techniques de modelisation avanceeCassandra techniques de modelisation avancee
Cassandra techniques de modelisation avanceeDuyhai Doan
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBaseAmal Abid
 
Bases de données no sql.pdf
Bases de données no sql.pdfBases de données no sql.pdf
Bases de données no sql.pdfZkSadrati
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4JLilia Sfaxi
 

What's hot (20)

Présentation des bases de données NoSql
Présentation des bases de données NoSqlPrésentation des bases de données NoSql
Présentation des bases de données NoSql
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
Cours Big Data Chap6
Cours Big Data Chap6Cours Big Data Chap6
Cours Big Data Chap6
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Cassandra techniques de modelisation avancee
Cassandra techniques de modelisation avanceeCassandra techniques de modelisation avancee
Cassandra techniques de modelisation avancee
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
NoSQL MeetUp
NoSQL MeetUpNoSQL MeetUp
NoSQL MeetUp
 
Presentation cassandra
Presentation cassandraPresentation cassandra
Presentation cassandra
 
Cassandra
CassandraCassandra
Cassandra
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBase
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Bases de données no sql.pdf
Bases de données no sql.pdfBases de données no sql.pdf
Bases de données no sql.pdf
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
Technologies pour le Big Data
Technologies pour le Big DataTechnologies pour le Big Data
Technologies pour le Big Data
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
 

Viewers also liked

Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Jérôme Mainaud
 
Introduction to Cassandra and datastax DSE
Introduction to Cassandra and datastax DSEIntroduction to Cassandra and datastax DSE
Introduction to Cassandra and datastax DSEUlises Fasoli
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à CassandraVMware Tanzu
 
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 CassandraJulien Dubois
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs javaJérémy Sevellec
 
Etat de l art business intelligence
Etat de l art business intelligenceEtat de l art business intelligence
Etat de l art business intelligenceOCTO Technology
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésRomain Hardouin
 
Introduction à Cassandra - devoxx france 2012
Introduction à Cassandra - devoxx france 2012Introduction à Cassandra - devoxx france 2012
Introduction à Cassandra - devoxx france 2012jaxio
 
OTC vs. Exchange Traded Derivatives
OTC vs. Exchange Traded DerivativesOTC vs. Exchange Traded Derivatives
OTC vs. Exchange Traded DerivativesSukant Arora
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natifHenri Gomez
 
Ux076 formation-administration-tomcat
Ux076 formation-administration-tomcatUx076 formation-administration-tomcat
Ux076 formation-administration-tomcatCERTyou Formation
 
Formation Flash
Formation FlashFormation Flash
Formation Flashjplesault
 
Cobbler puppet
Cobbler puppetCobbler puppet
Cobbler puppetFedora-Fr
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancertarkaus
 
Vision of future through contact lens best video
Vision of future through contact lens best videoVision of future through contact lens best video
Vision of future through contact lens best videoRevathy Ravi
 

Viewers also liked (20)

Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
 
Introduction to Cassandra and datastax DSE
Introduction to Cassandra and datastax DSEIntroduction to Cassandra and datastax DSE
Introduction to Cassandra and datastax DSE
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
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
 
Cassandra pour les développeurs java
Cassandra pour les développeurs javaCassandra pour les développeurs java
Cassandra pour les développeurs java
 
Etat de l art business intelligence
Etat de l art business intelligenceEtat de l art business intelligence
Etat de l art business intelligence
 
Apache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalitésApache Cassandra - Concepts et fonctionnalités
Apache Cassandra - Concepts et fonctionnalités
 
La lumière du Soleil sur la Terre et sur la Lune
La lumière du Soleil sur la Terre et sur la LuneLa lumière du Soleil sur la Terre et sur la Lune
La lumière du Soleil sur la Terre et sur la Lune
 
Introduction à Cassandra - devoxx france 2012
Introduction à Cassandra - devoxx france 2012Introduction à Cassandra - devoxx france 2012
Introduction à Cassandra - devoxx france 2012
 
Chapitre 13 Les lentilles
Chapitre 13 Les lentillesChapitre 13 Les lentilles
Chapitre 13 Les lentilles
 
OTC vs. Exchange Traded Derivatives
OTC vs. Exchange Traded DerivativesOTC vs. Exchange Traded Derivatives
OTC vs. Exchange Traded Derivatives
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif
 
Ux076 formation-administration-tomcat
Ux076 formation-administration-tomcatUx076 formation-administration-tomcat
Ux076 formation-administration-tomcat
 
Formation Flash
Formation FlashFormation Flash
Formation Flash
 
Présentation devops&puppet 04112014
Présentation devops&puppet 04112014 Présentation devops&puppet 04112014
Présentation devops&puppet 04112014
 
Cobbler puppet
Cobbler puppetCobbler puppet
Cobbler puppet
 
Presentation Tomcat Load Balancer
Presentation Tomcat Load BalancerPresentation Tomcat Load Balancer
Presentation Tomcat Load Balancer
 
83010 world pre enlightenment 50m
83010 world pre enlightenment 50m83010 world pre enlightenment 50m
83010 world pre enlightenment 50m
 
Internet
InternetInternet
Internet
 
Vision of future through contact lens best video
Vision of future through contact lens best videoVision of future through contact lens best video
Vision of future through contact lens best video
 

Introduction à Cassandra - campus plex

  • 1. Introduction à Cassandra CampusPlex - Ajaccio 6 janvier 2012 Nicolas Romanetti vendredi 6 janvier 12
  • 2. A propos ๏ Nicolas Romanetti ๏ Co-fondateur JAXIO / Architecte / Développeur ๏ Utilisation de Cassandra lors du Challenge USI 2011 vendredi 6 janvier 12
  • 3. Mon objectif ๏ Vous faire passer de «c’est quoi ce truc!» à «je pige!» ๏ Vous donner envie d’approfondir le sujet vendredi 6 janvier 12
  • 4. Cassandra ๏ Base de données distribuée conçue pour ‣ gérer une grande quantité de données ‣ résister aux pannes ‣ être performante vendredi 6 janvier 12
  • 5. Historique ๏ Créée par Facebook (Inbox search) ๏ Open Source en 2008 ๏ Top Level Apache Project en 2010 ๏ Abandonné par Facebook en 2010 ๏ Utilisée par Netflix, Twitter, etc... vendredi 6 janvier 12
  • 6. Data Model vocabulaire déroutant... vendredi 6 janvier 12
  • 7. Column name value timestamp La colonne est la plus petite unité de donnée name: 64Ko max value: 2Go max vendredi 6 janvier 12
  • 8. Row column Row Row Key col. name col. value col. name col. value col. name col. value col. name col. value Une row: un ensemble de «columns» row key: 64ko max nb max de colonnes: 2 milliards vendredi 6 janvier 12
  • 9. Exemple column row granados@wmaker.net facebook login mobile http://www.facebook.com/jerome.granados jgrana 0612345678 nromanetti@jaxio.com login tél. fixe twitter col. name nico 0495123456 @nromanetti row key col. value Pas de contraintes sur les colonnes... vendredi 6 janvier 12
  • 10. Column Family ≃Table en relationnel login facebook mobile granados@wmaker.net jgrana http://www.facebook.com/jerome.granados 0612345678 User twitter login tél. fixe nromanetti@jaxio.com @nromanetti nico 0495123456 User[granados@wmaker.net][mobile] = 0612345678 col. Family row key col. name col. value vendredi 6 janvier 12
  • 11. Le nom est une valeur XK_4501_2012 6:55 7:00 7:20 _01_06 etc... décollage face à la mer survol Capo di Feno survol Cannes ๏ Le nom de la colonne est aussi une valeur! ๏ Les colonnes sont triées par leur nom ๏ Choix de la stratégie de tri (comparator) Long, UTF8, Byte, etc... XK_4501_2012_01_06: vol Air Corsica AJA -> ORY du 6 janvier 2012 à 06:55 vendredi 6 janvier 12
  • 12. Liens ‘BlogEntries’ 2011/12/31 10:52 2012/01/01 23:12 2012/01/06 11:11 wmaker etc... rowkeyA rowkeyB rowkeyC ‘BlogEntry’ ������������ Content date Title rowkeyA etc... En cette fin d’année.... 2011/12/31 10:52 Bye bye 2011 ������ vendredi 6 janvier 12
  • 13. Valueless column ‘TopScores’ 2012/01/02 093:toto 105:titi 106:tutu etc... ๏ Le nom de la colonne porte à lui seul l’information ������������ ‣ ici: le score suivi du username ������ ๏ Intérêt? performance... vendredi 6 janvier 12
  • 14. Super Column granados@wmaker.net login jgrana ๏ Une column contenant des columns twitter WM_Jerome ‣ grouper des informations dépendantes ville Ajaccio User[allusers][granados@wmaker.net][ville] = Ajaccio Super row key super sub col. sub col. Family col. name name col. value vendredi 6 janvier 12
  • 15. Column avec plusieurs données contactInfo tel:04..., email: nr@..., city: Ajaccio, etc... vendredi 6 janvier 12
  • 16. Expiring Column ๏ Une colonne avec un TTL (Time To Live) vendredi 6 janvier 12
  • 17. Counter Column ๏ Fonctionnalité récente ๏ Permet d’incrémenter un compteur distribué vendredi 6 janvier 12
  • 18. Tombstone ๏ Delete se fait en écrivant une colonne spéciale! ‣ Timestamp fait foi vendredi 6 janvier 12
  • 19. 2 usages pour les rows ๏ Wide Row: Contient des milliers, millions de colonnes... ‣ données temporelles (timeline twitter, logs, etc...) ๏ Skinny Row: En contient moins vendredi 6 janvier 12
  • 20. Requêtes sur les colonnes ... n1 n2 n5 n1033 n2323 n33444 Row Key qqchose qqchose qqchose qqchose qqchose qqchose Slice ๏ Pas de join! ๏ On récupère une ‘Slice’ de column ‣ ex: toutes les colonnes entre ‘n5’ et ‘n2323’ Concevoir son modèle de données en fonction des requêtes que l’on veut faire vendredi 6 janvier 12
  • 21. Secondary Index twitter country tél. fixe nromanetti@jaxio.com @nromanetti FR 0495123456 ๏ Index sur la valeur d’une colonne ‣ Exemple: index sur la valeur de la column ‘country’ ‣ get users where country = 'FR'; vendredi 6 janvier 12
  • 22. Révisions :) ๏ column (normale ou super) ๏ wide row, skinny row ๏ column family ๏ requêtes (column slice) / secondary index ๏ valueless column ๏ liens ๏ tombstone vendredi 6 janvier 12
  • 23. Réplication • Pour assurer la disponibilité des données, il faut les répliquer • ‘Replication Factor’ (RF): nombre de ‘replicas’ (copies) RF = 3 node* 1 node 2 node 3 node 4 node 5 une donnée une autre donnée une ‘Replica’ * node = serveur vendredi 6 janvier 12
  • 24. Répliquer, mais où? ๏ Tous les serveurs sont identiques ๏ Postulats: ‣ 1 row doit tenir sur 1 serveur ‣ On veut répartir les rows uniformément vendredi 6 janvier 12
  • 25. Consistent Hashing bytes Consistent Un ‘token’ entre e.g. String Hash 0 et 2^127 0 tokenB row keyA f(keyA) tokenA row keyB f(keyB) (2^127) / 2 ≃ 10^38 vendredi 6 janvier 12
  • 26. Cassandra Ring ๏ A chaque noeud on attribut un numéro de token ‣ #token = node number * (2^127) / nb of nodes tokenB N0 N7 N1 token1=1*(2^127)/8 token range N6 N2 token2=2*(2^127)/8 tokenA N5 N3 N4 node 2 = contient 1ère replica des rows ayant leur token compris entre token1 et token2 vendredi 6 janvier 12
  • 27. Stratégie de placement ๏ RandomPartioner: Répartir uniformément les différentes ‘rows’ entre les serveurs ๏ Placement Strategy: par défaut, sur les noeuds suivants tokenB N0 RF = 3 N7 N1 1ère replica de la row ‘tokenB’ N6 N2 2ème replica... tokenA N5 N3 3ème replica... N4 vendredi 6 janvier 12
  • 28. Ecriture N0 Client N7 N1 1 RF = 3 2 1: le client contacte n’importe quel N2 N6 noeud 2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur N5 N3 Note: Le client peut disposer d’une pool N4 de connexions vers quelques noeuds. Le client ne sait pas où la donnée sera écrite vendredi 6 janvier 12
  • 29. Ecriture create password update delete xyz password password 10000 abc ๏ Update 20000 30000 ‣ On crée! 3 columns! ๏ Delete ‣ Crée la column sous forme de Tombstone Le timestamp le plus récent fait foi vendredi 6 janvier 12
  • 30. Ecriture ๏ Comment le client s’assure-t-il que la donnée est effectivement écrite et répliquée? ‣ Attendre une réponse de tous les serveurs impliqués? ‣ Ne pas attendre? ๏ En pratique, cela dépend du use-case ‣ Solution: Tuneable Consistency vendredi 6 janvier 12
  • 31. Tuneable Consistency ๏ En écriture, le client indique le Consistency Level désiré ‣ ONE: Je veux être certain qu’au moins une replica a été persistée durablement ‣ QUORUM: Je veux être certain que la majorité des replicas ont été persistées durablement ‣ ALL: Je veux être certain que toutes les replicas ont été persistées durablement vendredi 6 janvier 12
  • 32. Consistency Level ONE N0 Client write N7 N1 Success N6 N2 N5 N3 N4 RF = 3 write en asynchrone vendredi 6 janvier 12
  • 33. Consistency Level ONE N0 Client N7 N1 N6 X N2 puis, en background... N5 N3 N4 RF = 3 vendredi 6 janvier 12
  • 34. Consistency Level QUORUM N0 Client write N7 N1 Failure N6 X N2 N5 N3 N4 RF = 3 vendredi 6 janvier 12
  • 35. Consistency Level QUORUM N0 Client write N7 N1 RF = 3 N6 N2 N5 N3 Success N4 vendredi 6 janvier 12
  • 36. Consistency Level ALL N0 Client write N7 N1 RF = 3 N6 X N2 N5 N3 Failure N4 vendredi 6 janvier 12
  • 37. Consistency Level ALL N0 Client write N7 N1 RF = 3 N6 N2 N5 N3 Success N4 vendredi 6 janvier 12
  • 38. Hinted Handoff ๏ Quid du noeud sur lequel nous n’avons pas pu écrire? ๏ Lorsqu’un noeud est indisponible le noeud coordinateur écrit la donnée sur un autre noeud ๏ Cet autre noeud est en charge de rejouer le write une fois que le noeud indisponible revient dans le ring vendredi 6 janvier 12
  • 39. Hinted Handoff N0 Client write N7 N1 RF = 3 N2 N6 CL=QUORUM hint N5 N3 Success N4 vendredi 6 janvier 12
  • 40. Hinted Handoff N0 Client N7 N1 RF = 3 N2 N6 CL=QUORUM N5 write N3 N4 Lorsque N3 revient, N4 lui envoie la donnée attention au max_hint_window_in_ms (1h par défaut) vendredi 6 janvier 12
  • 41. Gossip ๏ Comment un noeud sait-il qu’un autre noeud revient dans le ring? ๏ Les noeuds échangent des meta-données entre eux sur l’état du ring ๏ Protocole peer to peer vendredi 6 janvier 12
  • 42. Gossiping N0 N7 N1 X N6 X N2 X N5 X N3 N4 ๏ Chaque seconde, chaque noeud contacte entre 1et 3 noeuds ‣ Conçu pour éviter la formation d’ilots indépendants ‣ Conçu pour que l’information se propage vite vendredi 6 janvier 12
  • 43. Consistency Level ANY N0 Client write N7 N1 hint RF = 3 N6 N2 N5 N3 Success N4 Intérêt? Performance vendredi 6 janvier 12
  • 44. Révision / Questions ๏ Consistent Hashing ๏ Token ๏ Replication Factor ๏ Replica placement strategy ๏ Consistency Level ๏ Hinted Handoff ๏ Gossip protocol vendredi 6 janvier 12
  • 45. Retour sur Ecriture create password update update xyz password password 10000 abc tralala 20000 30000 3 valeurs pour 1 column Le timestamp le plus récent fait foi Mais les nodes ont-ils bien la dernière version? vendredi 6 janvier 12
  • 46. Noeud down revenant dans le ring ๏ Imaginez un noeud KO pendant une durée > durée de vie d’un hint ‣ Il doit récupérer les données ‣ Node repair (Anti Entropy Repair) vendredi 6 janvier 12
  • 47. Lecture • Comment le client s’assure-t-il que la donnée lue est bien la plus récente? • Attendre une réponse de tous les serveurs impliqués et comparer? • Se fier à la première réponse? • En pratique, cela dépend du use-case • Solution: Tuneable Consistency vendredi 6 janvier 12
  • 48. Tuneable Consistency ๏ En lecture, le client indique le Consistency Level désiré ‣ ONE: je veux la donnée d’une des replicas, je m’en fiche si ce n’est pas la plus récente ‣ QUORUM: je veux la donnée la plus récente parmi une majorité de replicas, je me dis que la majorité aura peut être raison ‣ ALL: je veux la donnée la plus récente parmi toutes les replicas, je serai certain d’avoir la plus récente vendredi 6 janvier 12
  • 49. Lecture N0 Client N7 N1 1 RF = 3 2 1: le client contacte n’importe quel N2 N6 noeud 2: le noeud contacté (a.k.a. «storage proxy») sert de coordinateur N5 N3 Note: Le client peut disposer d’une pool N4 de connexions vers qq noeuds. Le client ne sait pas où la donnée sera lue vendredi 6 janvier 12
  • 50. Consistency Level ONE N0 Client read N7 N1 re ad N6 digest N2 dig est N5 N3 N4 OK, mais N1 avait-il la version la plus récente? read en asynchrone (md5), puis read repair si besoin et si configuré vendredi 6 janvier 12
  • 51. Consistency Level ONE N0 Client read N7 N1 re ad N2 N6 N5 N3 N4 OK, mais N1 avait-il la version la plus récente? vendredi 6 janvier 12
  • 52. Consistency Level QUORUM N0 Client N7 N1 read re ad RF = 3 N6 digest N2 dig est N5 N3 N4 Retourne version la plus récente entre N1 & N2 Mais N3 avait-il une version encore plus récente? vendredi 6 janvier 12
  • 53. Consistency Level ALL N0 Client read N7 N1 RF = 3 N6 N2 N5 N3 N4 KO, même pas besoin d’essayer de lire N1 et N2 vendredi 6 janvier 12
  • 54. Consistency Level ALL N0 Client read N7 N1 re ad RF = 3 N6 digest N2 dig est N5 N3 N4 OK, retourne version la plus récente vendredi 6 janvier 12
  • 55. Consistance forte ๏ Comment être certain que la donnée lue est la plus récente? ‣ formule W + R > RF W: nb de replica contactées en écriture R: nb de replica contactées en lecture RF: replication factor ๏ Cas trivial ‣ écriture en ALL et lecture en ONE vendredi 6 janvier 12
  • 56. Consistency RF = 3 N0 QUORUM N0 QUORUM N7 N1 N7 N1 Write Write N2 N6 N2 N6 Read Read N5 N3 N5 N3 N4 ONE N4 QUORUM «Weak» Strong vendredi 6 janvier 12
  • 57. En pratique ๏ La réplication fonctionne très bien ( < qq ms ) vendredi 6 janvier 12
  • 58. Noeud down revenant dans le ring ๏ Imaginons qu’un noeud ait loupé un delete pendant son down time ‣ La donnée non supprimée ne doit pas être prise par le autres noeuds (qui l’ont supprimée) pour une nouvelle donnée! ‣ Grace Period des Tombstone (10j par défaut) ‣ Anti-Entropy Repair (nodetool repair) vendredi 6 janvier 12
  • 59. Révision / Questions ๏ Storage proxy ๏ Read repair ๏ Strong consistency: R+W > RF ๏ Update ๏ Tombstone ๏ Anti-Entropy vendredi 6 janvier 12
  • 60. Performance en écriture ๏ En écriture, Cassandra est extrêmement rapide, pourquoi? ‣ Ecrit dans le fichier Commit log (append only) ‣ Ecrit en mémoire (MemTable) ‣ Pas d’update... vendredi 6 janvier 12
  • 61. Performance en écriture Mémoire MemTable MemTable MemTable MemTable Flush Commit SSTable SSTable SSTable SSTable Log SSTable Compaction SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable SSTable Fichier R.O. R.O. vendredi 6 janvier 12
  • 62. Compaction create password update update xyz 10000 password abc password update dada password 20000 30000 dudu 50000 vendredi 6 janvier 12
  • 63. Performance en lecture ๏ En lecture, Cassandra est quasiment aussi performant ‣ Contact en priorité le noeud le plus «proche» de la donnée ‣ Index pour row key et col. name + Cache ‣ Bloom Filter vendredi 6 janvier 12
  • 64. Performance en lecture Cache MemTable MemTable MemTable présent da ns SSTTabl e? si p BloomFilter r ése nt BloomFilter BloomFilter BloomFilter BloomFilter Mémoire (fau BloomFilter xp osi tif po ssib le) SSTable SSTable Fichiers SSTable SSTable SSTable SSTable vendredi 6 janvier 12
  • 65. Snitch ๏ Une adresse IP => Un endroit (DataCenter, Rack) ๏ Utile pour répartir les replicas entre les racks, entre les DataCenters ๏ Le ‘dynamic snitch’ prend aussi en compte le temps de réponse des noeuds vendredi 6 janvier 12
  • 66. Data Centers / Racks DC USA DC Europe Rack 1 Rack 1 token n+1 token n Replica 1 token p+1 Replica 1 Replica 4 token p token r+1 token r Replica 3 Rack 2 Rack 2 token o+1 Replica 3 token o Replica 2 token q+1 Replica 2 token q token s+1 token s Replica 4 RF = 4 vendredi 6 janvier 12
  • 67. Tokens forment toujours un ring token n token n+1 rack1 token s+1 token o rack2 rack2 Replica 4 token s token o+1 token r+1 token p rack1 rack1 token r token p+1 Replica 3 Replica 1 rack2 token q+1 token q Europe Replica 2 USA vendredi 6 janvier 12
  • 68. QUORUM pas toujours adapté DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n ☹ token p+1 token p token r token r+1 Rack 2 Rack 2 token o+1 token o token q+1 token q RF = 6 token s+1 token s vendredi 6 janvier 12
  • 69. LOCAL_QUORUM DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n token p+1 token p token r token r+1 ☺ Rack 2 Rack 2 token o+1 token o token q+1 token q token s+1 token s QUORUM sur 1 seul Data Center vendredi 6 janvier 12
  • 70. EACH_QUORUM DC USA DC Europe Rack 1 Rack 1 Client token n+1 token n token p+1 token p token r token r+1 ☺ Rack 2 Rack 2 token o+1 token o token q+1 token q token s+1 token s QUORUM sur chacun des Data Center vendredi 6 janvier 12
  • 71. Sujets non abordés... ๏ Ajouter/Supprimer/Remplacer un noeud ๏ OrderPreserving Partitionner ๏ Major Compaction ๏ Failure detector intégré au Gossip ๏ Tunning / Monitoring ๏ Tools ๏ Client API (Hector, etc.), CQL ๏ etc.. vendredi 6 janvier 12
  • 72. Questions? ๏ Et peut-être des réponses :) vendredi 6 janvier 12
  • 73. Pour approfondir... http://www.datastax.com/docs/1.0/index http://wiki.apache.org/cassandra/ http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/ vendredi 6 janvier 12