Vous êtes sur la page 1sur 7

TP- NOSQL ORIENTE

COLONNES AVEC
CASSANDRA

1.Cassandra
Cassandra1 est une base de données NOSQL orientée colonnes, destinée pour de grands
volumes de données, hétérogènes, de structure et taille évolutives et hautement disponibles, sans
compromettre la performance. Cassandra est utilisée: Twitter, Netflix et eBay .

2. Installer Cassandra
a. Télécharger la dernière version de Cassandra sur:

http://cassandra.apache.org/download/

b. Décompresser simplement le fichier que vous venez de


télécharger.

c. Désormais, on appellera le répertoire obtenu après décompression:


<cass_home>.

3. Démarrer Cassandra
Pour commencer:

a. Lancer le serveur Cassandra. (si on omet le –f, il se lancera en arrière plan)

sudo <cass_home>/bin/cassandra –f
b. Pour arrêter Cassandra, cliquer sur:

Ctrl-C
c. Pour tuer le processus, taper:

pkill -f CassandraDaemon

Page 1
4. CQL : Cassandra Query Language
CQL est l’interface par défaut dans le SGBD Cassandra. C’est un langage SQL-Like, pour la
manipulation des données dans la base.

Nous citons ci-dessous les commandes de base de CQL. Pour plus de détails, consulter le fichier
CQL.html https://cassandra.apache.org/doc/old/CQL-3.0.html

Notions de Base

- Pour se connecter à l’instance locale de CQL

<cass_home>/bin/cqlsh
- Créer un Keyspace :

CREATE KEYSPACE mykeyspace WITH REPLICATION =


{ 'class' : 'SimpleStrategy', 'replication_factor' : 1};
- Afficher l’ensemble des keyspaces:

select * from system.schema_keyspaces;


ou:

describe keyspaces;
- Se connecter au keyspace :

USE mykeyspace;
- Créer une table (il est possible de remplacer le terme TABLE par
COLUMNFAMILY).

CREATE TABLE users (


user_id int PRIMARY KEY,
fname text,
lname text
);
- Afficher les tables existantes:

describe tables;
- Remplir la table:

INSERT INTO users (user_id, fname, lname)


VALUES (1745, 'john', 'smith');

Page 2
- Afficher les données insérées:

SELECT * FROM users;

- Créer un index sur une colonne, puis extraire les données selon cette colonne :

CREATE INDEX ON users (lname);


SELECT * FROM users WHERE lname = 'smith';

- Créer une table avec une clef composée :

CREATE TABLE tab2 (


id1 int, id2
int,
first_name varchar, last_name
varchar, PRIMARY KEY (id1,
id2));
- Ajouter un nouveau champ à la table:

ALTER TABLE users ADD telephone text;


- Modifier la valeur d’un enregistrement:

UPDATE users SET telephone = “21212121”


WHERE user_id=1745;

- Vider une table :


TRUNCATE users;
- Supprimer une table :
DROP users;
5. Les Collections

Dans les bases de données relationnelles traditionnelles, il est fortement déconseillé d’utiliser
des valeurs multiples dans un même champs. Pour cela, il faudrait créer une autre table, et faire
une jointure.

Dans les bases NOSQL, le but ultime est de minimiser au maximum les jointures, pour faciliter
et accélérer la navigation. C’est pour cette raison que des collections comme les sets, listes et
maps sont utilisés.

Page 3
5.1. Sets
Un ensemble (set) est un ensemble non ordonné de valeurs. En utlisant le type de données set,
il est possible de résoudre le problème de champs multiples, comme les emails par exemple.

a. Création

Prenons par exemple le cas d’un ensemble d’emails pour un utilisateur. C’est représenté par un
seul champ, de type set<text>, et est défini dans la table users comme ceci:

CREATE TABLE users (


user_id int PRIMARY KEY,
fname text,
lname text,
emails set<text>
);
b. Insertion

Pour insérer des données dans l’ensemble, placer les valeurs entre accolades et les séparer par
des virgules. Les différentes valeurs dans un ensemble doivent être uniques.

INSERT INTO users (user_id, fname, lname, emails)


VALUES(1234, 'Frodo', 'Baggins',
{'f@baggins.com', 'baggins@gmail.com'});
c. Ajout

Ajouter un élément à un ensemble en utilisant la commande UPDATE :

UPDATE users
SET emails = emails + {'fb@friendsofmordor.org'}
WHERE user_id = 1234;
d. Extraction

Extraire les adresses email comme ceci:

SELECT user_id, emails FROM users WHERE user_id = 1234;


Les données extraites sont retournées par ordre, selon leur type. Par exemple, les données
textuelles sont ordonnées par ordre alphabétique.

e. Suppression

Pour supprimer un élément de l’ensemble, utiliser l’opérateur (-):

UPDATE users SET emails = emails - {'fb@friendsofmordor.org'}

Page 4
WHERE user_id = 1234;
Pour supprimer tout l’ensemble:

UPDATE users SET emails = {} WHERE user_id = 1234;


ou bien :

DELETE emails FROM users WHERE user_id = 1234;


Une fois vidée, une collection (ensemble, liste ou map) est assimilée ainsi à la valeur null.

5.2. Listes
Une liste est utilisée quand l’ordre d’insertion des éléments compte, ou quand on veut pouvoir
insérer la même valeur plusieurs fois.

a. Création

Ajouter une liste des meilleurs endroits visités à la table users.

ALTER TABLE users ADD top_places list<text>;


b. Insertion

UPDATE users
SET top_places = [ 'rivendell', 'rohan' ]
WHERE user_id = 1234;
On remarquera ici que les éléments de la liste sont placés entre crochets.

c. Ajout

Pour ajouter un nouvel élément à la fin de la liste :

UPDATE users
SET top_places = top_places + [ 'mordor' ]
WHERE user_id = 1234;
Pour affecter un élément à un emplacement donné (écrase l’ancienne valeur) :

UPDATE users
SET top_places[1] = 'riddermark' WHERE user_id = 1234;

Quand un élément est ajouté à la fin (ou au début) de la liste, cette dernière n’est pas
lue. On écrit directement la valeur à son emplacement. Par contre, quand un élément est
placé dans une position particulière, Cassandra lit la
liste entière, puis ajoute le nouvel élément, ce qui provoque une plus grande latence.

Page 5
d. Suppression

Supprimer un élément de la liste, en utilisant son index:

DELETE top_places[3] FROM users WHERE user_id = 1234;


Supprimer tous les éléments ayant une valeur donnée d’une liste:

SET top_places = top_places - ['riddermark']


WHERE user_id = 1234;
L’utilisation de cette dernière commande est meilleure que la première, car elle protège contre
les problèmes d’accès concurrent: avec la première méthode, si un autre client ajoute des
éléments à la liste en même temps, on risque de supprimer la mauvaise valeur, ce qui n’est pas
un problème avec la deuxième méthode.

e. Extraction

SELECT user_id, top_places FROM users WHERE user_id = 1234;

5.3. Maps
Une map permet d’associer deux éléments, sous forme de clef/valeur. Elle peut être utilisée, par
exemple, pour sauvegarder les horaires des différents évènements dans un profil utilisateur.

Chaque élément dans une Map est stocké dans Cassandra comme étant une colonne que vous
pouvez modifier, remplacer et requêter.

a. Création

ALTER TABLE users ADD todo map<timestamp, text> ;


b. Insertion

Un élément dans une Map est un couple d’éléments entre accolades, séparés par une
virgule.

UPDATE users SET todo = {


'2012-9-24' : 'enter mordor',
'2012-10-2 12:00' : 'throw ring into mount doom'
} WHERE user_id = 1234;

c. Ajout

Page 6
Ajouter un élément spécifique, en utilisant comme clef la valeur du
timestamp entre crochets:

UPDATE users
SET todo['2012-10-2 12:00'] = 'throw my precious into
mount doom' WHERE user_id = 1234;
Utiliser INSERT pour spécifier des données dans une Map :

INSERT INTO users (user_id,todo) VALUES ( 1234,


{ '2013-9-22 12:01' : 'birthday wishes to Bilbo',
'2013-10-1 18:00' : 'Check into Inn of Prancing Pony'
});
Ceci remplacera toute la Map pour l’utilisateur frodo.

d. Suppression

DELETE todo['2012-9-24'] FROM users WHERE user_id = 1234;


e. Extraction

SELECT user_id, todo FROM users WHERE user_id = 1234;

Page 7