Cours 8 Not Only SQL



Documents pareils
Bases de Données NoSQL

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

OpenPaaS Le réseau social d'entreprise

Optimisations des SGBDR. Étude de cas : MySQL

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Cartographie des solutions BigData

Introduction à ElasticSearch

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Sommaire. 3. Les grands principes de GFS L architecture L accès de fichier en lecture L accès de fichier en écriture Bilan

Les bases de données relationnelles

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Technologies du Web. Ludovic DENOYER - ludovic.denoyer@lip6.fr. Février 2014 UPMC

Haute-disponibilité et bases de données

Du 10 Fév. au 14 Mars 2014

Programmation parallèle et distribuée (Master 1 Info )

Notes de cours : bases de données distribuées et repliquées

Groupe de Discussion Big Data Aperçu des technologies et applications. Stéphane MOUTON

Architectures haute disponibilité avec MySQL. Olivier Olivier DASINI DASINI - -

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation parallèle et distribuée

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Hibernate vs. le Cloud Computing

AVRIL Au delà de Hadoop. Panorama des solutions NoSQL

Programmation parallèle et distribuée

SQL Server Administration d'une base de données transactionnelle avec SQL Server Management Studio (édition enrichie de vidéos)

Cloud Computing Maîtrisez la plate-forme AWS - Amazon Web Services

Notion de base de données

Présentation du module Base de données spatio-temporelles

Introduction à JDBC. Accès aux bases de données en Java

Réplication des données

MODE OPERATOIRE OPENOFFICE BASE

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

SQL Server 2014 Administration d'une base de données transactionnelle avec SQL Server Management Studio

Labs Hadoop Février 2013

Sommaire. La haute-disponibilité. L'offre OpenSource. Les systèmes tiers. MySQL

Introduction aux SGBDR

Implémentation des SGBD

<Insert Picture Here> Solaris pour la base de donnés Oracle

NoSQL. Etat de l art et benchmark

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Compte-rendu de projet de Système de gestion de base de données

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Cours Bases de données

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

Fouillez facilement dans votre système Big Data. Olivier TAVARD

GOUTEYRON ALEXIS. SIO2 N candidat: UEpreuve E4. USituation professionnelle 2. serveurs de fichiers. Uen haute disponibilité

Description de SQL SERVER. historique

Introduction à MapReduce/Hadoop et Spark

BIG DATA. Veille technologique. Malek Hamouda Nina Lachia Léo Valette. Commanditaire : Thomas Milon. Encadré: Philippe Vismara

Java et les bases de données

Cassandra chez Chronopost pour traiter en temps réel 1,5 milliard d événements par an

//////////////////////////////////////////////////////////////////// Administration bases de données

Acquisition des données - Big Data. Dario VEGA Senior Sales Consultant

NoSQL : hype ou innovation? Grégory Ogonowski / Recherches Octobre 2011

Structure fonctionnelle d un SGBD

Solution Haute Disponibilité pour Linux

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

Information utiles. webpage : Google+ : digiusto/

La replication dans PostgreSQL

Tutorial sur SQL Server 2000

Bases de données documentaires et distribuées Cours NFE04

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Bases de données et sites WEB Licence d informatique LI345

Installation d un groupe de disponibilité avec SQL Server 2012 AlwaysOn (CTP3) qsjdlkqjs

Synchronisation Mysql (Replication)

Windows Internet Name Service (WINS)

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

«clustering» et «load balancing» avec Zope et ZEO

ORACLE TUNING PACK 11G

Sauvegarde des bases SQL Express

Encryptions, compression et partitionnement des données

Prototypage et évaluation de performances d un service de traçabilité avec une architecture distribuée basée sur Hadoop

Open Source Job Scheduler. Installation(s)

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Les technologies du Big Data

WEA Un Gérant d'objets Persistants pour des environnements distribués

Installation des moteurs SQL Pour Micro-SESAME

Secteur Tertiaire Informatique Filière étude - développement. Accueil. Apprentissage. Période en entreprise. Evaluation.

Administration des bases de données relationnelles Part I

Application web de gestion de comptes en banques

Gestion collaborative de documents

et Groupe Eyrolles, 2006, ISBN :

contact@nqicorp.com - Web :

Certificat Big Data - Master MAthématiques

Prototypage et évaluation de performances d un service de traçabilité avec une architecture distribuée basée sur Hadoop

contact@nqicorp.com - Web :

Importation et exportation de données dans HDFS

Haute disponibilité avec PostgreSQL

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Introduction. Introduction. Haute disponibilité et capacité à monter en charge

Serveur d'archivage 2007 Installation et utilisation de la BD exist

4 Exemples de problèmes MapReduce incrémentaux

Exchange Server 2013 Préparation à la certification MCSE Messaging - Examen

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Transcription:

Cours 8 Not Only SQL

Cours 8 - NoSQL Qu'est-ce que le NoSQL?

Cours 8 - NoSQL Qu'est-ce que le NoSQL? Catégorie de SGBD s'affranchissant du modèle relationnel des SGBDR. Mouvance apparue par le biais des "grands du Web", popularisée en 2010.

Cours 8 - NoSQL Pourquoi NoSQL?

Cours 8 - NoSQL Pourquoi NoSQL? - Licence des SGBDR très chère (Oracle,...). - Le SQL a un schéma fermé. - Performances faibles, sur de gros volumes de données, comparées au NoSQL.

Cours 8 - NoSQL Le NoSQL vise : 1. Gestion d'énormes quantités de données 2. Structuration faible du modèle 3. Montée en charge

Cours 8 - NoSQL Il existe quatre types de SGBD NoSQL : 1. Orienté document (MongoDB,...) 2. Clé / valeur (Redis,...) 3. Orienté colonne (Cassandra,...) 4. Orienté graphe (Neo4J,...)

Présentation de MongoDB

Cours 8 - Documents MongoDB est orienté document. Qu'est ce qu'un document?

Cours 8 - Documents MongoDB est orienté document. Qu'est ce qu'un document? Un document est la représentation d'une donnée en BSON. BSON = Binary JSON. Extension du JSON (support officiel du type Date,... ).

Cours 8 - Documents Exemple : { } "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { x : 203, y : 102 }

Cours 8 - Organisation Un serveur MongoDB est composé de bases de données. Une base de données contient des collections. Les collections possèdent les documents. Chaque document possède un identifiant unique généré

Cours 8 - Démarrage MongoDB vient avec un shell : bin/mongo Démarrage avec : bin/mongod Quelques arguments : --dbpath <path> : Chemin de stockage des données. --port <port> : Port du serveur --replset <nom> : Introduire le serveur dans un cluster de réplicas.

Driver Java

Cours 8 - Initialisation Créer une connexion au serveur : Mongo mongo = new Mongo("127.0.0.1", 27017); Créer et/ou récupérer une base de données : DB db = mongo.getdb("ntw"); Créer et/ou récupérer une collection : DBCollection collection = db.getcollection("ntw_coll");

Cours 8 - DBObject L'interface DBObject représente un document. L'implémentation par défaut, BasicDBObject, est commune aux Maps de Java. DBObject db = new BasicDBObject(); db.put("lastname", "Pitton"); db.put("firstname", "Olivier"); db.put("age", 22); Toutes les méthodes d'accès aux données passent par cette interface.

Cours 8 - DBObject Le document : { "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { x : 203, y : 102 } } Sera représenté ainsi en Java : BasicDBObject doc = new BasicDBObject("name", "MongoDB"). append("type", "database"). append("count", 1). append("info", new BasicDBObject("x", 203).append("y", 102));

Cours 8 - Insertion Méthode insert de la classe DBCollection DBObject document =... collection.insert(document); Cette méthode est surchargée et possède plusieurs variantes pour insérer.

Cours 8 - Récupérer le premier document Méthode findone de la classe DBCollection. DBObject mydoc = coll.findone(); System.out.println(myDoc); Affichera le document au format JSON.

Cours 8 - Compter le nombre de documents Méthode getcount() de la classe DBCollection. System.out.println(coll.getCount()); Retourne le nombre de documents de la collection.

Cours 8 - Récupérer tous les documents Méthode find() de la classe DBCollection. DBCursor cursor = coll.find(); try { while(cursor.hasnext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } Retourne l'ensemble des documents de la collection.

Cours 8 - Effectuer des requêtes Méthode find(dbobject db) de la classe DBCollection. BasicDBObject query = new BasicDBObject("i", 71); cursor = coll.find(query); try { while(cursor.hasnext()) { System.out.println(cursor.next()); } } finally { cursor.close(); } Retourne l'ensemble des documents de la collection dont le champ "id" égal 71.

Cours 8 - Mettre à jour Méthode update(dbobject q, DBObject o) de la classe DBCollection. BasicDBObject query = new BasicDBObject("i", 71); BasicDBObject update = new BasicDBObject("name", "Bob"); coll.update(query, update); Remplace tous les documents dont le champ i est 71 par le champ name avec la valeur "Bob".

Cours 8 - Suppression Méthode remove(dbobject q) de la classe DBCollection. BasicDBObject query = new BasicDBObject("i", 71); coll.remove(query); Supprime tous les documents dont le champ i est égal à 71.

Cours 8 - Libération Comme toutes les ressources persistantes, il faut toujours les libérer pour éviter les fuites. Mongo m =... m.close(); DBCursor cursor =... cursor.close(); Pensez au try / finally (comme dans les exemples précédents).

Cours 8 - Java Pour une utilisation simple de MongoDB : Les principales méthodes d'accès aux données se trouvent dans DBCollection. Les principales méthodes d'accès à l'administration se trouvent dans DB et Mongo.

Cours 8 - Opérateurs MongoDB supporte un grand nombre d'opérateurs : $gt, $lt, $and,... BasicDBObject query = new BasicDBObject(); query.put("quantity", new BasicDBObject("$gt", 20)); coll.find(query); Que fait ce code?

Cours 8 - JavaScript MongoDB est capable d'exécuter du JavaScript. Vous pouvez donc effectuer des requêtes comme cela : BasicDBObject query = new BasicDBObject(); query.put("$where", "this.metadata.name === \"" + value + \""); coll.remove(query); Que fait ce code?

Indexation

Cours 8 - Introduction Très similaire aux SGBDR, l'indexation dans MongoDB se fait sur un ou plusieurs champs. Permet d'améliorer les performances de recherche. Cela améliore t'il toujours les performances?

Cours 8 - Présentation Les indexes sont stockés au niveau des collections. Apporte une surcharge pour les opérations d'écriture. Le fonctionnement interne est très proche de ce que l on trouve dans les SGBD actuels.

Cours 8 - Présentation Quel est le type d'index dans MongoDB?

Cours 8 - Présentation Quel est le type d'index dans MongoDB? - B-Tree - Hash

Cours 8 - Créer un index Créer un index se résume à : DBCollection coll =... coll.ensureindex(new BasicDBObject("i", 1), "monindex"); // crée un index sur le champs "i", ascendant Le second paramètre permet de spécifier s'il doit être ascendant ou descendant.

Cours 8 - Créer un index unique Créer un index unique se résume à : DBCollection coll =... coll.ensureindex(new BasicDBObject("i", 1), "monindex", true); Le troisième paramètre permet de spécifier s'il doit être unique ou non.

Cours 8 - Créer un index hash Créer un index de type hash se résume à : DBCollection coll =... coll.ensureindex(new BasicDBObject("i", "hashed"), "monindex");

Cours 8 - Supprimer un index Supprimer un index unique se résume à : DBCollection coll =... coll.dropindex("monindex");

Cours 8 - Conclusion Penser à utiliser les indexes de manière efficace. Un champ peu requêté n'a aucun intérêt à être indexé Bien que l'on parle de NoSQL, le fonctionnement des indexes est similaire au monde SQL.

Mongo Shell

Cours 8 - Shell Le meilleur moyen d'interroger MongoDB est d'utiliser le shell. Les commandes s'effectuent en JavaScript et les données sont en BSON. Le shell possède l'autocomplétion.

Cours 8 - Shell Afficher la base de données courante : db Afficher la liste des bases de données : show dbs Sélectionner une base de données : use <name> Afficher les collections : show collections

Cours 8 - Shell

Cours 8 - Shell Les commandes d'accès aux données sont les mêmes que celles vues pour le driver Java. Les commandes ont la syntaxe suivante : db.<collection>.<methode> Exemple : db.inventory.find( { qty: { $gt: 20 } } ) db.val.insert({"name": "Olivier", "etude" : "Master"})

Cours 8 - Shell Toute l'administration de MongoDB se fait grâce au shell. La documentation et les exemples donnés par le site sont en JavaScript, autrement dit pour le shell. Le shell MongoDB est très simple à utiliser.

GridFS

Cours 8 - Présentation GridFS est une spécification pour stocker et retrouver des fichiers de plus de 16 MB. Les fichiers sont splittés en chunks et stockés dans différents documents. Deux collections sont utilisées pour stocker d'un côté les chunks et de l'autre les méta-données.

Cours 8 - Use case Quand faut-il utiliser GridFS?

Cours 8 - Use case Quand faut-il utiliser GridFS? Si le filesystem limite le nombre de fichiers dans un répertoire. Lorsque l'on veut garder les fichiers synchronisés entre différentes instances de MongoDB, par le biais de la... Lorsque l'on veut accéder à des portions de fichiers sans charger la totalité en mémoire.

Cours 8 - Java GridFS Récupérer un objet GridFS : DB db =... GridFS gridfs = new GridFS(db); Créer un fichier pour GridFS : byte[] data =... GridFSInputFile file = gridfs.createfile(data);

Cours 8 - Java GridFS Rechercher des fichiers : DBObject query =... List<GridFSInputFile> res = gridfs.find(query); Récupérer la liste des fichiers : DBCursor cursor = gridfs.getfilelist(); Supprimer un fichier : DBObject query =... gridfs.remove(query);

Cours 8 - GridFSInputFile Sauvegarder un fichier : GridFSInputFile file =... file.save(); Ajouter des méta-données : GridFSInputFile file =... DBObject meta =... file.setmetadata(meta);

Réplication

Cours 8 - Introduction Qu'apporte la réplication?

Cours 8 - Introduction Qu'apporte la réplication? - Redondance - Simplification de tâches (backups,... ) - Augmentation de la capacité de lecture

Cours 8 - Introduction Un replica set est un cluster d'instances MongoDB. Stratégie maître / esclaves Il doit TOUJOURS y avoir un unique maître. Les clients effectuent les écritures sur l'instance...?

Cours 8 - Type de réplication La réplication du maître vers les esclaves est asynchrone. Quels sont les avantages et inconvénients?

Cours 8 - Type de réplication La réplication du maître vers les esclaves est asynchrone. Quels sont les avantages et inconvénients? Synchrone : Bloquant / Coûteux / Forte cohérence Asynchrone : Non bloquant / Rafraîchissement des données obligatoires.

Cours 8 - Tolérance aux pannes Un replica set est tolérant aux pannes. Si le noeud primaire tombe, les noeuds secondaires peuvent élire un nouveau noeud primaire. Comment rendre l'élection automatique?

Cours 8 - Tolérance aux pannes Comment rendre l'élection automatique? - Détection de la mort du noeud primaire (ping / heartbeat) - Lancement d'une élection - Le noeud ayant reçu une majorité de vote devient le noeud primaire, grâce à une priorité.

Cours 8 - Consistance Que se passe t'il si un noeud primaire accepte une écriture et tombe en panne avant la réplication de l'écriture? On perd la donnée, et le replica set devient inconsistent. Peut arrivé lors d'une partition du réseau, avec un lag, par exemple. Comment corriger cela?

Cours 8 - Consistance Idée inspirée des SGBDR : Le rollback Le noeud primaire écrit en local les opérations demandées lorsqu'il accepte une écriture. Lors de son retour, soit il relance les opérations, soit il les annule (les rollback).

Cours 8 - Préoccupations Lors de la mise en place d'un replica set, deux paramètres sont à prendre en compte : - Write Concern : Message envoyé pour vérifier la validité d'une opération. - Read Preferences : Favoriser les lectures sur les noeuds secondaires.

Cours 8 - Write Concern Qualité de chaque opération d'écriture et décrit le montant de préoccupation d'une application pour l'écriture. Plus la préoccupation augmente, plus les performances augmentent, plus la cohérence diminue.

Cours 8 - Type de Write Concern Erreurs ignorés : Opérations non acquittées. Pas de notification d'erreurs (réseau,...) Sans acquittement : Opérations non acquittées. Au courant des erreurs réseaux. Acquittement : Opérations acquittées. Ne résiste pas au failover. Journalisé : Opérations valides si acquittées et écrites dans le journal. Acquittement du réplica : Tous les noeuds secondaires acquittent les opérations.

Cours 8 - Read Preferences Par défaut, les opérations de lecture sont envoyées au noeud primaire. Les lectures sur le noeud primaire garantissent d'obtenir toujours les données les plus fraîches. Les lectures sur les noeuds secondaires améliorent le débit de lecture en distribuant les lectures.

Cours 8 - Read Preferences Penser à modifier cela lorsque : - Opérations n'affectant pas le front-end (backup, reporting,...). - Application distribuée géographiquement. On envoie le client sur le noeud secondaire le plus proche.

Cours 8 - Types de Read Preferences Les différents type de read preferences sont : primary : Toujours utiliser le noeud primaire. Exception si pas de noeud primaire. primarypreferred : Toujours utiliser le noeud primaire. On utilise les noeuds secondaires si pas de noeud primaire. secondary : Toujours les noeuds secondaires. Exception si pas de noeuds secondaires. secondarypreferred : Toujours les noeuds secondaires. On utilise le noeud primaire si pas de noeuds secondaires. nearest : On prend le noeud le plus proche, selon le choix fait par l'utilisateur.

Cours 8 - Conclusion La réplication est l'un des fondements du NoSQL. De fait, il est important d'en connaître le fonctionnement interne et les implications : élection, tolérance aux pannes, cohérence,... Notions supplémentaires : Arbitres, membres cachés,...

MapReduce

Cours 8 - Introduction Qu'est-ce que le MapReduce?

Cours 8 - Introduction Qu'est-ce que le MapReduce? MapReduce est un patron d'architecture de développement informatique, popularisé (et non inventé) par Google, dans lequel sont effectués des calculs parallèles, et souvent distribués, de données potentiellement très volumineuses. Utilisé dans tous les systèmes à forte volumétrie (NoSQL, BigData,... ).

Cours 8 - Présentation Une tâche MapReduce s'effectue en deux temps : - Map : Analyse d'un problème, découpé en sousproblèmes (peut être récursif). - Reduce : Remontée des résultats au noeud parent l'ayant sollicité.

Cours 8 - Exemple : Hadoop

Cours 8 - Dans MongoDB Une tâche MapReduce dans MongoDB réalise : - Lecture depuis la collection donnée en entrée - Map - Reduce - Écriture dans la collection de sortie On utilise donc une collection temporaire pour faire les opérations.

Cours 8 - Dans MongoDB Consistance dans une opération MapReduce : - La phase de lecture consomme un verrou partagé. Libéré tous les 100 documents. - L'insertion dans la collection temporaire consomme un verrou exclusif pour chaque écriture. - Si la collection de sortie n'existe pas, la création consomme un verrou exclusif. - Si la collection de sortie existe, les actions de sorties consomme un verrou exclusif.

Cours 8 - Exemple Création de l'opération Map var mapfunction1 = function() {emit(this.cust_id, this.price);}; Création de l'opération Reduce var reducefunction1 = function(keycustid, valuesprices) { return Array.sum(valuesPrices); }; Lancement de l'opération MapReduce db.orders.mapreduce(mapfunction1,reducefunction1,{ out: "map_reduce_example" })

Cours 8 - Exemple String map = "function() { var category; if ( this.pages >= 250 ) category = 'Big Books'; else category = 'Small Books'; emit(category, {name: this. name});}"; String reduce = "function(key, values) { var sum = 0; " + "values.foreach (function(doc) { sum += 1;}); return {books: sum};} "; MapReduceCommand cmd = new MapReduceCommand(books, map, reduce, null, MapReduceCommand.OutputType.INLINE, null); MapReduceOutput out = books.mapreduce(cmd); for (DBObject o : out.results()) { } System.out.println(o.toString());

Cours 8 - Conclusion L'objectif du MapReduce est de gérer de gros volumes de données. C'est inutile dès lors que vous en avez peu. Pour cela, vous pouvez utiliser Aggregation Framework. Avec l'avènement du BigData, le MapReduce a le vent en poupe. Il est donc primordial de le connaître.

Conclusion

Cours 8 - Conclusion MongoDB est l'un des plus importants SGBD NoSQL actuel. Cette technologie est jeune et contient d'importants pièges! Ne vous fiez pas à 100% à cette tendance. Il est néanmoins sur qu'elle sera présente dans les prochaines années à venir.