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



Documents pareils
SQL Historique

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

Bases de données relationnelles

PHP 5. La base de données MySql. A. Belaïd 1

Bases de Données relationnelles et leurs systèmes de Gestion

CREATION WEB DYNAMIQUE

Création et Gestion des tables

Cours: Administration d'une Base de Données

Langage SQL : créer et interroger une base

Olivier Mondet

Le Langage De Description De Données(LDD)

OpenPaaS Le réseau social d'entreprise

Cours 8 Not Only SQL

Les bases de données

Les BASES de DONNEES dans WampServer

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

1 Introduction et installation

Le langage SQL Rappels

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

Optimisations des SGBDR. Étude de cas : MySQL

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

Installation d'un serveur FTP géré par une base de données MySQL

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

TP Bases de données réparties

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

I4 : Bases de Données

I. MySQL : Serveur et SGBD

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

16H Cours / 18H TD / 20H TP

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Le Langage SQL version Oracle

Historisation des données

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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)

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

1. Base de données SQLite

Introduction au Système de Gestion de Base de Données et aux Base de Données

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

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

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

Les bases de données Page 1 / 8

Gestion de base de données

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

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

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

Mysql. Les requêtes préparées Prepared statements

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction aux Bases de Données 2004/2005

Introduction à MySQL (ou MySQL en 3 heures montre en main)

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Bases de données élémentaires Maude Manouvrier

Mysql avec EasyPhp. 1 er mars 2006

Les bases de données relationnelles

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Le langage SQL (première partie) c Olivier Caron

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Compétences Business Objects

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

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

1/ Présentation de SQL Server :

Stockage du fichier dans une table mysql:

Bases de données cours 1

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Encryptions, compression et partitionnement des données

Pratique et administration des systèmes

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

Bases de Données Avancées

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

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)

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Vincent Augusto

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Utiliser Access ou Excel pour gérer vos données

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Cours SQL. Base du langage SQL et des bases de données

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Information utiles. webpage : Google+ : digiusto/

Sybase Adaptive Server Enterprise 15

CATALOGUE FORMATIONS DOMAINE Bases de données

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

Bases de Données NoSQL

IBM Cloudant Data Layer Local Edition

Optimisation de MySQL

Bases de données relationnelles & SQL

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

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)

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

TD n 10 : Ma première Base de Données

BTS/CGO P10 SYSTEME INFORMATION Année

Devenez un véritable développeur web en 3 mois!

Transcription:

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

NoSQL, c'est à dire? Les bases de données NoSQL restent des bases de données mais on met l'accent sur L'aspect NON-relationnel L'architecture distribuée La rapidité d'exécution L'absence de SQL comme DML Utilisé pour des data stores de grande à très grande taille 2

Les grands noms du NoSQL Hadoop, Cassandra (Java) MongoDB, CouchDB Redis MemcacheDB 3

MongoDB Existe depuis 2007, développé en C++ Les données existent sous forme de documents BSON (Binary JSON) En ligne de commande : la notation JSON Utilisable avec les principaux langages de développement (C, Java,.NET, PHP, Python...) via des pilotes 4

JSON Une notation JavaScript pour décrire un objet 5

Relationnel vs. MongoDB Terminologie différente, vous vous en doutez... Relationnel MongoDB table collection tuple document champ champ index index 6

Relationnel vs. MongoDB En SQL, le schéma constitue la fondation de la base de données (contraintes d'intégrité, clés primaires, clé étrangères...) MongoDB n'a pas de notion schéma («schema-less») 7

Relationnel vs. MongoDB Les tables ont une structure fixe qui ne varie pas d'un tuple à l'autre : tout auditeur a un nom, un prénom, un âge, même vide, même marqué NULL. Dans une collection, les documents peuvent varier : l'auditeur A a un nom, un prénom et un âge, l'auditeur A2 peut avoir en plus de ces trois champs une adresse. 8

Relationnel vs. MongoDB Les champs d'une table ont le même type de données pour tous les tuples. Les documents peuvent avoir un attribut de même nom contenant un type de valeur différent : l'âge d'un auditeur peut être un numérique dans un document, une chaîne de caractères dans un autre. Possible mais à éviter, évidemment! 9

Dé-normalisation MongoDB encourage la dé-normalisation, vous foulez donc au pied tout ce que vous avez appris en NFA 008! La dé-normalisation favorise l'extraction rapide des documents, souvenez-vous que la rapidité de traitement est placée au centre des ambitions du NoSQL 10

La dé-normalisation en exemple relation un-à-plusieurs Un livre a un seul auteur (pour simplifier) Table AUTEUR : id, nom, prenom Table LIVRE : id, titre, isbn, id_auteur (not null) En relationnel, on a un lien entre le livre et son auteur (1:1), id_auteur est une clé étrangère En NoSQL, on va embarquer l'auteur dans le document livre pour matérialiser ce lien 11

La dé-normalisation en exemple { } "_id": 1, "titre": "Orages d'acier", "isbn": "2253048429", "auteur": { "nom": "Jünger", "prenom": "Ernst" }, "editeur": { "nom": "Le Livre de Poche" } 12

La dé-normalisation en exemple La tentation est grande pour le développeur de faire toujours plus de dé-normalisation et donc à terme de produire des «monstrodocuments» contenant tout et (surtout) n'importe quoi... MongoDB limite la taille des documents à 16M et à 100 niveaux d'imbrication 13

La dé-normalisation relations un-à-plusieurs { } "_id": 1, "titre": "PHP5 avancé", "isbn": "2212134355", "auteurs": [ { "nom": "De Geyer", "prenom": "Cyril" }, { "nom": "Daspet", "prenom": "Eric" }, { "nom": "Séguy", "prenom": "Damien" } ] 14

La dé-normalisation : avantages Une opération faite par le serveur sur un seul document et pas plusieurs Donc un seul accès au disque Performances accrues pour les lectures... Mais potentiellement ralenties sur les mises à jour 15

La normalisation est possible Il est possible de faire référence à un document depuis un autre, comme on le fait en relationnel Notre document livre contiendra une référence vers son éditeur Mais ceci nous oblige à faire deux requêtes : La première pour obtenir le livre La seconde vers la collection editeurs 16

La normalisation reste possible { } "_id": 1, "nom": "Eyrolles Editions" { } "_id": 1, "titre": "PHP5 avancé", "isbn": "2212134355", "auteurs": [ { "nom": "De Geyer", "prenom": "Cyril" }, { "nom": "Daspet", "prenom": "Eric" }, { "nom": "Séguy", "prenom": "Damien" } ], "id_editeur": 1 17

Normaliser ou dé-normaliser? La réponse est...ça dépend! Votre application est elle amenée à faire plus de lectures que d'écritures ou de modifications? Quelle est la volumétrie de vos données et comment celle-ci va-t-elle évoluer? Quelles requêtes ferez-vous le plus souvent? Normalisez si vous souhaitez privilégier l'intégrité des données Dé-normalisez si vous privilégiez la rapidité 18

MongoDB sur le poste de travail Une interface en ligne de commande : le shell On y exécute des commandes Mongo qui font usage de la notation JSON Des interfaces web : phpmoadmin RockMongo (ma préférée!) 19

MongoDB vs SQL Lister les bases de données : SQL : SHOW DATABASES MongoDB : show dbs Se brancher sur une base de données : SQL : use mabase MongoDB : use mabase 20

MongoDB vs SQL Créer une table SQL : CREATE TABLE livre (id tinyint unsigned primary key, titre varchar(20), isbn bigint unsigned) Créer une collection MongoDB : db.createcollection('livre') 21

MongoDB vs SQL Lister des tables SQL : SHOW TABLES ; Lister des collections MongoDB : show collections ; 22

MongoDB vs SQL - insertions SQL : INSERT INTO livre VALUES (1, 'Orages d'acier', '12134567891') ; MongoDB : db.livre.insert({id:"1", titre:"orages d'acier", isbn:"1234567891"}); Vous notez que nous faisons usage de la notation JSON dans le shell Mongo. 23

MongoDB vs SQL - projections SQL : SELECT * FROM livre LIMIT 5; MongoDB : db.livre.find().limit(5); SQL : SELECT titre, isbn FROM livre MongoDB : db.livre.find({}, {titre:1, isbn:1}); SQL : SELECT titre FROM livre WHERE id = 1 MongoDB : db.livre.find({id:"1"},{titre:1}); 24

MongoDB vs SQL - projections SQL : SELECT titre FROM livre ORDER BY id DESC; MongoDB : db.livre.find({}, {titre:1}).sort({id:-1}); SQL : SELECT titre FROM livre WHERE titre LIKE 'Or %' MongoDB : db.livre.find({titre:/^or/}); SQL : SELECT DISTINCT(titre) FROM livre MongoDB : db.livre.distinct("titre"); 25

MongoDB vs SQL - projections SQL : SELECT COUNT(*) FROM livre MongoDB : db.livre.count(); SQL : SELECT * FROM livre WHERE titre like 'Or %' OR ID = 1 ; MongoDB : db.livre.find({ $or: [ {titre:/^or/}, {id:"1"}]}); 26

MongoDB vs SQL mises à jour SQL : UPDATE livre SET titre= 'Jeux Africains' WHERE id = 1 ; MongoDB : db.livre.update({id:"1"}, {$set: {titre:"jeux Africains"}}); SQL : UPDATE livre SET prix = prix + 3 WHERE id =1 MongoDB : db.livre.update({id:"1"}, {$inc:{prix:3}}); 27

MongoDB vs SQL suppressions SQL : DELETE FROM livre MongoDB : db.livre.remove(); SQL : DELETE FROM livre WHERE id = 1 MongoDB : db.livre.remove({id:"1"}); SQL : DELETE FROM livre WHERE id >= 1 LIMIT 1 MongoDB : db.livre.remove({id: {$gte: 1}}, true); 28

MongoDB vs SQL agrégation MongoDB met en place les mêmes fonctionnalités de base que SQL pour ce qui est des fonctions agrégatives : $max $min $avg $group $sum 29

MongoDB les index Les index existent aussi dans MongoDB : Unique Composés Géospatiaux Texte (depuis 2.4) Tout ceci existe aussi dans MySQL Pour poser un index sur le champ d'une collection : ensureindex 30

MongoDB - particularités _id est le champ qui sert de clé primaire par défaut Si on ne précise pas de valeur pour le champ _id, MongoDB en attribue une (longueur = 12 octets) La gestion des identifiants auto-incrémentés que nous avons utilisé avec MySQL n'est pas aussi intuitive en MongoDB, il faut des développements supplémentaires! Le type utilisé par MongoDB pour gérer les dates est ISODate 31

MongoDB - bilan Pas d'intégrité référentielle Pas de jointures ni de transactions Réplication et partitionnement sont implémentés Schéma flexible (même si on parle de schema-less design) Privilégie la rapidité en minimisant les lectures sur le disque (et donc la dé-normalisation) Pratique pour le Web où le temps de réponse est un paramètre critique 32

MongoDB - bilan Nécessite de repenser sa façon de raisonner : ne pas chercher à faire du relationnel en NoSQL Technologie encore jeune mais qui évolue avec le concours des plus grandes entreprises Des pilotes pour de nombreux langages Une communauté active A démarrer sur de «petits» projets pour une première prise en main...à vous de jouer! 33

MongoDB Ressources en ligne Valider du JSON en ligne : jsonlint.com RockMongo : rockmongo.com phpmoadmin : phpmoadmin.com Et, évidemment : mongodb.org 34