LES BASES NOSQL Philippe Lacomme placommeisima fr Tel
LES BASES NOSQL Philippe Lacomme placomme@isima. fr Tel. 04 73 40 75 85
Source… principale Philippe Lacomme placomme@isima. fr 04 73 40 75 85 Maître de conférences ISIMA http: //www. isima. fr/~lacomme/No. SQL/
4 enjeux • Stocker (Comment ? ) • Extraire (fouille de données) • Restituer • Exploiter les données (nouvelle valorisation) 3
Trois éléments • bases de données non relationnelles, appelées à tort No. SQL ; • un système de distribution des traitements ; • un système de stockages de données en mémoire pour accélérer les traitements. 4
Trois éléments 5
Autrefois…. Dans notre vieux temps 6
L’approche classique LIVRE AUTEUR 7
L’approche classique 8
Problème 1 9
Problème 2 10
La vraie vie. . . Naissance Modification 11
La vraie vie. . . Durée de vie Modifications permanentes Un besoin 2015 Mise en prod. 2016 2017 2018 Nouvelles données Modification du MCD 12
Bilan • MCD/MLD base relationnelle • Adaptée au cas où les données ne changent que rarement de structure 13
Une solution : base No. SQL 14
Existant 15
Existant 16
Principe e 1 a 2 a 3 e 2 a 1 a 2 a 3 V 1 V 2 V 3 W 1 W 2 W 3 17
Principe 18
LA SOLUTION NÉO 4 J
Positionnement Une base de données = un graphe Une entité Une relation 20
Installation 21
Connexion 22
Ajout d’informations 23
Les informations structurées 24
Ajout d’informations structurées 25
Ajout d’informations structurées Node first. Node = graph. Db. create. Node(); Node second. Node = graph. Db. create. Node(); Node Troisieme. Node = graph. Db. create. Node(); Person une_personne = new Person(first. Node); une_personne. ajouter("Tintin", "Pierre", "Clermont", "0102"); une_personne. afficher(); Person une_personne 2 = new Person(second. Node); une_personne 2. ajouter("Milou", "Thierry", "Paris", "0101"); une_personne 2. afficher(); Person une_personne 3 = new Person(Troisieme. Node); une_personne 3. ajouter("Castafiore", "Marie", "Paris", "0901"); une_personne 3. afficher(); 26
Visualisation et interrogation de la base 27
Visualisation de la base 28
Résultat 29
Editeur Cypher http: //docs. neo 4 j. org/chunked/milestone/cypher-query-lang. html. 30
Mongo. DB 31
Connexion try { Mongo. Client mongo. Client = new Mongo. Client(); DB db = mongo. Client. get. DB("bibliotheque"); // Code } catch(Exception E) { System. out. println(E. get. Message()); } 32
Le modèle classique Livre Auteur 33
Insertion d’information 34
Liens table/collection DBCollection coll_livre = db. get. Collection("Livre"); Basic. DBObject db. Object_Livre = new Basic. DBObject(); db. Object_Livre. put("Numero", "10101"); db. Object_Livre. put("Titre", "aaaaa"); db. Object_Livre. put("Prix", 10); coll_livre. insert(db. Object_Livre); 35
Mongo. DB et le Cloud 36
Mongo. DB et Hadoop 1. Liste des fichiers ". jar" à copier dans le répertoire "lib" d'Hadoop 2. Accéder à une base 37
ORACLE No. SQL 38
Démonstration Serveur ping Client 39
Vérification de l’environnement C: oracleCEkv-ce-2. 0. 39 kvclient. jar 40
Création d’un rep. de travail 41
Ajouter String key. String 1 = "85478"; String value. String 1 = "Castafiore"; Key une_cle 1 = Key. create. Key(key. String 1); Value une_valeur 1 = Value. create. Value(value. String 1. get. Bytes()); store. put(une_cle 1, une_valeur 1); 42
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 my. Key = Key. create. Key(tableau_des_cles_de_recherche); Value my. Value = Value. create. Value(un_auteur. to. String(). get. Bytes()); store. put(my. Key, my. Value); 43
LA SOLUTION REDIS
Installation 45
Un couple clé/valeur package testjedis; import redis. clients. jedis. *; public class Test. Jedis { public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); jedis. set("Durant", "Mon premier roman"); String value = jedis. get("Durant"); System. out. println("value= "+value); } } 46
Manipulation d’une liste package testjedis; import redis. clients. jedis. *; import java. util. List; public class Test. Jedis { public static void main(String[] args) { Jedis jedis = new Jedis("localhost"); jedis. rpush("message_java", "Bienvenue dans Redis"); jedis. rpush("message_java", "Ceci est un chapitre introductif"); jedis. rpush("message_java", "les exemples sont simples"); List<String> value = jedis. lrange("message_java", 0, 2); for (int i=0; i<value. size(); i++) System. out. println("value numero "+ i +" = "+value. get(i)); } } 47
Principes communs 48
Principe : accès direct T : Tableaux associatifs clé T[i] accès en O(1) 49
Magique ou non ? 50
Un énoncé « classique » 51
Magique ou non ? 52
Magique ou non ? http: //www. datastax. com/wpcontent/themes/datastax-201408/files/No. SQL_Benchmarks_End. Point. 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) 54
Questions ? 55
- Slides: 55