Introduction   Cassandra - campus plex

download Introduction   Cassandra - campus plex

of 73

  • date post

    05-Dec-2014
  • Category

    Documents

  • view

    5.202
  • download

    4

Embed Size (px)

description

A french introduction to Cassandra database. You can watch the video from here (in french) http://www.jaxio.com/2012/01/06/introduction-a-cassandra-nosql-video.html

Transcript of Introduction   Cassandra - campus plex

  • Introduction

    Cassandra

    CampusPlex - Ajaccio 6 janvier 2012

    Nicolas Romanetti

    vendredi 6 janvier 12

  • A propos

    Nicolas Romanetti Co-fondateur JAXIO / Architecte / Dveloppeur Utilisation de Cassandra lors du Challenge USI 2011

    vendredi 6 janvier 12

  • Mon objectif

    Vous faire passer de cest quoi ce truc! je pige! Vous donner envie dapprofondir le sujet

    vendredi 6 janvier 12

  • Cassandra

    Base de donnes distribue conue pour grer une grande quantit de donnes rsister aux pannes tre performante

    vendredi 6 janvier 12

  • Historique

    Cre par Facebook (Inbox search) Open Source en 2008 Top Level Apache Project en 2010 Abandonn par Facebook en 2010 Utilise par Netflix, Twitter, etc...

    vendredi 6 janvier 12

  • Data Model vocabulaire droutant...

    vendredi 6 janvier 12

  • Column

    name

    value

    timestamp

    La colonne est la plus petite unit de donnename: 64Ko maxvalue: 2Go max

    vendredi 6 janvier 12

  • Row Key

    Row

    col. name

    col. value

    col. name

    col. value

    col. name

    col. value

    col. name

    col. valueRow

    column

    row key: 64ko maxnb max de colonnes: 2 milliards

    Une row: un ensemble de columns

    vendredi 6 janvier 12

  • granados@wmaker.netlogin

    jgrana

    facebook

    http://www.facebook.com/jerome.granados

    nromanetti@jaxio.comlogin

    nico

    twitter

    @nromanetti

    mobile

    0612345678

    tl. fixe

    0495123456

    Pas de contraintes sur les colonnes...

    row key

    row

    column

    col. value

    col. name

    Exemple

    vendredi 6 janvier 12

  • granados@wmaker.netlogin

    jgrana

    facebook

    http://www.facebook.com/jerome.granados

    nromanetti@jaxio.comlogin

    nico

    twitter

    @nromanetti

    mobile

    0612345678

    tl. fixe

    0495123456

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

    col. Family row key col. name col. value

    User

    Table en relationnel

    Column Family

    vendredi 6 janvier 12

  • Le nom est une valeur

    Le nom de la colonne est aussi une valeur! Les colonnes sont tries par leur nom Choix de la stratgie de tri (comparator)

    Long, UTF8, Byte, etc...

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

    XK_4501_2012_01_06

    6:55

    dcollage face la mer

    7:00

    survol Capo di Feno

    7:20

    survol Cannes etc...

    vendredi 6 janvier 12

  • rowkeyA

    wmaker

    Liens

    date

    2011/12/31 10:52

    2012/01/01 23:12

    rowkeyB

    2012/01/06 11:11

    rowkeyC etc...

    BlogEntries

    BlogEntry Content

    En cette fin danne....

    Title

    Bye bye 2011 etc...

    2011/12/31 10:52

    rowkeyA

    vendredi 6 janvier 12

  • 2012/01/02

    Valueless column

    093:toto 105:titi 106:tutu etc...

    TopScores

    Le nom de la colonne porte lui seul linformation ici: le score suivi du username

    Intrt? performance...

    vendredi 6 janvier 12

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

    Super Column

    Une column contenant des columns grouper des informations dpendantes

    granados@wmaker.net

    login

    jgrana

    twitter

    WM_Jerome

    ville

    Ajaccio

    Supercol. Family

    row key supercol. name

    sub col. name

    subcol. value

    vendredi 6 janvier 12

  • Column avec plusieurs donnes

    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 rcente Permet dincrmenter un compteur distribu

    vendredi 6 janvier 12

  • Tombstone

    Delete se fait en crivant une colonne spciale! Timestamp fait foi

    vendredi 6 janvier 12

  • 2 usages pour les rows

    Wide Row: Contient des milliers, millions de colonnes...

    donnes temporelles (timeline twitter, logs, etc...)

    Skinny Row: En contient moins

    vendredi 6 janvier 12

  • Requtes sur les colonnes

    Pas de join! On rcupre une Slice de column

    ex: toutes les colonnes entre n5 et n2323

    Row Keyn1

    qqchose

    n2

    qqchose

    n5

    qqchose

    n1033

    qqchose

    n2323

    qqchose

    n33444

    qqchose

    Slice

    ...

    Concevoir son modle de donnes en fonction des requtes que lon veut faire

    vendredi 6 janvier 12

  • Secondary Index

    Index sur la valeur dune colonne Exemple: index sur la valeur de la column country get users where country = 'FR';

    nromanetti@jaxio.comcountry

    FR

    twitter

    @nromanetti

    tl. fixe

    0495123456

    vendredi 6 janvier 12

  • Rvisions :)

    column (normale ou super) wide row, skinny row column family requtes (column slice) / secondary index valueless column liens tombstone

    vendredi 6 janvier 12

  • Rplication

    Pour assurer la disponibilit des donnes, il faut les rpliquer Replication Factor (RF): nombre de replicas (copies)

    node* 1 node 2 node 3 node 4 node 5

    une donne

    RF = 3

    une autre donne une Replica* node = serveur

    vendredi 6 janvier 12

  • Rpliquer, mais o?

    Tous les serveurs sont identiques Postulats:

    1 row doit tenir sur 1 serveur On veut rpartir les rows uniformment

    vendredi 6 janvier 12

  • tokenB

    f(keyB)

    f(keyA)

    Consistent Hashing

    row keyA

    Consistent Hash

    0

    (2^127) / 2 10^38

    bytese.g. String

    row keyB

    Un token entre0 et 2^127

    tokenA

    vendredi 6 janvier 12

  • tokenA

    Cassandra Ring

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    token range

    token1=1*(2^127)/8

    token2=2*(2^127)/8

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

    tokenB

    A chaque noeud on attribut un numro de token

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

    vendredi 6 janvier 12

  • Stratgie de placement

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0tokenB

    1re replica de la row tokenB

    2me replica...

    3me replica...

    tokenA

    RF = 3

    RandomPartioner: Rpartir uniformment les diffrentes rows entre les serveurs

    Placement Strategy: par dfaut, sur les noeuds suivants

    vendredi 6 janvier 12

  • Ecriture

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client1 2

    1: le client contacte nimporte quel noeud

    2: le noeud contact (a.k.a. storage proxy) sert de coordinateur

    Note: Le client peut disposer dune pool de connexions vers quelques noeuds.

    Le client ne sait pas o la donne sera crite

    RF = 3

    vendredi 6 janvier 12

  • Ecriture

    Update On cre!

    Delete Cre la column sous forme de Tombstone

    Le timestamp le plus rcent fait foi

    password

    xyz

    10000

    password

    abc

    20000

    password

    30000

    createupdate delete

    3 columns!

    vendredi 6 janvier 12

  • Ecriture

    Comment le client sassure-t-il que la donne est effectivement crite et rplique?

    Attendre une rponse de tous les serveurs impliqus?

    Ne pas attendre? En pratique, cela dpend du use-case

    Solution: Tuneable Consistency

    vendredi 6 janvier 12

  • Tuneable Consistency

    En criture, le client indique le Consistency Level dsir

    ONE: Je veux tre certain quau moins une replica a t persiste durablement

    QUORUM: Je veux tre certain que la majorit des replicas ont t persistes durablement

    ALL: Je veux tre certain que toutes les replicas ont t persistes durablement

    vendredi 6 janvier 12

  • Consistency Level ONE

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    Success

    RF = 3write en asynchrone

    vendredi 6 janvier 12

  • N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client

    X

    RF = 3

    Consistency Level ONE

    puis, en background...

    vendredi 6 janvier 12

  • Consistency Level QUORUM

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    Failure X

    RF = 3

    vendredi 6 janvier 12

  • Consistency Level QUORUM

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    Success

    RF = 3

    vendredi 6 janvier 12

  • Consistency Level ALL

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    RF = 3

    Failure

    X

    vendredi 6 janvier 12

  • Consistency Level ALL

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    Success

    RF = 3

    vendredi 6 janvier 12

  • Hinted Handoff

    Quid du noeud sur lequel nous navons pas pu crire? Lorsquun noeud est indisponible le noeud

    coordinateur crit la donne 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

    N1

    N2

    N3

    N4

    N5

    N6

    N7

    N0

    Client write

    Success

    RF = 3CL=QUORUM

    hint

    vendredi 6 janvier 12

  • Hinted Handoff

    N1

    N2

    N3

    N4

    N5

    N6