LES BASES NOSQL
Philippe Lacomme
placomme@[Link]
Tel. 04 73 40 75 85
Source… principale
Philippe Lacomme
placomme@[Link]
04 73 40 75 85
Maître de conférences
ISIMA
[Link]
4 enjeux
• Stocker (Comment ?)
• Extraire (fouille de données)
• Restituer
• Exploiter les données (nouvelle valorisation)
Trois éléments
• bases de données non relationnelles,
appelées à tort NoSQL ;
• un système de distribution des traitements ;
• un système de stockages de données en
mémoire pour accélérer les traitements.
Trois éléments
Système de distribution des
traitements
Système de base de
données non relationnelles
Système de stockage en
mémoire (Memtables)
Autrefois….
Dans notre vieux temps
L’approche classique
LIVRE AUTEUR
L’approche classique
Problème 1
Problème 2
La vraie vie...
Naissance
Modification
La vraie vie...
Durée de vie
Modifications permanentes
Un besoin Mise en prod.
2015 2016 2017 2018
Nouvelles données
Modification du MCD
Nouvelles données
Modification du MCD
Bilan
• MCD/MLD base relationnelle
• Adaptée au cas où les données ne
changent que rarement de
structure
Une solution : base NoSQL
Existant
Existant
Principe
a1
a1
a1 a2
a2
a2
E1 R E2
a3
a3
e1 e2 E1
a1 a2 a3 a1 a2 a3 a1
a2
V1 V2 V3 a3
W1 W2 W3
17
Principe
OBJECT
Instance 1
a1=V1
a2=V2
a3=V3
Instance 2 Instance 1
a1=W1 a1=V1
a2=W2 a2=V2
a3=W3 a3=V3
a4=W4
Instance 3
a2=t2
a3=t3
a4=t4 Instance 2
a5=t5 a1=W1
a2=W2
a3=W3
a4=W4
18
LA SOLUTION NÉO4J
Positionnement
Une base de données = un graphe
Une entité
Une relation
Installation
Connexion
Ajout d’informations
Les informations structurées
Ajout d’informations structurées
T_PERSONNE T_PERSONNE
NOM +NOM
PRENOM +PRENOM
VILLE +VILLE
TELEPHONE +TELEPHONE
+LeNoeud_de_Reference
+GetNode_Personne
+GetNom
+GetPrenom
+GetVille
+GetTelephone
+ajouter (nom, prenom, ville, téléphone)
+afficher()
Ajout d’informations structurées
Node firstNode = [Link]();
Node secondNode = [Link]();
Node TroisiemeNode = [Link]();
Person une_personne = new Person(firstNode);
une_personne.ajouter("Tintin", "Pierre", "Clermont", "0102");
une_personne.afficher();
Person une_personne2 = new Person(secondNode);
une_personne2.ajouter("Milou", "Thierry", "Paris", "0101");
une_personne2.afficher();
Person une_personne3 = new Person(TroisiemeNode);
une_personne3.ajouter("Castafiore", "Marie", "Paris", "0901");
une_personne3.afficher();
Visualisation et interrogation de la
base
Visualisation de la base
Résultat
Editeur Cypher
[Link]
MongoDB
Connexion
try
{
MongoClient mongoClient = new MongoClient();
DB db = [Link]("bibliotheque");
// Code
}
catch(Exception E)
{
[Link]([Link]());
}
Le modèle classique
Livre Auteur
Insertion d’information
Liens table/collection
DBCollection coll_livre = [Link]("Livre");
BasicDBObject dbObject_Livre = new BasicDBObject();
dbObject_Livre.put("Numero", "10101");
dbObject_Livre.put("Titre", "aaaaa");
dbObject_Livre.put("Prix", 10);
coll_livre.insert(dbObject_Livre);
MongoDB et le Cloud
36
MongoDB et Hadoop
1. Liste des fichiers ".jar" à copier dans le répertoire "lib" d'Hadoop
2. Accéder à une base
37
ORACLE NoSQL
Démonstration
Serveur
ping
Client
39
Vérification de l’environnement
C:\oracle\CE\kv-ce-2.0.39\
[Link]
40
Création d’un rep. de travail
41
Ajouter
String keyString1 = "85478";
String valueString1 = "Castafiore";
Key une_cle1 = [Link](keyString1);
Value une_valeur1 = [Link]([Link]());
[Link](une_cle1, une_valeur1);
Ajouter
t_auteur un_auteur = new t_auteur();
un_auteur.nom = "Dayre";
un_auteur.prenom = "Pascal";
un_auteur.domicile = "Toulouse";
tableau_des_cles_de_recherche.clear();
tableau_des_cles_de_recherche.add("Dayre");
tableau_des_cles_de_recherche.add("Pascal");
Key myKey = [Link](tableau_des_cles_de_recherche);
Value myValue = [Link](un_auteur.toString().getBytes());
[Link](myKey, myValue);
LA SOLUTION REDIS
Installation
Un couple clé/valeur
package testjedis;
import [Link].*;
public class TestJedis {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
[Link]("Durant", "Mon premier roman");
String value = [Link]("Durant");
[Link]("value= "+value);
}
}
Manipulation d’une liste
package testjedis;
import [Link].*;
import [Link];
public class TestJedis {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
[Link]("message_java", "Bienvenue dans Redis");
[Link]("message_java", "Ceci est un chapitre introductif");
[Link]("message_java", "les exemples sont simples");
List<String> value = [Link]("message_java", 0, 2);
for (int i=0; i<[Link](); i++)
[Link]("value numero "+ i +" = "+[Link](i));
}
}
Principes
communs
Principe : accès direct
T : Tableaux associatifs
clé
T[i] accès en O(1)
Magique ou non ?
Un énoncé « classique »
Magique ou non ?
Magique ou non ?
[Link]
themes/datastax-2014-08/files/
NoSQL_Benchmarks_EndPoint.pdf?2
53
Conclusion
Une nouvelle manière de stocker les données
But : extraire des données présentes mais à ce
jour non exploitées
Pour Restituer
Et au final exploiter les données (nouvelle
valorisation)
Système de distribution des
traitements
Système de base de
données non relationnelles
Système de stockage en
mémoire (Memtables)
Questions ?