0% ont trouvé ce document utile (0 vote)
19 vues61 pages

ECAM NoSQL4MIN Cours3 Slides

Le document présente le modèle de base de données orienté-colonnes, en se concentrant sur des systèmes comme Cassandra et HBase. Il aborde les principes de stockage, les types de requêtes, ainsi que les avantages et inconvénients de ce modèle par rapport aux bases de données relationnelles. Enfin, il détaille l'architecture et l'installation de HBase, une implémentation de BigTable, en soulignant son intégration avec Hadoop.

Transféré par

victor dievi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
19 vues61 pages

ECAM NoSQL4MIN Cours3 Slides

Le document présente le modèle de base de données orienté-colonnes, en se concentrant sur des systèmes comme Cassandra et HBase. Il aborde les principes de stockage, les types de requêtes, ainsi que les avantages et inconvénients de ce modèle par rapport aux bases de données relationnelles. Enfin, il détaille l'architecture et l'installation de HBase, une implémentation de BigTable, en soulignant son intégration avec Hadoop.

Transféré par

victor dievi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

I404C NoSQL

Séance 3
Modèle orienté-colonnes
Cassandra, HBase

Sébastien Combéfis 2019


Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Rappels

Modèle de base de données orienté clé-valeur

Définition et principe du stockage de paires clé-valeur


Moteur Riak avec les buckets
Base de données en RAM avec moteur Memcached
Moteur Redis et types de données spécifiques

Modèles de distribution des données sur un cluster

Sharding et répartitions des données sur des nœuds


Réplication et copies des données sur des nœuds
Approches hybrides combinant le sharding et la réplication

3
Objectifs

Le modèle orienté-colonnes

Stockage sur disque de lignes ou colonnes


Le modèle de données
Principaux types de requêtes

Exemples de bases de données orientée-colonnes

HBase
Cassandra

4
Modèle orienté-colonnes
Famille de colonnes (1)

Base de données orientée-colonnes proche des relationnelles


Comportent des colonnes avec un type de données

Suit l’approche BigTable apportée par Google


Et dont HBase est une implémentation open source

Accès rapide aux données et très bonne scalability


En particulier avec Cassandra et une distribution peer-to-peer

6
Famille de colonnes (2)

Ensemble de clés de ligne et de familles de colonnes


Organisation d’une base sous forme de plusieurs tables

Regroupement des données souvent accédées ensemble


Chaque famille de colonnes est une map de données

7
Ligne vs colonne (1)

Stockage sur disque par tuples ou par colonnes


Initialement uniquement une question de stockage

Les requêtes ne concernent souvent pas toutes les colonnes


Récupération directe de colonnes depuis le disque plus efficace

ID Firstname Class ID Firstname Class

16139 Alexis 3BE 16139 Alexis 3BE

10003 Damien 5MIN


10003 Damien 5MIN

Stockage de lignes Stockage de colonnes

8
Ligne vs colonne (2)

Choix du stockage sur disque pour l’efficacité des opérations

Stockage de lignes efficace pour les écritures


Stockage de colonnes efficace pour les lectures

Lecture de quelques colonnes de beaucoup de lignes


Améliore les performances des requêtes de sélection

Stockage de lignes Stockage de colonnes


+ Facile d’ajouter un enregistrement Seules les données voulues sont lues
− Lecture de données inutiles Écriture d’un tuple nécessite plusieurs accès

9
C-Store (1)

Stockage des données de la base en colonnes


Créé par les universités Brown, Brandeis, MIT et UMass Boston

Basé sur le modèle relationnel et utilise SQL


Ne fait pas partie de la sphère NoSQL, mais va l’inspirer

Deux espaces de stockage différents sur le disque


Pour optimiser au mieux les opérations de lecture et écriture

10
C-Store (2)

ROS (Read Optimized Store)

Stockage de fichiers contenant des colonnes


Compression des fichiers selon le type de données inclus
Données triées selon un attribut de la table de la colonne

WOS (Write Optimized Store)

Buffer temporaire utilisé lors d’écritures (INSERT, UPDATE)


Pas de compression et pas de partitionnement vertical

11
C-Store (3)

Migration régulière des données du WOS vers le ROS


Réalisé par un tuple mover qui est autorisé à écrire dans le ROS

Les requêtes doivent pouvoir agir sur les deux stores

Insertions directement envoyées au WOS


Suppression marquée dans ROS, puis gérée par tuple mover
Update est une combinaison d’insertion et suppression

tuple mover
WOS ROS

12
Ligne vs colonne (3)

Pas de meilleur choix absolu entre lignes ou colonnes


Tout dépend du type d’opération effectuée

Lignes Colonnes
Agrégation d’éléments d’une colonne Lent Rapide
Compression – Haute
Sélection de quelques colonnes Lent (skip de données) Rapide
Insertion/Mise à jour Rapide Lent
Sélection d’un enregistrement Rapide Lent

13
Modèle de données (1)

Une base orientée-colonnes est un map à deux niveaux


Plutôt qu’une structure en tables organisées par colonnes

Au premier niveau, une paire clé-valeur identifie une ligne


La clé est un identificateur de ligne

Au second niveau, une map de colonnes formant des familles

Nombre arbitraire de paires clé-valeur par ligne


Les familles permettent un accès commun à des colonnes

14
Modèle de données (2)

Structure à deux niveaux combinant lignes et colonnes


Ligne est la jointure des enregistrements des familles de colonnes

Firstname Alexis

Class 3BE Famille de colonne

Age 22

16139

Clé de ligne [Link]. {’grade’ : 15, ’credits’ : 5}

[Link] {’grade’ : 18, ’teacher’ : ’Lurkin’}

Electromech. {’teacher’ : ’Kimplaire’, ’credits’ : 5}

Thermo {}

Clés de colonne

15
Modèle de données (3)

Base orientée-colonnes ne sont pas vraiment des tables

On peut ajouter des colonnes à n’importe quelle ligne


Les lignes peuvent avoir des clés de colonnes différentes

Définir de nouvelles familles de colonnes est rare


Alors que l’ajout de colonnes peut se faire à la volée

Deux types de lignes selon le nombre de colonnes

Skinny row quelques colonnes et les mêmes partout (field-like)


Wide row avec des milliers de colonnes (list-like)

16
Table vs Colonne

Base orientée-colonnes permet d’éviter la présence de NULL


Chaque ligne ne possède que les colonnes qu’elle doit avoir

Matricule [Link] [Link]. Electromech. Python Thermo


16139 18 15 – NULL –
10003 NULL NULL 12 8 –

16139

[Link]. 15 10003

[Link] 18 Python 8

Electromech. – Thermo –

Thermo – Electromech. 12

17
Avantages des colonnes

Lecture efficace des données des seules colonnes demandées


Attention à la reconstruction des tuples lorsqu’on lit tout

Meilleur taux de compression, mais utilisation du CPU


Moins d’entropie puisque toutes les données du même domaine

Efficacité du tri et de l’indexation des données


Par stockage redondant grâce à l’espace gagné par compression

18
Projection (1)

Possibilité d’avoir des projections stockées physiquement


Permet d’améliorer les performances pour des types de requêtes

Table logique Super-projection


Region Client Produit Vente Region A B D C A
A G C 789 Client G C F C R
B C C 743 Produit C C D A B
D F D 675 Vente 789 743 675 23 654
C C A 23
A R B 654

19
Projection (2)

Projections peuvent êtres triées sur une ou plusieurs colonnes


Améliore les performances pour requêtes SORT et GROUP BY

Table logique Projection 1


Region Client Produit Vente Region A A B C D
A G C 789 Produit B C C A D
B C C 743 Vente 654 789 743 23 675
D F D 675
C C A 23
A R B 654 Facilite des requêtes du style
SELECT Region, Produit, SUM(Vente)
GROUP BY Region, Produit

20
Projection (3)

Peuvent être créées manuellement ou on-the-fly


Un peu la même logique que d’avoir des vues matérialisées

Table logique Projection 2


Region Client Produit Vente Client C C F G R
A G C 789 Vente 743 23 675 789 654
B C C 743
D F D 675
C C A 23 Facilite des requêtes du style
A R B 654
SELECT Client, SUM(Sales)
GROUP BY Client

21
Compression (1)

Run-Length Encoding sur les valeurs dans les colonnes


Pratique lorsque beaucoup de données similaires

Quadri Produit Prix Quadri Produit Prix


Q1 1 5 (Q1, 1, 300) (1, 1, 4) 5
Q1 1 7 (Q2, 301, 350) (2, 5, 2) 7
Q1 1 2 ... ... 2
Q1 1 9 (1, 301, 2) 9
Q1 2 6 (2, 303, 1) 6
Q1 2 8 ... 8
... ... ... ...
Q2 1 3 3
Q2 1 8 8
Q2 2 1 1
... ... ... ...

22
Compression (2)

Bit-Vector Encoding pour chaque valeur unique des colonnes


Pratique lorsque peu de valeurs uniques, RLE en plus possible

Produit Produit : 1 Produit : 2


1 1 0
1 1 0
1 1 0
1 1 0
2 0 1
2 0 1 ...
... ... ...
1 1 0
1 1 0
2 0 1
... ... ...

23
Compression (3)

Dictionnaire pour chaque valeur ou bloc de valeurs


Pratique lorsque répétitions de motifs

Quadri Quadri Dico Quadri Dico


Q1 0 0 : Q1 24 24 : Q1, Q2, Q4
Q2 1 1 : Q2 OU 128 + 122 : Q1, Q1, Q3
+
Q4 3 2 : Q3 122 128 : Q1, Q3, Q1
Q1 0 3 : Q4
Q3 2
Q1 0
Q1 0
Q1 0
Q2 1
... ...

24
Cas d’utilisation

Stockage de logs d’évènements


Changement d’états ou erreurs relevés dans une application

Billets d’un blog dans le cadre d’un CMS


Tags, catégories, liens... dans différentes colonnes d’une famille

Compter et catégoriser les visiteurs d’une page web


Utilisation d’une colonne particulière de type compteur

25
Cas de non utilisation

Problèmes pour qui ACID doit être satisfait en lecture/écriture


Ne permet pas de faire des transactions ACID

Requêtes d’agrégation des données (SUM, AVG...)


Nécessite d’abord de rapatrier toutes les rangées côté client

Ne pas utiliser dans une phase de prototypage


Le design des familles de colonnes change avec les requêtes à faire

26
HBase
HBase

Implémentation libre du moteur BigTable de Google


Fait partie du projet Hadoop de Apache

Exécution par dessus le système de fichiers HDFS


Stockage de données creuses en étant tolérant aux pannes

Une base peut servir d’input/output de MapReduce (Hadoop)


Couche SQL possible grâce à Apache Phoenix

28
Modèle de données

Ensemble de familles de colonnes versionnées


Colonnes d’une famille stockées ensemble dans un HFile

Table

Clé Famille

Colonne Colonne HFile


Colonne Colonne
Colonne Colonne

Famille

Colonne Colonne HFile


Colonne Colonne
Colonne Colonne

Chemin pour trouver une valeur : Table → Clé → Famille → Colonne → Timestamp
29
Architecture (1)

Basé sur Hadoop et HDFS pour distribuer le stockage


Combinaison de sharding et de réplication

Sharding réalisé par des serveurs de région


Découpe en plusieurs régions lorsqu’une table devient trop grosse

Réplication assurée automatiquement par HDFS


Fichier découpé en blocs répliqués avec un certain facteur

30
Architecture (2)

Les données écrites passent par plusieurs étapes

Première gestion dans un WAL (Write-Ahead Log)


Placement des données dans un buffer nommé memstore

Memstore écrit dans un HFile sur le HDFS lorsque trop gros


Ensemble trié de clé-valeur sérialisé sur disque et immuable

Suppression gérées à l’aide d’un marqueur tombstone


Suppression effective au moment d’un compactage

31
Installation de HBase

HBase est un programme développé en Java

Plusieurs programmes proposés après installation

start-hbase est un script de lancement d’un serveur HBase


stop-hbase est un script de terminaison d’un serveur HBase
hbase permet de lancer plusieurs commandes de gestion

hbase shell propose un client en ligne de commande


hbase thrift démarre la passerelle Thrift

32
Lancement du serveur

Lancement du serveur et vérification de la connexion


Utilisation de status pour vérifier que tout va bien

& start - hbase . sh

& hbase shell


HBase Shell ; enter ’ help < RETURN > ’ for list of supported commands .
Type " exit < RETURN >" to leave the HBase Shell
Version 1.2.2 , r 3 f 6 7 1 c 1 e a d 7 0 d 2 4 9 e a 4 5 9 8 f 1 b b c c 5 1 5 1 3 2 2 b 3 a 1 3 , Fri Jul
1 [Link] CDT 2016

hbase ( main ) :001:0 > status


1 active master , 0 backup masters , 1 servers , 0 dead , 2.0000
average load

33
Création d’une table

Création d’une nouvelle table avec la commande create


Spécification des familles de colonnes avec le nombre de versions

hbase ( main ) :002:0 > create ’ students ’ , { NAME = > ’ infos ’ , VERSIONS
= > 1} , { NAME = > ’ registrations ’ , VERSIONS = > 2}
0 row ( s ) in 1.2230 seconds

= > Hbase :: Table - students

hbase ( main ) :003:0 > list


TABLE
students
1 row ( s ) in 0.0630 seconds

= > [" students "]

34
Ajout d’une ligne

Ajout des valeurs des différentes colonnes avec put


En précisant chaque fois la famille de colonnes

hbase ( main ) :004:0 > put ’ students ’ , ’16139 ’ , ’ infos : firstname ’ , ’


Alexis ’
0 row ( s ) in 0.1350 seconds

hbase ( main ) :005:0 > put ’ students ’ , ’16139 ’ , ’ infos : age ’ , ’22 ’
0 row ( s ) in 0.0120 seconds

hbase ( main ) :006:0 > put ’ students ’ , ’16139 ’ , ’ registrations : class


’ , ’3 BE ’
0 row ( s ) in 0.0110 seconds

hbase ( main ) :007:0 > get ’ students ’ , ’16139 ’


COLUMN CELL
infos : age timestamp =1477172359150 , value =22
infos : firstname timestamp =1477172339414 , value = Alexis
registrations : class timestamp =1477172463762 , value =3 BE
3 row ( s ) in 0.0750 seconds

35
Nouvelle version d’une colonne

On peut récupérer les différentes versions d’une colonne


Utilisation de paramètres de la commande get

hbase ( main ) :008:0 > put ’ students ’ , ’16139 ’ , ’ registrations : note ’ ,


’ Pasterelle 4M ’
0 row ( s ) in 0.0030 seconds

hbase ( main ) :009:0 > put ’ students ’ , ’16139 ’ , ’ registrations : note ’ ,


’ Passerelle 4M ’
0 row ( s ) in 0.0030 seconds

hbase ( main ) :010:0 > get ’ students ’ , ’16139 ’ , { COLUMN = > ’


registrations : note ’ , VERSIONS = > 2}
COLUMN CELL
registrations : note timestamp =1477173105470 , value =
Passerelle 4 M
registrations : note timestamp =1477173102196 , value =
Pasterelle 4 M
2 row ( s ) in 0.0110 seconds

36
Module Python happybase

Module Python happybase pour interroger la base


Passerelle thrift à démarrer avec hbase thrift start

1 import happybase
2
3 connection = happybase . Connection ( ’ localhost ’)
4 print ( connection . tables () )
5
6 table = connection . table ( ’ students ’)
7 print ( table )

[b ’ students ’]
< happybase . table . Table name =b ’ students ’ >

37
Insertion de colonnes

Insertion de colonnes avec la méthode put de la table


Les différentes colonnes sont fournies par un dictionnaire

Récupération des colonnes d’une ligne avec la méthode row

1 table . put ( ’ 10003 ’ , {


2 ’ infos : firstname ’: ’ Damien ’ ,
3 ’ infos : sex ’: ’M ’ ,
4 ’ registrations : class ’: ’5 MIN ’
5 })
6 print ( table . row ( ’ 10003 ’) )

{b ’ infos : sex ’: b ’M ’ , b ’ infos : firstname ’: b ’ Damien ’ , b ’


registrations : class ’: b ’5 MIN ’}

38
Récupération de colonnes

Récupération d’une ligne avec row et plusieurs avec rows


On peut filter uniquement les colonnes que l’on désire

1 users = [ b ’ 16139 ’ , b ’ 10003 ’]


2 classes = {}
3 rows = table . rows ( users , columns =[ b ’ infos : firstname ’ , b ’
registrations : class ’ ])
4 for key , value in rows :
5 students = classes . setdefault ( value [ b ’ registrations : class ’] ,
set () )
6 students . add ( value [ b ’ infos : firstname ’ ])
7 print ( classes )

{b ’5 MIN ’: {b ’ Damien ’} , b ’3 BE ’: {b ’ Alexis ’}}

39
Cassandra
Cassandra

Développé à l’origine par Facebook et libéré en 2008


Fait maintenant partie du giron de Apache

Base rapide et scalable, réplication peer-to-peer sur le cluster


Serveurs puissance moyenne, pas d’unique point de défaillance

Langage d’interrogation Cassandra Query Language (CQL)


Variante du SQL pour interroger les keyspaces Cassandra

41
Modèle de données

Ensemble de familles de colonnes contenant des lignes


Les lignes peuvent contenir différentes colonnes de la famille

Famille de colonnes
Ligne

Colonne 1 Colonne 2 Colonne N


Clé de ligne 1
name1:value1 name2:value2 nameN:valueN

Ligne

Colonne 1 Colonne 4 Colonne N


Clé de ligne 2
name1:value1 name4:value4 nameN:valueN

42
Colonne

Une colonne est une paire nom-valeur avec un timestamp


Le nom de la colonne joue également le rôle de clé

Le timestamp définit la durée de vie de la colonne


Et résolution de conflits d’écriture, données périmées...

1 {
2 name : " Firstname " ,
3 value : " Alexis " ,
4 timestamp : 1234567890
5 }

1 {
2 name : " Class " ,
3 value : " 3 BE " ,
4 timestamp : 1234567890
5 }

43
Famille de colonnes standard

Une ligne est une collection de colonnes


Une clé est attachée à cette collection de colonnes

Une famille de colonnes est une collection de lignes similaires


Les colonne sont simples, juste un nom et une valeur

1 {
2 alexis : { # ligne avec 3 colonnes , clé " alexis "
3 Firstname : " Alexis " ,
4 Class : " 3 BE " ,
5 Age : 22
6 },
7 damien : { # ligne avec 3 colonnes , clé " damien "
8 Firstname : " Damien " ,
9 Class : " 5 MIN " ,
10 Sex : " M "
11 }
12 }

44
Super colonne

La valeur d’une super colonne est un map


« Plusieurs colonnes » comme valeur d’une colonne

Une super colonne est un conteneur de colonnes


Chaque colonne contenue possède un timestamp

1 {
2 name : " E3060 " ,
3 value : {
4 name : " Electronique analogique " ,
5 coordinator : " Gueuning " ,
6 credits : 5
7 },
8 timestamp : 1234567890
9 }

45
Famille de super colonnes

Une famille de super colonnes rassemble des super colonnes


Attention que Cassandra rapatrie tout, pas toujours optimal

1 {
2 3 BE : {
3 E3060 : {
4 name : " Electronique analogique " ,
5 coordinator : " Gueuning " ,
6 credits : 5
7 },
8 E3090 : {
9 name : " Electroméc a n i q u e appliquée " ,
10 coordinator : " Kimplaire " ,
11 credits : 5
12 }
13 },
14 5 MIN : {
15 I4020 : {
16 name : " Architecture logicielle " ,
17 credits : 3
18 }
19 }
20 }
46
Keyspace

Cassandra organise les familles de colonnes en keyspaces


Agit comme un espace de nom pour les familles de colonnes

Similaire à la notion de base des moteurs relationnels


Rassemblement des familles liées à une même application

47
Installation de Cassandra

Cassandra est un programme développé en Java

Plusieurs programmes proposés après installation

cassandra permet de démarrer un serveur Cassandra


cqlsh est un client en ligne de commande
nodetool donne des informations sur le serveur Cassandra

48
Lancement du serveur

Lancement du serveur et vérification de la connexion


Indication immédiate de si un serveur a été trouvé

& cassandra

& cqlsh
Connected to Test Cluster at localhost :9042.
[ cqlsh 5.0.1 | Cassandra 3.7 | CQL spec 3.4.2 | Native protocol
v4 ]
Use HELP for help .
cqlsh >

49
Exécution d’une requête

Obtention d’informations sur le cluster avec une requête CQL


Récupération d’informations à partir de la table [Link]

Similarité très grande avec les requêtes SQL

cqlsh > SELECT cluster_name , list en_addre ss FROM system . local ;

cluster_name | listen _addres s


- - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -
Test Cluster | [Link]

(1 rows )

50
Information sur la base

Obtention d’informations avec la commande DESCRIBE


Description du cluster, des keyspaces, tables...

cqlsh > DESCRIBE CLUSTER ;

Cluster : Test Cluster


Partitioner : M ur m ur 3 P a r t i t i o n e r

cqlsh > DESCRIBE KEYSPACES ;

system_traces system_schema system_auth system


s y s t e m _d i st ri b ut e d

cqlsh > DESCRIBE TABLES ;

Keyspace system_traces
----------------------
events sessions
[...]

51
Création d’un keyspace

Création d’un nouveau keyspace avec CREATE KEYSPACE


Configuration des propriétés du keyspace, par exemple réplication

Exemple avec simple réplication avec un facteur donné

cqlsh > CREATE KEYSPACE myschool


... WITH replication ={ ’ class ’: ’ SimpleStrategy ’ , ’
replication_factor ’: 3};

cqlsh > DESCRIBE keyspaces ;

myschool system_schema system_auth system system_distributed


system_traces

cqlsh > USE myschool ;


cqlsh : myschool >

52
Création d’une table

Création d’une nouvelle table avec CREATE TABLE


Définition des différentes colonnes de la table

Clé primaire pour identifier les lignes de manière unique

cqlsh : myschool > CREATE TABLE students (


... serial int PRIMARY KEY ,
... firstname text ,
... class text ,
... age int ,
... sesque text
... );

cqlsh : myschool > SELECT * FROM students ;

serial | age | class | firstname | sesque


- - - - - - - -+ - - - - -+ - - - - - - -+ - - - - - - - - - - -+ - - - - - - - -

(0 rows )

53
Ajout et suppression de colonnes

La structure d’une table est modifiable avec ALTER TABLE


Possibilité d’ajouter et de supprimer des colonnes

Exemple de correction de la colonne sesque en sex

cqlsh : myschool > ALTER TABLE students DROP sesque ;

cqlsh : myschool > ALTER TABLE students ADD sex text ;

cqlsh : myschool > SELECT * FROM students ;

serial | age | class | firstname | sex


- - - - - - - -+ - - - - -+ - - - - - - -+ - - - - - - - - - - -+ - - - - -

(0 rows )

54
Ajout d’une ligne

Ajout d’une ligne dans la table avec INSERT INTO


Spécification des colonnes pour lesquelles on a une valeur

Exemple d’ajout d’Alexis dans la table students

cqlsh : myschool > INSERT INTO students ( serial , firstname , class ,


age )
... VALUES (16139 , ’ Alexis ’ , ’3 BE ’ , 22) ;
cqlsh : myschool > SELECT * FROM students ;

serial | age | class | firstname | sex


- - - - - - - -+ - - - - -+ - - - - - - -+ - - - - - - - - - - -+ - - - - - -
16139 | 22 | 3 BE | Alexis | null

(1 rows )

55
Autres opérations CRUD

Trois autres opérations CRUD comme en SQL

Mise à jour de lignes


UPDATE table SET n1=v1, n2=v2... WHERE cond
Lecture de lignes
SELECT c1, c2... FROM table WHERE cond
Suppression de lignes
DELETE c1, c2... FROM table WHERE cond

Opération sur une seule ligne avec une condition sur sa clé
Ne pas spécifier c1, c2... agit sur toute une colonne

56
Module Python cassandra

Module Python cassandra pour interroger la base


Création d’un cluster et connexion sur un keyspace

1 from cassandra . cluster import Cluster


2
3 cluster = Cluster ([ ’ [Link] ’ ])
4 session = cluster . connect ( ’ myschool ’)
5
6 print ( cluster )
7 print ( session )

< cassandra . cluster . Cluster object at 0 x1096af240 >


< cassandra . cluster . Session object at 0 x10a6bed30 >

57
Exécution d’une requête

Utilisation de la méthode execute sur la session


Exécuter une requête CQL et récupérer un tuple nommé

La colonne class ne sera pas accessible comme un champ


Car en conflit avec la propriété class de Python

1 rows = session . execute ( ’ SELECT * FROM students ’)


2 for row in rows :
3 print ( row )
4 print ( ’= > {} ({} ans ) ’. format ( row . firstname , row . age ) )

Row ( serial =16139 , age =22 , field_2_ = ’3 BE ’ , firstname = ’ Alexis ’ , sex


= None )
= > Alexis (22 ans )

58
Construction d’une requête

Requête en insérant des valeurs dans une chaine de caractères


Similaire à l’utilisation des chaines formatées

1 session . execute (
2 ’’’
3 INSERT INTO students ( serial , firstname , class , sex )
4 VALUES (% s , %s , %s , % s )
5 ’’’,
6 (10003 , ’ Damien ’ , ’5 MIN ’ , ’M ’)
7 )
8
9 rows = session . execute ( ’ SELECT * FROM students ’)
10 for row in rows :
11 print ( row )

Row ( serial =10003 , age = None , field_2_ = ’5 MIN ’ , firstname = ’ Damien ’ ,


sex = ’M ’)
Row ( serial =16139 , age =22 , field_2_ = ’3 BE ’ , firstname = ’ Alexis ’ , sex
= None )

59
Requête préparée

Construction d’une requête préparée avec la méthode prepare


Exécution ensuite avec la méthode execute

Autoriser la recherche sur une colonne avec ALLOW FILTERING

1 search_class = session . prepare ( ’ SELECT class FROM students WHERE


firstname =? ALLOW FILTERING ’)
2
3 users = [ ’ Sylvain ’ , ’ Alexis ’ , ’ Charles ’ , ’ Damien ’]
4 classes = {}
5 for user in users :
6 rows = session . execute ( search_class , [ user ])
7 for row in rows :
8 students = classes . setdefault ( row [0] , set () )
9 students . add ( user )
10 print ( classes )

{ ’3 BE ’: { ’ Alexis ’} , ’5 MIN ’: { ’ Damien ’}}

60
Crédits

Photos des logos depuis Wikipédia


[Link]
[Link]
[Link]

61

Vous aimerez peut-être aussi