bases de données documentaires et distribuées version 2.0.beta

369
Bases de données documentaires et distribuées Version 2017-201 1.0 Philippe Rigaux sept. 12, 2017

Upload: trinhhuong

Post on 31-Dec-2016

456 views

Category:

Documents


41 download

TRANSCRIPT

  • Bases de donnes documentaires etdistribues

    Version 2017-201 1.0

    Philippe Rigaux

    sept. 12, 2017

  • Table des matires

    1 Introduction 31.1 Sujet du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Contenu et objectifs du cours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Organisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2 Prliminaires : Docker 72.1 Docker en quelques mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.1.1 Docker et ses conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.1.2 Les images Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2.2 Docker en ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2.1 Lancement de la Docker VM (Mac OS, Windows) . . . . . . . . . . . . . . . . . . . . . . . 112.2.2 Notre premire image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2.3 Grer mon conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.3 Installons MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.1 Choisir une image et linstancier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.2 Accder mon serveur MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.3.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.4 Kitematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.4.1 Installer un nouveau conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.4.2 Gestion dun conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.4.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    3 Modlisation de bases NoSQL 213.1 S1 : documents structurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    3.1.1 Reprsentation de documents structurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1.2 Les documents sont des graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.1.3 Abrg de la syntaxe JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    3.2 S2. Modlisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.2.1 Conception dune base relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2.2 Conception NoSQL avec documents structurs . . . . . . . . . . . . . . . . . . . . . . . . 343.2.3 Ma conclusion : Relationnel ou NoSQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.3 S3 : Cassandra, une base relationelle tendue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.3.2 Le modle de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.3.3 Paires cl/valeur (columns) et documents (rows) . . . . . . . . . . . . . . . . . . . . . . . . 41

    i

  • 3.3.4 Les tables (column families) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.3.5 Bases (Keyspaces) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.3.6 Conception dun schma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.3.7 Crons notre base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.3.8 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    3.4 S4 : MongoDB, une base JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.4.1 Installation de MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.4.2 Cration de notre base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.4.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3.5 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    4 Interrogation de bases NoSQL 554.1 S1 : HTTP, REST, et CouchDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    4.1.1 Web = ressources + URL + HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.1.2 Larchitecture REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.1.3 LAPI REST de CouchDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    4.2 S2 : requtes Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.2.1 CQL, un sous-ensemble de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.2.2 Pourquoi CQL nest pas SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.2.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    4.3 S3 : requtes avec MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.3.1 Slections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.3.2 Jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714.3.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    5 Complment : Bases XML 755.1 S1 : codage en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

    5.1.1 Introduction XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.1.2 Formalisme XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775.1.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    5.2 S2 : XPath, trouver son chemin XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825.2.1 Un exemple comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825.2.2 Formalisme XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.2.3 Tests et prdicats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.2.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    5.3 S3 : une pince de XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925.3.1 Valeurs et construction de valeurs : let et return . . . . . . . . . . . . . . . . . . . . . . 925.3.2 Squences : la clause for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945.3.3 Filtrons et trions : les clauses where et order . . . . . . . . . . . . . . . . . . . . . . . . 955.3.4 Rsumons : le pouvoir des FLOWR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965.3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    5.4 S4 : BaseX, une base XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985.4.1 Linterface graphique de BaseX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985.4.2 Bases de donnes et collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995.4.3 Exploration interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015.4.4 Interrogation, recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015.4.5 Autres documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025.4.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025.4.7 Travaux pratiques XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    6 MapReduce, premiers pas 1056.1 S1 : MapReduce dmystifi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    6.1.1 Un jus de pomme MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    ii

  • 6.1.2 Beaucoup de jus de pomme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076.1.3 Jus de fruits MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096.1.4 Le modle MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106.1.5 Concevoir un traitement MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126.1.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    6.2 S2 : Frameworks MapReduce : MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146.2.1 Frameworks MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1156.2.2 Mon premier traitement MapReduce/MongoDB . . . . . . . . . . . . . . . . . . . . . . . . 1166.2.3 Jointures avec MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176.2.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    6.3 S3 : MapReduce et CouchB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216.3.1 La notion de vue dans CouchDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216.3.2 Les fonctions Map et Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216.3.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

    7 Cassandra - Travaux Pratiques 1257.1 Partie 1 : Approche relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    7.1.1 Cration de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1257.1.2 Interrogation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    7.2 Partie 2 : modlisation spcifique NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287.2.1 Premier besoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287.2.2 Second besoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297.2.3 Bonus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

    8 MongoDB - Travaux Pratiques 1318.1 Manipulation de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

    8.1.1 Gestion de collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318.1.2 Interrogation simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328.1.3 Indexation (optionnel) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    8.2 Pratique de Map/Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328.2.1 Quelques rappels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328.2.2 Mappez et rducez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    8.3 Bonus / Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338.3.1 Mises jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348.3.2 Indexation 2Dsphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    9 Introduction la recherche dinformation 1359.1 S1 : les principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

    9.1.1 Quest ce que la recherche dinformation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359.1.2 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

    9.2 S2 : la pratique : MongoDB/ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429.2.1 Mise en place dElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429.2.2 Synchronisation avec MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449.2.3 Bases documentaires et moteur de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . 146

    9.3 S3 : la pratique : requtes boolennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479.3.1 Le langage de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479.3.2 Termes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499.3.3 Connecteurs boolens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509.3.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

    9.4 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

    10 Solr, un moteur de recherche 15310.1 S1 : installation, mise en route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    10.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15310.1.2 Insertion de documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

    iii

  • 10.1.3 Interroger un index avec Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15610.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

    10.2 S2 : construisons notre moteur de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15710.2.1 Le schma de lindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15810.2.2 Consulter lindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16110.2.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

    10.3 S3 : Lanalyse de documents avec Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16210.3.1 Tokenisation et normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16310.3.2 Stemming (racine), lemmatization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16410.3.3 Mots vides et autres filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16410.3.4 Les analyseurs Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16510.3.5 Tester votre configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16610.3.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

    11 Recherche avec classement 16911.1 S1 : recherche avec classement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    11.1.1 Notions de base : espace mtrique, distance et similarit . . . . . . . . . . . . . . . . . . . 16911.1.2 Application la recherche plein texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17011.1.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

    11.2 S2 : recherche plein texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17211.2.1 Le poids des mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17311.2.2 La similarit cosinus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17511.2.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    11.3 S3 : lalgorithme PageRank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17811.3.1 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

    11.4 S4 : Classement avec Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18011.4.1 Mise en place de la base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18011.4.2 Comprendre le classement Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18111.4.3 Regroupements (clustering) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18211.4.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

    11.5 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

    12 Recherche dInformation - Travaux Pratiques 18512.1 Modles dindexation textuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    12.1.1 Modle Boolen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18512.1.2 Modle vecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    12.2 Cration dun index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18512.2.1 La conception de lindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18612.2.2 Cration du core Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18712.2.3 Interrogation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

    12.3 Recherche par similarit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18712.3.1 Produit Scalaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

    12.4 PageRank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18812.4.1 Chane de Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18812.4.2 Pertinence du contenu dune page Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

    13 Le cloud, une nouvelle machine de calcul 18913.1 S1 : cloud et donnes massives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    13.1.1 Vision gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19013.1.2 Systmes distribus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19313.1.3 Le NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19513.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

    13.2 S2 : La scalabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19613.2.1 Une dfinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

    iv

  • 13.2.2 Exemple : comptons les documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19713.2.3 Autre exemple : cherchons les doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19813.2.4 Quelques conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19913.2.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

    13.3 S3 : anatomie dune grappe de serveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20013.3.1 La hirarchie des mmoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20013.3.2 Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20213.3.3 Le principe de localit des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20313.3.4 Quelques conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20313.3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    13.4 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    14 Systmes NoSQL : la rplication 20714.1 S1 : rplication et reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

    14.1.1 La rplication, pourquoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20714.1.2 La rplication, comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20814.1.3 Cohrence des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21014.1.4 Rplication et reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21114.1.5 Culture : le thorme CAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21214.1.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    14.2 S2 : rplication dans MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21314.2.1 Les replica set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21314.2.2 La reprise sur panne dans MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21414.2.3 laction : crons notre replica set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21514.2.4 Testons la reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21614.2.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

    14.3 S3 : ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21714.3.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21714.3.2 Reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21914.3.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

    14.4 S4 : SolrCloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21914.4.1 Larchitecture SolrCloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21914.4.2 ZooKeeper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22114.4.3 Cration de la grappe SolrCloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22114.4.4 Cration de collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22214.4.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    14.5 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    15 Systmes NoSQL : le partitionnement 22515.1 S1 : les bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    15.1.1 Principes gnraux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22515.1.2 Et en distribu? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22715.1.3 Etude de cas : ElasticSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22815.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    15.2 S2 : partitionnement par intervalle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23115.2.1 Structures et oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23215.2.2 Etude de cas : MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23315.2.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

    15.3 S3 : partitionnement par hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23815.3.1 Structure et oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23915.3.2 Le hachage cohrent (consistent hashing) . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

    15.4 S4 : Cassandra en mode distribu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24315.4.1 Le Hash-Ring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24315.4.2 Routage des requtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

    v

  • 15.4.3 La rplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24515.4.4 Ecriture et cohrence des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24615.4.5 Lecture et cohrence des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24815.4.6 Utilisation des snitches : Gossip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24915.4.7 Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24915.4.8 Cassandra & donnes massives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25215.4.9 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    15.5 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

    16 Calcul distribu : Hadoop et MapReduce 25516.1 S1 : MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

    16.1.1 Le principe de localit des donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25616.1.2 Excution distribue dun traitement MapReduce . . . . . . . . . . . . . . . . . . . . . . . 25816.1.3 La reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26116.1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

    16.2 S2 : HDFS, le stockage distribu avec Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26316.2.1 Systmes de fichiers distribus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26316.2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26516.2.3 Tolrance aux pannes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26616.2.4 Mise en uvre avec Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

    16.3 S3 : MapReduce, le calcul distribu avec Hadoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26916.3.1 Installation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26916.3.2 Notre programme MapReduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26916.3.3 Compilation, excution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

    16.4 S4 : langages de traitement : Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27316.4.1 Une session illustrative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27316.4.2 Les oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27616.4.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    16.5 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    17 Traitement de donnes massives avec Apache Spark 28117.1 S2 : Introduction Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    17.1.1 Les RDDs dans Spark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28117.1.2 Exemple : analyse de fichiers log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28217.1.3 Reprise sur panne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28317.1.4 Une session Spark : comptons les mots ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

    17.2 Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    18 Traitement de flux massifs avec Apache Flink 28718.1 S1 : Apache Flink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

    18.1.1 Architecture applicative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28818.1.2 Architecture systme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28918.1.3 Tolrance aux pannes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29118.1.4 Prise en mains de Flink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

    18.2 S2 : lAPI de streaming Flink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29618.2.1 Modle de donnes et de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29618.2.2 Les transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29718.2.3 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29718.2.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

    18.3 S3 : Le fentrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30318.3.1 Dfinition dune fentre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30318.3.2 Oprations sur les fentres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30518.3.3 Quelques exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30518.3.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

    vi

  • 18.4 S4 : un hackathon sur la gestion de flux de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

    19 Pig : Travaux pratiques 30719.1 Premire partie : analyse de flux multiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30719.2 Deuxime partie : analyse de requtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

    19.2.1 Apart sur lutilisation de Pig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30919.2.2 Premire analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30919.2.3 Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

    20 Projets NFE204 31520.1 Les tapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31520.2 Les donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31620.3 Le systme NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31620.4 Le rapport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    21 Anatomie dun systme NoSQL : CouchBase 31921.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31921.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

    21.2.1 Le gestionnaire de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32121.2.2 Interrogation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

    21.3 Donnes JSON et import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32221.3.1 La source de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32221.3.2 Description du document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32321.3.3 Cration du jeu de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32321.3.4 Automatisation des exports et intgration . . . . . . . . . . . . . . . . . . . . . . . . . . . 32521.3.5 Insertion des donnes JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32621.3.6 Requtes sur la base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32721.3.7 Exploiter les donnes sous forme de carte GPS . . . . . . . . . . . . . . . . . . . . . . . . 329

    21.4 Le systme de vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33021.4.1 La phase de Reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33021.4.2 Nombre daccidents mortels par quartiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 33121.4.3 Etude et discussion des rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

    21.5 Indexation Elasticsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33521.5.1 Installation Elasticsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33521.5.2 Rplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33621.5.3 Requtes de recherche par linterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33721.5.4 Etude et discussion des rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33821.5.5 Mapping Elasticsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34121.5.6 Cration dun analyseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34421.5.7 Annexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

    22 Annales des examens 34922.1 Examen du 3 fvrier 2015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

    22.1.1 Premire partie : recherche dinformation (8 pts) . . . . . . . . . . . . . . . . . . . . . . . 34922.1.2 Seconde partie : Pig et MapReduce (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . 35022.1.3 Troisime partie : questions de cours (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . 350

    22.2 Examen du 14 avril 2015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35022.2.1 Premire partie : recherche dinformation (8 pts) . . . . . . . . . . . . . . . . . . . . . . . 35022.2.2 Seconde partie : Pig et MapReduce (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . 35122.2.3 Troisime partie : questions de cours (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . 351

    22.3 Examen du 15 juin 2015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35222.3.1 Premire partie : documents structurs (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . 35222.3.2 Deuxime partie : recherche dinformation (6 pts) . . . . . . . . . . . . . . . . . . . . . . . 35322.3.3 Troisime partie : MapReduce (4 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35322.3.4 Quatrime partie : questions de cours (6 pts) . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    vii

  • 22.4 Examen du 1er juillet 2016 (FOD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35322.4.1 Exercice corrig : documents structurs et MapReduce (8 pts) . . . . . . . . . . . . . . . . 35322.4.2 Question 3 : MapReduce et la notion de document autonome . . . . . . . . . . . . . . . . 35322.4.3 Question 4 : MapReduce, outil de restructuration/regroupement . . . . . . . . . . . . . . . . 35422.4.4 Question 5 : MapReduce = group-by SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

    23 Rfrences et liens 35723.1 Les MOOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

    24 Indices and tables 359

    viii

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Contents : Tout le matriel propos ici sert de support au cours Bases de donnes documentaires et distribuespropos par le dpartement dinformatique du Cnam. Le code du cours est NFE204 (voir le site http://deptinfo.cnam.fr/new/spip.php?rubrique146 pour des informations pratiques). Il est donn en

    Cours prsentiel (premier semestre, mardi soir) Cours distance (second semestre, avec supports audiovisuels)

    Par ailleurs, le document que vous commencez lire fait partie de lensemble des supports dapprentissage proposssur le site http://www.bdpedia.fr. Reportez-vous ce site pour plus dexplications.

    Table des matires 1

    http://deptinfo.cnam.fr/new/spip.php?rubrique146http://deptinfo.cnam.fr/new/spip.php?rubrique146http://www.bdpedia.fr

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    2 Table des matires

  • CHAPITRE 1

    Introduction

    Supports complmentaires : Diapositives: Prsentation du cours Vido de prsentation du cours

    Les bases relationnelles sont adaptes des informations bien structures, dcomposables en units simples (chanes decaractres, numriques), et reprsentables sous forme de tableaux. Beaucoup de donnes ne satisfont pas ces critres :leur structure est complexe, variable, et elles ne se dcomposent par aisment en attributs lmentaires. Commentreprsenter le contenu dun livre par exemple? dune image ou dune vido? dune partition musicale?

    Les bases relationnelles rpondent cette question en multipliant le nombre de tables, et de lignes dans ces tables,pour reprsenter ce qui constitue conceptuellement une mme entit. Cette dcomposition en fragment plats (leslignes) est la fameuse normalisation (relationnelle) qui impose, pour reconstituer linformation complte, deffectuerune ou plusieurs jointures assemblant les lignes stockes indpendamment les unes des autres.

    Note : Ce cours suppose une connaissance solide des bases de donnes relationnelles. Si ce nest pas le cas, vousrisquez davoir des lacunes et des difficults assimiler les nouvelles connaissances prsentes. Je vous recommandeau pralable de consulter les cours suivants :

    le cours Bases relationnelles, modles et langages, pour tout savoir sur la conception dune base relationnelleet le langage SQL.

    le cours Systmes relationnels, pour les aspects systmes : indexation, optimisation, concurrence daccs.

    Cette approche, qui a fait ses preuves, ne convient cependant pas dans certains cas. Les donnes de nature essen-tiellement textuelle par exemple (livre, documentation) se reprsentent mal en relationnel ; cest vrai aussi de certainsobjets dont la stucture est trs flexible ; enfin, lchange de donnes dans un environnement distribu se prte mal unereprsentation clate en plusieurs constituants lmentaires quil faut r-assembler pour quils prennent sens. Toutesces raisons mnent des modes de reprsentation plus riches permettant la runion, en une seule structure, de toutesles informations relatives un mme objet conceptuel. Cest ce que nous appellerons document, dans une acceptionlargie un peu abusive mais bien pratique.

    1.1 Sujet du cours

    Dans tout ce qui suit nous dsignons donc par le terme gnrique de document toute unit dinformation complexenon dcomposable. La gestion densembles de documents selon les principes des bases de donnes, avec notammentdes outils de recherche avancs, relve des bases documentaires. Le volume important de ces bases amne souvent les grer dans un systme distribu constitu de fermes de serveurs alloues la demande dans une infrastructurede type cloud. Lusage est maintenant tabli dappeler ces systmes NoSQL pour souligner leurs diffrences avec

    3

    http://b3d.bdpedia.fr/files/slprescours.pdfhttps://mdcvideos.cnam.fr/videos/?video=MEDIA170904102730399http://sql.bdpedia.frhttp://sys.bdpedia.fr

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    les systmes relationnels. Le fait quils ne suivent pas le modle relationnel est dailleurs peu prs leur seul pointcommun. De manire gnrale, et avec de grandes variantes quand on se penche sur les dtails, ils partagent galement :

    la reprsentation des donnes sous forme dunits dinformation indpendantes les unes des unes, (ce que ousappelons justement document) organises en collections ;

    des mthodes daccs aux collections bases soit sur des primitives assez simplistes, soit sur des recherchespar similarit qui relvent de la recherche dinformation ;

    la capacit passer lchelle (expression nigmatique que nous essaierons de clarifier) par ajout de ressourcesmatrielle, donnant ces fameux environnements distribus et extensibles,

    et enfin des techniques de distribution de calculs permettant de traiter des collections massives dans des dlaisraisonnables.

    Tout ces aspects, centres sur les documents de nature textuelle (ce qui exclut les documents multimdia comme lesimages ou vidos), constituent le cur de notre sujet. Il couvre en particulier :

    Modles de donnes pour documents structurs (XML et JSON), conception, bases de documents structurs(BaseX, MongoDB, CouchDB, etc.).

    Indexation et recherche : extraction de descripteurs, moteurs de recherche, techniques de classement. Gestion de grandes collections dans des environnements distribus : les systmes NoSQL (MongoDB, Cassan-

    dra, CouchBase, ...) Traitements grande chelle : Hadoop, MapReduce, Spark, Flink.

    La reprsentation des donnes sappuie sur un modle. Dans le cas du relationnel, ce sont des tables (pour le diresimplement), et nous supposerons que vous connaissez lessentiel. Dans le cas des documents, les structures sontplus complexes : tableaux, ensembles, agrgats, imbrication, rfrences. Nous tudions essentiellement la notion dedocument structur et les deux formats de reprsentation les plus courants, XML et JSON.

    Disposer de donnes, mmes correctement reprsentes, sans pouvoir rien en faire na que peu dintrt. Les oprationssur les donnes sont les crations, mises jour, destruction, et surtout recherche, selon des critres plus ou moinscomplexes. Les bases relationnelles ont SQL, nous verrons que la recherche dans des grandes bases documentairesobit souvent des principes assez diffrents, illustrs par exemple par les moteurs de recherche.

    Enfin, tort ou raison, les nouveaux systmes de gestion de donnes, orients vers ce que nous appelons, au senslarge, des documents, sont maintenant considrs comme des outils de choix pour passer lchelle de trs grandesmasses de donnes (le Big data). Ces nouveaux systmes, collectivement (et vaguement) dsigns par le mot-valiseNoSQL ont essentiellement en commun de pouvoir constituer peu de frais des systmes distribus, scalables, aptes stocker et traiter des collections trs grande chelle. Une partie significative du cours est consacre ces systmes, leurs principes, et linspection en dtail de quelques exemples reprsentatifs.

    1.2 Contenu et objectifs du cours

    Le cours vise vous transmettre, dans un contexte pratique, deux types de connaissances. Connaissances fondamentales :

    1. Reprsentation de documents textuels : les formats XML et JSON; les schmas de bases documen-taires ; les changes de documents sur le Web et notamment lOpen Data.

    2. Moteurs de recherche pour bases documentaires : principes, techniques, moteurs de recherche, index,algorithmes.

    3. Stockage, gestion, et passage lchelle par distribution. Lessentiel sur les systmes distribus, lepartitionnement, la rplication, la reprise sur panne ; le cas des systmes NOSQL.

    4. Traitement de donnes massives : Hadoop et MapReduce, et les systmes modernes, Spark et Flink. Connaissances pratiques :

    1. Des systmes NoSQL orients documents ; pour JSON (MongoDB, CouchDB) pour XML (Ba-seX).

    2. Des moteurs de recheche (Solr, ElasticSearch) bass sur un index invers (Lucene).3. Ltude, en pratique, de quelques systmes NoSQL distribus : MongoDB (temps rel), ElasticSearch

    (indexation), Cassandra, etc.

    4 Chapitre 1. Introduction

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    4. La combinaison des moteurs de stockage et des moteurs de traitement distribu : Hadoop, Spark etFlink.

    Les connaissances pralables pour bien suivre ce cours sont essentiellement une bonne comprhension des basesrelationnelles, soit au moins la conception dun schma, SQL, ce quest un index et des notions de base sur lestransactions. Il est souhaitable galement davoir une aisance minimale dans un environnement de dveloppement.Il sagit dditer un fichier, de lancer une commande, de ne pas paniquer devant un nouvel outil, de savoir rsoudreun problme avec un minimum de tenacit. Aucun dveloppement nest effectuer, mais des exemples de code sontfournis et doivent tre mis en uvre pour une bonne comprhension.

    Le cours repose beaucoup sur la mise en pratique. Vous avez donc besoin dun ordinateur pour travailler. Si vous tesau Cnam tout est fourni, sinon un ordinateur portable raisonnablement rcent et puissant (8 GOs en mmoire RAM auminimum) suffit. Tous les logiciels utiliss sont libres de droits, et leur installation est brivement dcrite quand cestncessaire.

    1.3 Organisation

    Le cours est dcoup en chapitres, couvrant un sujet bien dtermin, et en sessions. Jessaie de structurer les ses-sions pour quelles demandent environ 2 heures de travail personnel (bien sr, cela dpend galement de vous). Pourassimiler une session vous pouvez combiner les ressources suivantes :

    La lecture du support en ligne : celui que vous avez sous les yeux, galement disponible en PDF ou en ePub. Le suivi du cours, en vido ou en prsentiel. Le test des exemples de code fournis dans chaque session. La ralisation des exercices proposs en fin de session. Dans la plupart des chapitres, des Quiz sur des questions de cours ; si vous ne savez pas rpondre une question

    du Quiz :, relisez le chapitre et approfondissez.La ralisation des exercices est essentielle pour vrifier que vous matrisez le contenu.

    Vous devez assimiler le contenu des sessions dans lordre o elles sont proposes. Commencez par lire le support,jusqu ce que les principes vous paraissent clairs. Reproduisez les exemples de code : tous les exemples donnssont tests et doivent donc fonctionner. Le cas chant, cherchez rsoudre les problmes par vous-mmes : cest lemeilleur moyen de comprendre. Finissez enfin par les exercices. Les solutions sont dvoiles au fur et mesure delavancement du cours, mais si vous ne savez pas faire un exercice, cest sans doute que le cours est mal assimil et ilest plus profitable dapprofondir en relisant nouveau que de simplement copier une solution.

    Enfin, vous tes totalement encourag(e) explorer par vous-mmes de nouvelles pistes (certaines sont proposes dansles exercices).

    1.3. Organisation 5

    http://b3d.bdpedia.fr/files/b3d.pdfhttp://b3d.bdpedia.fr/files/b3d.epub

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    6 Chapitre 1. Introduction

  • CHAPITRE 2

    Prliminaires : Docker

    Supports complmentaires Vido de la session consacre Docker

    La plupart des systmes tudis dans ce cours peuvent sinstaller et sexcuter avec lenvironnement Docker (http://www.docker.com). Docker permet dmuler un systme distribu de serveurs. Un serveur est une entit qui fournitun service.... Concrtement :

    un serveur machine est un ordinateur, tournant sous un systme dexploitation, et connect en permanence aurseau via des ports ; un serveur machine est identifiable sur le rseau par son adresse IP.

    un serveur logiciel est un processus excut en tche de fond dun serveur machine qui communique avec desclients (logiciels) via un port particulier.

    un client (logiciel) est un programme qui communique avec un serveur (logiciel) ; une machine virtuelle est un programme qui simule, sur une machine hte, un autre ordinateur.

    Exemple.

    Un serveur web est un processus (Apache par exemple) qui communique sur le port 80 dun serveur machine. Si ceserveur machine a pour IP 163.12.9.10, alors tout client web (Firefox par exemple) peut sadresser au serveur web ladresse 163.12.9.10 :80.

    La figure Un exemple de systme distribu, avec serveurs virtuels et clients (page 8) illustre ces concepts de base, quenous utiliserons maintenant intensivement sans plus dexplication.

    Avant de donner quelques explications plus labores, il vous suffit de considrer que Docker permet dinstallerde dexcuter trs facilement, sur votre ordinateur personnel, et avec une consommation de ressources (mmoireet disque) trs faible, ce que nous appellerons pour linstant des pseudos-serveurs en attendant dtre plus prcis.Docker offre deux trs grands avantages.

    il propose des pseudo-serveurs pr-configurs, prts lemploi, qui sinstallent en quelques clics ; il est tout aussi facile dinstaller plusieurs pseudos-serveurs communiquant les uns avec les autres et dobtenir

    donc un systme distribu complet, sur un simple portable (dot dune puissance raisonnable).Docker permet de transformer un simple ordinateur personnel en data center ! Bien entendu, il nen a pas la puissancemais pour tester et exprimenter, cest extrmement pratique.

    Installation : Docker existe sous tous les systmes, dont Windows. Pour Mac OS X et Windows, un installateurDocker-toolbox est fourni https://www.docker.com/products/docker-toolbox. Sous Linux cest un peu diffrent, maissi vous tes sous Linux cest probablement que vous savez trs bien vous dbrouiller.

    Je vous encourage consulter les complments suivants qui vous seront trs utiles, notamment pour les utilisateurs deWindows.

    Un court tutoriel sur Docker et Oracle : http://chewbii.com/docker/

    7

    http://avc.cnam.fr/univ-r_av/avc/courseaccess?id=2960http://www.docker.comhttp://www.docker.comhttps://www.docker.com/products/docker-toolboxhttp://chewbii.com/docker/

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Fig. 2.1 Un exemple de systme distribu, avec serveurs virtuels et clients

    Une vido montrant linstalltion sous Mac OS : http://chewbii.com/wp-content/uploads/2016/09/DockerMac.mp4

    Lutilisation de SQLDeveloper : http://chewbii.com/wp-content/uploads/2016/09/SQLDeveloperDocker.mp4

    Note : Merci de me signaler des complments qui seraient utiles intgrer dans le prsent document, pour lesenvironnements diffrents de Mac OS X, et notamment Windows.

    2.1 Docker en quelques mots

    Essayons de comprendre ce quest Docker avant daller plus loin. Vous connaissez peut-tre dj la notion de machinevirtuelle (VM). Elle consiste simuler par un composant logiciel, sur une machine physique, un ordinateur auquel onalloue une partie des ressources (mmoire, CPU). Partant dune machine dote par exemple de 4 disques et 256 GOde mmoire, on peut crer 4 VMs indpendantes avec chacune 1 disque et 64 GO de RAM. Ces VMs peuvent tretotalement diffrentes les unes des autres. On peut en avoir une sous le systme Windows, une autre sous le systmeLinux, etc.

    Lintrt des VMs est principalement la souplesse et loptimisation de lutilisation des ressources matrielles. Lorga-nisation en VMs rend plus facile la raffectation, le changement du dimensionnement, et amliore le taux dutilisationdes dispositifs physiques (disque, mmoire, rseau, etc.).

    Les VMs ont aussi linconvnient dtre assez gourmandes en ressource, puisquil faut, chaque fois, faire tourner unsystme dexploitation complet, avec tout ce que cela implique, en terme demprise mmoire notamment.

    Docker propose une solution beaucoup plus lgre, base sur la capacit du systme Linux crer des espaces isolsauxquels on affecte une partie des ressources de la machine-hte. Ces espaces, ou containers partitionnent en quelquesorte le systme-hte en sous-systmes tanches, au sein desquels le nommage (des processus, des utilisateurs, desports rseaux) est purement local. On peut par exemple faire tourner un processus apache sur le port 80 dans le conte-neur A, un autre processus apache sur le port 80 dans le conteneur B, sans conflit ni confusion. Tous les nommages

    8 Chapitre 2. Prliminaires : Docker

    http://chewbii.com/wp-content/uploads/2016/09/DockerMac.mp4http://chewbii.com/wp-content/uploads/2016/09/DockerMac.mp4http://chewbii.com/wp-content/uploads/2016/09/SQLDeveloperDocker.mp4

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    sont en quelque sorte interprts par rapport un container donn (notion despace de nom).

    Les conteneurs Linux sont beaucoup plus lgers en consommation de ressources que les VMs, puisquils sexcutentau sein dun unique systme dexploitation. Docker exploite cette spcificit du systme Linux pour proposer un modede virtualisation (que nous avons appel pseudo-serveur en prambule) lger et flexible.

    2.1.1 Docker et ses conteneurs

    Docker (ou, trs prcisment, le docker engine) est un programme qui va nous permettre de crer des conteneurs Linuxet dy installer des environnements prts lemploi, les images. Docker sexcute toujours dans un environnementLinux, pour les raisons mentionnes ci-dessus. Si vous avez une machine sous Windows ou Mac OS, Docker proposeune machine virtuelle Linux ultra-lgre au sein de laquelle il sexcute.

    La figure Larchitecture Docker, sous diffrents systmes dexploitation (page 9) montre les deux cas de figure. gauche, la machine hte est sous Windows ou Mac OS. Docker (engine) va commencer par lancer une VM Linux, etsexcuter en tant que programme dans cette VM. Grce linterface de commande du programme Docker, ou soninterface graphique kitematic, on pourra alors crer des conteneurs.

    droite, le schma est lgrement simplifi car lhte est un serveur Linux. On peut alors y excuter directement lemoteur Docker et se ramener la situation prcdente.

    Fig. 2.2 Larchitecture Docker, sous diffrents systmes dexploitation

    Un peu de vocabulaire : dans tout ce qui suit, Le systme hte est le systme dexploitation principal grant votre machine ; cest par exemple Windows, ou

    Mac OS. Docker VM dsigne le systme Linux o Docker sexcute, qui peut donc tre soit directement votre machine

    si vous tes sous Linux, soit une VM Linux sexcutant sur votre machine Windows ou Mac OS. Docker engine ou moteur docker est le programme qui gre les conteneurs ; il sexcute dans la Docker VM. Un conteneur est une partie autonome de la Docker VM, se comportant comme une machine indpendante. Le client Docker est lutilitaire grce auquel on transmet au moteur les commandes de gestion de ces conte-

    neurs. Il peut sagir soit de la ligne de commande (Docker CLI) ou de kitematic.

    2.1. Docker en quelques mots 9

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    2.1.2 Les images Docker

    Un conteneur Docker peut donc tre vu comme un sous-systme Linux autonome, mobilisant trs peu de ressources carlessentiel des tches systme est dlgu au systme Linux dans lequel il est instanci. On dispose donc virtuellementdun moyen de multiplier peu de frais des pseudo-machines dans lesquelles on pourait installer la main deslogiciels divers et varis.

    Docker va un peu plus loin en proposant des installations pr-configures, empaquetes de manire pouvoir treplaces trs facilement dans un conteneur. On les appelle des images. On peut ainsi trouver des images avec pr-configuration de serveurs de donnes (Oracle, Postgres, MySQL), serveurs Web (Apache, njinx), serveurs NoSQL(mongodb, cassandra), moteurs de recherche (ElasticSearch, Solr). Linstallation dune image se fait trs simplement,et soulage considrablement des tches parfois pnibles dinstallation directe.

    Fig. 2.3 Les images docker, constituant un pseudo systme distribu

    Une image se place dans un conteneur. On peut placer la mme image dans plusieurs conteneurs et obtenir ainsi unsystme distribu. Examinons la figure Les images docker, constituant un pseudo systme distribu (page 10) montrantune configuration complte, avec un systme-hte Windows. Nous avons tous les composants luvre, essayons debien comprendre.

    Le systme hte a cr une VM Docker (donc, une machine virtuelle Linux dans laquelle sexcute le DockerEngine).

    Docker a tlcharg (nous verrons comment plus tard) les images de plusieurs systmes de gestion de donnes :MySQL, MongoDB (un systme NoSQL que nous tudierons), et Solr (un moteur de recherche que noustudierons galement).

    Ces images ont t instancies dans des conteneurs A, B et C. Linstanciation consiste installer limage dansle conteneur et lexcuter. Nous avons donc deux conteneurs avec limage MySQL, et un troisime aveclimage Solr.

    Lensemble constitue donc un systme distribu virtuel, le tout sexcutant sur la machine-hte et grable trs facile-ment grce aux utilitaires Docker. Nous avons par exemple dans chaque conteneur un serveur MySQL. Maintenant, on

    10 Chapitre 2. Prliminaires : Docker

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    peut se connecter ces serveurs partir de la machine-hte avec une application cliente (par exemple phpMyAdmin)et tester le systme distribu, ce que nous ferons tout au long du cours.

    On peut instancier limage de MongoDB dans 4 conteneurs et obtenir un cluster MongoDB en quelques minutes.Evidemment, les performances globales ne dpasseront pas celle de lunique machine hbergeant Docker. Mais pourdu dveloppement ou de lexprimentation, cest suffisant, et le gain en temps dinstallation est considrable.

    En rsum : avec Docker, on dispose dune bote outils pour muler des environnements complexes avec une trsgrande facilit.

    2.2 Docker en ligne de commande

    Dans ce qui suit, je vais illustrer les commandes avec lutilitaire CLI en prenant lexemple de ma machine Mac OSX. Ce ne doit pas tre fondamentalement diffrent sous les autres environnements. Vous prfrerez sans doute justetitre utiliser kitematic, dcrit dans la prochaine section, mais avoir un aperu de commandes transmises par ce dernierest toujours utile pour comprendre ce qui se passe.

    Important : A lheure actuelle Kitematic nest pas disponible sous Linux

    2.2.1 Lancement de la Docker VM (Mac OS, Windows)

    Important : Cette section ne sapplique que si vous ntes pas dj sous Linux.

    Une fois Docker install, on dispose dun programme Docker Terminal qui permet de lancer un machine virtuelleLinux, effectue toute la configuration de Docker, et ouvre une fentre terminal permettant denvoyer des commandesau moteur Docker.

    Important : Le programme Docker terminal doit se trouver dans le rpertoire dinstallation de Docker. Pourles experts, il est possible de crer la machine docker avec des options fines de configuration en entrant la commande :

    docker-machine start

    Mais a devient compliqu. Le Docker Terminal fait trs bien les choses.

    Voici un exemple daffichage rsultant du lancement du terminal.

    Creating Machine dev...Creating VirtualBox VM...Creating SSH key...Starting VirtualBox VM...Starting VM...To see how to connect Docker to this machine, run: docker-machine env devStarting machine dev...Setting environment variables for machine dev...

    ## .## ## ## ==

    ## ## ## ## ## ===/~~~~~~~~~~~~~~~~~\___/ ===

    ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~

    2.2. Docker en ligne de commande 11

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    \______ o __/\ \ __/\____\_______/

    The Docker Quick Start Terminal is configured to use Docker with the default VM.

    ce stade, la machine virtuelle Linux intgrant Docker est lance. On peut communiquer avec elle grce lutilitairedocker-machine. Entrez par exemple la commande suivante :

    docker-machine env

    Elle affiche les variables denvironnement configurant laccs la machine Docker. Vous devriez obtenir une rponsecomparable la suivante :

    export DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/Users/philippe/.docker/machine/machines/default"export DOCKER_MACHINE_NAME="default"# Run this command to configure your shell:# eval $(docker-machine env)

    Dcryptons. Cette rponse nous dit que lon peut communiquer avec la machine virtuelle ladressetcp://192.168.99.100:2376. Le nom de la machine Docker est default (on pourraitcrer plusieurs machines, avec des noms diffrents) et les fichiers sont placs dans le rpertoire.docker/machine/machines/default. Ces paramtres doivent tre dfinis dans des variables denvi-ronnement pour pouvoir communiquer avec la machine Docker. Si vous ouvrez un autre terminal, vous pouvez doncconfigurer ces variables simplement avec la commande :

    eval $(docker-machine env)

    La machine Docker est un serveur Linux indpendant et dispose donc dune adresse IP. On lobtient de la maniresuivante :

    docker-machine ip

    Cette dernire commande est trs importante car ladresse IP nous permet de nous connecter aux conteneurs grs parDocker.

    Quand vous en avez assez, vous pouvez arrter la machine docker avec la commande :

    docker-machine stop

    2.2.2 Notre premire image

    Maintenant, dans un terminal configur pour accder Docker, vous pouvez installer une image et lexcuter. Pourcommuniquer avec le moteur Docker et lui transmettre des commandes, on utilise un programme client nomm sim-plement docker. Limage la plus simple est un Hello world, on linstancie avec la commande suivante :

    docker run hello-world

    Le run est la commande dinstanciation dune nouvelle image dans un conteneur Docker. Voici ce que vous devriezobtenir la premire excution.

    docker run hello-world

    12 Chapitre 2. Prliminaires : Docker

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Unable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-world4276590986f6: Pull completeStatus: Downloaded newer image for hello-world:latest

    Hello from Docker.

    Dcryptons nouveau. La machine Docker a cherch dans son rpertoire local pour savoir si limage hello-worldtait dj tlcharge. Ici, comme cest notre premire excution, ce nest pas le cas (message Unable to findimage locally). Docker va donc tlcharger limage et linstancier. Le message Hello from Docker. saf-fiche : lutilit est limite, mais cela montre toute petite chelle le fonctionnement gnral : on choisit une image, onapplique run et Docker se charge du reste.

    2.2.3 Grer mon conteneur

    La liste des images est disponible avec la commande :

    docker images

    Une image est instancie dans un conteneur avec la commande run.

    docker run --name 'nom-conteneu'

    Les options dpendent de limage : voir les sections suivantes pour des exemples avec MySQL et MongoDB. La listedes conteneurs est disponible avec la commande :

    docker ps -a

    Loption -a permet de voir tous les conteneurs, quel que soit leur statut (en arrt, ou en cours dexcution).

    Voici quelques commandes utiles pour grer un conteneur dont nous allons supposer que le nom estmon-conteneur. Tout dabord on peut larrter avec la commande stop.

    docker stop mon-conteneur

    Et le relancer avec la commande start.

    docker start mon-conteneur

    Pour le supprimer, cest la commande docker rm (cela permet de librer le nom mon-conteneur au besoin).

    Pour inspecter la configuration systme/rseau dun conteneur, Docker fournit la commande inspect.

    docker inspect mon-conteneur

    On obtient un large document JSON.

    2.2.4 Exercices

    Ici, vous devriez faire le point et tenter de vrifier que vous comprenez bien ce qui se passe.

    Exercice Ex-S1-1 : testons notre comprhension

    Savez-vous rpondre aux questions suivantes? Quest-ce quune machine Docker, o se trouve-t-elle, quel est son rle?

    2.2. Docker en ligne de commande 13

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    quoi sert le terminal Docker, et quest-ce qui caractrise un tel terminal ? Quest-ce que la machine hte? Doit-elle forcment tourner sous Linux? Une instance dimage est-elle place dans un conteneur, dans la machine hte ou dans la machine Docker? Peut-on instancier une image dans plusieurs conteneurs?

    Si vous ne savez pas rpondre, cela vaut la peine de relire ce qui prcde, ou des ressources complmentaires sur leWeb. Vous serez plus laise par la suite si vous avez une ide claire de larchitecture et de ses concepts-cl.

    Exercice Ex-S1-2 : premiers pas Docker

    Maintenant, effectuez les oprations ci-dessus sur votre machine. Installez Docker, lancez le conteneurhello-world, affichez la liste des conteneurs, supprimez le conteneur hello-world.

    2.3 Installons MySQL

    Vous voulez travailler avec MySQL? Nous allons voir comment installer limage Docker dun serveur MySQL, sansaucun effort (ou presque).

    2.3.1 Choisir une image et linstancier

    La dmarche gnrale pour une installation consiste cherche limage qui vous convient sur le site http://hub.docker.com qui donne accs au catalogue des images Docker fournies par la communaut des utilisateurs. La figure Le sitedhbergement des images Docker. (page 14) montre la page daccueil du site.

    Fig. 2.4 Le site dhbergement des images Docker.

    Faites une recherche avec le mot-cl mysql. Comme on pouvait sy attendre, de nombreuses images sont disponibles.La plus standard sappelle tout simplement mysql (figure Les images de serveurs MySQL. (page 15)).

    Choisissez une image, et cliquez sur le bouton Details pour connatre les options dinstallation. En prenant limagestandard, on obtient la page de documentation illustre par la figure Documentation dinstallation de limage mysql(page 15)

    14 Chapitre 2. Prliminaires : Docker

    http://hub.docker.comhttp://hub.docker.com

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Fig. 2.5 Les images de serveurs MySQL.

    Fig. 2.6 Documentation dinstallation de limage mysql

    2.3. Installons MySQL 15

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Vous avez devin ce qui reste faire. Installez limage dans un conteneur sur votre machine avec la commande sui-vante :

    docker run --name serveur-mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:latest

    Vous avez le droit bien sr de choisir librement le nom de votre serveur, et votre mot de passe. Loption -d indique laversion de limage : prenez latest sauf si vous avez de bonnes raisons de faire autrement. La premire fois, limagedoit tre tlcharge, ce qui peut prendre un certain temps. Par la suite, le lancement du conteneur instanciant limageest quasi instantan.

    Cest tout ! Vous avez install et lanc un serveur MySQL. Vous pouvez le vrifier avec la commande suivante quidonne la liste des conteneurs en cours dexcution.

    docker ps

    2.3.2 Accder mon serveur MySQL

    Comment accder mon serveur MySQL, se connecter, crer des bases de donnes, etc ? Il faut se connecter au serveurMySQL avec un programme spcialis, ou programme client. Nous allons utiliser le MySQL Workbench qui peut setlcharger ici : : http://dev.mysql.com/downloads/workbench/.

    Installez ce programme sur votre machine-hte et excutez-le. Vous obtiendrez la fentre de la figure Le client MyS-QLWorkbench (page 16).

    Fig. 2.7 Le client MySQLWorkbench

    Il faut crer une connexion avec le serveur MySQL qui tourne dans notre conteneur serveur-mysql. Ce qui soulveune question dlicate : quelle est ladresse de ce conteneur, et sur quel port peut-on accder au serveur MySQL?Regardons nouveau la figure Les images docker, constituant un pseudo systme distribu (page 10). Pour accder auserveur MySQL, il faut en principe dabord aller sur la VM Docker, puis sur le conteneur serveur-mysql, ce quiest un peu compliqu. Le conteneur serveur-mysql lui-mme excute un processus mysqld (le serveur MySQL)qui est en attente sur le port 3306.

    16 Chapitre 2. Prliminaires : Docker

    http://dev.mysql.com/downloads/workbench/

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Docker fournit un mcanisme pour sauter une tape en associant directement un port sur la machine Docker un portdun conteneur. Arrtez votre conteneur, supprimer-le et rcrez-le avec la commande suivante :

    docker run --name serveur-mysql -p 6603:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -dmysql:latest

    Loption -p indique que le port 3306 du conteneur est renvoy sur le port 6603 de la machine Docker (regardez nouveau la figure Les images docker, constituant un pseudo systme distribu (page 10)). Comme on peut obtenirladresse IP de la machine Docker avec

    docker-machine ip

    cela signifie quon peut se connecter MySQL cette adresse IP (par exemple 192.168.99.100), sur la port 6603, avecle compte root/nfe204. C.Q.F.D. : il ne vous reste plus qu tester cette connexion dans MySQLBench.

    Ouf ! Prenez le temps de bien comprendre, car une fois ces mcanismes assimils, nous serons librs de tot souci pourcrer nos systmes distribus et les exprimenter par la suite. Et je vous rassure : lensemble est gr de manire plusconviviale avec Kitematic (ce qui ne dispense pas de comprendre ce qui se passe).

    2.3.3 Exercices

    Exercice Ex-S2-1 : installez MySQL

    vous de mettre en pratique : vous devez installer une image MySQL, tester la connexion avec MySQLWorkBench,et effectuer les oprations de gestion courante : arrter/dmarrer le conteneur, supprimer le conteneur.

    Exercice Ex-S2-1 : installez MongoDB

    Mme exercice, mais cette fois avec MongoDB, un systme NoSQL trs utilis. Les principes sont les mmes : vousrcuprez une image de MongoDB, vous linstanciez, vous configurez le port daccs, et vous testez laccs avec unclient partir de la machine-hte. Un client populaire est RockMongo (http://rockmongo.com).

    2.4 Kitematic

    Kitematic est linterface graphique de Docker. Elle facilite la gestion des conteneurs et des images et fournit un tableaude bord sur le systme distribu virtuel.

    2.4.1 Installer un nouveau conteneur

    Il suffit de cliquer sur New : on obtient la liste des images disponibles (lquivalent de ce qui est propos sur http://hub.docker.com), avec une fonction de recherche. En cliquant sur une image, elle est tout dabord tlcharge sur lamachine Docker, puis instancie dans un nouveau conteneur.

    Un lien mne de chaque image vers le catalogue des images (hub) Docker : il peut tre utile de consulter la documen-tation dune image pour connatre ses caractristiques.

    2.4. Kitematic 17

    http://rockmongo.comhttp://hub.docker.comhttp://hub.docker.com

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Fig. 2.8 Le client Kitematic

    Fig. 2.9 Choix dun nouveau conteneur / image

    18 Chapitre 2. Prliminaires : Docker

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    2.4.2 Gestion dun conteneur

    En cliquant sur le nom de lun des conteneurs disponibles, on dispose de toutes les options associes : dmarrage(start), arrt (stop), suppression du conteneur (la croix), accs lutilitaire de commandes sur le conteneur(exec), et enfin paramtrages divers (settings).

    Un paramtre important est le renvoi du port de limage instancie dans le conteneur (par exemple le serveur MySQL)vers un port de la machine Docker. Ce renvoi permet daccder avec une application de la machine-hte linstancede limage comme si elle sexcutait directement dans la machine Docker. Reportez-vous la section prcdente pourdes explications complmentaires ce sujet.

    2.4.3 Exercices

    Exercice Ex-S3-1 : installez MySQL avec Kitematic

    Effectuez les oprations dinstallation et de gestion de MySQL avec Kitematic.

    Exercice Ex-S3-2 : installez MongoDB avec Kitematic

    Mme exercice avec MongoDB.

    2.4. Kitematic 19

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    20 Chapitre 2. Prliminaires : Docker

  • CHAPITRE 3

    Modlisation de bases NoSQL

    Ce chapitre est consacr la notion de document qui est la base de la reprsentation des donnes dans lensemble ducours. Cette notion est volontairement choisie assez gnrale pour couvrir la large palette des situations rencontres :une valeur atomique (un entier, une chane de caractres) est un document ; une paire cl-valeur est un document ; untableau de valeurs est un document ; un agrgat de paires cl-valeur est un document ; et de manire gnrale, toutecomposition des possibilits prcdentes (un tableau dagrgats de paires cl-valeur par exemple) est un document.

    Nos documents sont caractriss par lexistence dune structure, et on parlera donc de documents structurs. Cettestructure peut aller du trs simple au trs compliqu, ce qui permet de reprsenter de manire autonome des informa-tions arbitrairement complexes.

    Deux formats sont maintenant bien tablis pour reprsenter les documents structurs : XML et JSON. Le premier esttrs complet mais trs lourd, le second a juste les qualits inverses. Ces formats sont, entre autres, conus pour quele codage des documents soit adapt aux changes dans un environnement distribu. Un document en JSON ou XMLpeut tre transfr par rseau entre deux machines sans perte dinformation et sans problme de codage/dcodage.

    Il sensuit que les documents structurs sont la base des systmes distribus visant des traitements trs grandechelle, autrement dit le NoSQL pour faire bref. Plusieurs de ces systmes utilisent directement XML et surtoutJSON, mais le modle utilis par dautres est le plus souvent, la syntaxe prs, tout fait quivalent. Ce chapitre seconcentre sur JSON. XML, beaucoup plus riche, est un peu trop complexe pour les systmes NoSQL. Quoique sontude soit pertinente et instructive dans le cadre de ce cours, jai choisi de placer le contenu relatif la gestion debases XML en complment, tout le matriel tant maintenant rassembl dans le chapitre Complment : Bases XML(page 75). Je vous invite fortement le consulter, au moins la premire session consacre la modlisation.

    Il est donc tout fait intressant dtudier la construction de documents structurs comme base de la reprsentation desdonnes. Une question trs importante dans cette perspective est celle de la modlisation pralable de collections dedocuments. Cette modlisation est une tape essentielle dans la construction de bases relationnelles, et assez ngligepour les bases NoSQL o on semble parfois considrer quil suffit daccumuler des donnes sans se soucier de leurforme. Ce chapitre aborde donc la question, ne serait-ce que pour vous sensibiliser : construire une collection dedocuments comme une dcharge de donnes est une trs mauvaise ide et se paye trs cher terme.

    Important : Ce chapitre (comme tous les autres) se termine par un Quiz destin vous permettre une auto-valuation :vous devriez pouvoir y rpondre si vous avez bien assimil les notions du chapitre. Sinon il est fortement conseill derelire et dapprofondir.

    3.1 S1 : documents structurs

    Supports complmentaires

    21

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Diapositives: documents structurs et JSON Vido sur les documents structurs Vido sur le codage JSON

    3.1.1 Reprsentation de documents structurs

    Lobjectif est donc de reprsenter des informations plus ou moins complexes en satisfaisant les besoins suivants : Flexibilit : la structure doit pouvoir sadapter des variations plus ou moins importantes ; prenons un docu-

    ment reprsentant un livre ou une documentation technique : on peut avoir (ou non) des annexes, des notes debas de pages, tout un ensemble dlments ditoriaux quil faut pouvoir assembler souplement.

    Richesse de la structure : il faut pouvoir imbriquer des tableaux, des listes, des agrgats pour crer des structurescomplexes.

    Autonomie : quand deux systmes changent un document, toutes les informations doivent tre incluses dansla reprsentation ; en particulier, les donnes doivent tre auto-dcrites : le contenu vient avec sa propre des-cription.

    Srialisation : la srialisation dsigne la capacit coder un document sous la forme dune squence doc-tets qui peut voyager sans dgradation sur le rseau, une proprit essentielle dans le cadre dun systmedistribu.

    Dune manire gnrale, les documents structurs sont des graphes dont chaque partie est auto-dcrite. Commenonspar la structure de base : les paires (cl, valeur). En voici un exemple, cod en JSON.

    "nom": "philippe"

    Et le mme, cod en XML.

    philippe

    La construction (cl, valeur) permet de crer des agrgats. Voici un exemple JSON, dans lequel les agrgats sont codsavec des accolades ouvrante/fermante.

    {"nom": "Philippe Rigaux", "tl": 2157786, "email": "[email protected]"}

    En XML, il faut nommer lagrgat.

    Philippe [email protected]

    On constate tout de suite que le codage XML est beaucoup plus bavard que celui de JSON.

    Important : les termes varient pour dsigner ce que nous appelons agrgat ; on pourra parler dobjet (JSON), dl-ment (XML), de dictionnaire (Python), de tableau associatif (PHP), de hash map (Java), etc. Dune manire gnralene vous laissez pas troubler par la terminologie variable, et ne lui accordez pas plus dimportance quelle nen mrite.Un agrgat est un ensemble de paires (cl, valeur), chaque cl tant unique.

    Nous avons parl de la ncessit de composer des structures comme condition essentielle pour obtenir une puissance dereprsentation suffisante. Sur la base des paires (cl, valeur) et des agrgats vus ci-dessus, une extension immdiate parcomposition consiste considrer quun agrgat est une valeur. On peut alors crer une paire cl-valeur dans laquellela valeur est un agrgat, et imbriquer les agrgats les uns dans les autres, comme le montre lexemple ci-dessous.

    22 Chapitre 3. Modlisation de bases NoSQL

    http://b3d.bdpedia.fr/files/sldocstruct.pdfhttp://avc.cnam.fr/univ-r_av/avc/courseaccess?id=2057http://avc.cnam.fr/univ-r_av/avc/courseaccess?id=2067

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    {"nom": {

    "prnom": "Philippe","famille": "Rigaux"},

    "tl": 2157786,"email": "[email protected]"

    }

    Continuons explorer les structures de base. Une liste est une valeur constitue dune squence de valeurs. Les listessont reprsents en JSON (o on les appelle tableaux) avec des crochets ouvrant/fermant.

    [2157786, 2498762]

    Une liste est une valeur, et on peut donc lassocier une cl dans un agrgat.

    {nom: "Philippe", "tls": [2157786, 2498762] }

    XML en revanche ne connat pas explicitement la notion de tableau. Tout est uniformment reprsent par balisage.

    philippe

    21577862498762

    Note : Un des inconvnients de XML est quil existe plusieurs manires de reprsenter les mmes donnes, ce quidonne lieu des rflexions et dbats inutiles. Un langage comme JSON propose un ensemble minimal et suffisantde structures, reprsentes avec concision. La puissance de XML ne vient pas de sa syntaxe mais de la richesse desnormes et outils associs.

    Et voil pour lessentiel. On peut faire des agrgats dagrgats dagrgats, sans limitation de profondeur. On peutcombiner des agrgats, des listes et des paires (cl, valeur) pour crer des structures riches et flexibles. Enfin, lecodage (JSON ou XML) donne ce que nous appellerons maintenant documents lautonomie et la robustesse (pourdes transferts sur le rseau) attendu.

    3.1.2 Les documents sont des graphes

    Prenons un peu de hauteur pour comprendre le modle de donnes. Un document structur reprsente en fait un arbredans lequel on reprsente la fois le contenu (les valeurs) et la structure (les noms des cls et limbrication desconstructeurs lmentaires). La figure Reprsentation arborescente (JSON : artes tiquetes par les cls) (page 24)montre deux arbres correspondant aux exemples qui prcdent. Les noms sont sur les artes, les valeurs sur les feuilles.

    Le codage associe bien une structure (larbre) et le contenu (le texte dans les feuilles). Une autre possibilit est dereprsenter la fois la structure et les valeurs comme des nuds. Cest ce que fait XML (figure Reprsentationarborescente (XML : cls reprsentes par des nuds) (page 24)).

    3.1. S1 : documents structurs 23

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    Fig. 3.1 Reprsentation arborescente (JSON : artes tiquetes par les cls)

    Fig. 3.2 Reprsentation arborescente (XML : cls reprsentes par des nuds)

    24 Chapitre 3. Modlisation de bases NoSQL

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    3.1.3 Abrg de la syntaxe JSON

    Rsumons maintenant la syntaxe de JSON qui remplace, il faut bien le dire, tout fait avantageusement XML dansla plupart des cas lexception sans doute de documents rdigs contenant beaucoup de texte : rapports, livres,documentation, etc. JSON est concis, simple dans sa dfinition, et trs facile associer un langage de programmation(les structures dun document JSON se transposent directement en structures du langage de programmation, valeurs,listes et objets).

    Note : JSON est lacronyme de JavaScript Object Notation. Comme cette expression le suggre, il a t initialementcr pour la srialisation et lchange dobjets Javascript entre deux applications. Le scnario le plus courant est sansdoute celui des applications Ajax dans lesquelles le serveur (Web) et le client (navigateur) changent des informa-tions codes en JSON. Cela dit, JSON est un format texte indpendant du langage de programmation utilis pour lemanipuler, et se trouve maintenant utilis dans des contextes trs loigns des applications Web.

    Cest le format de donnes principal que nous aurons manipuler. Il est utilis comme modle de donnes natif dansdes systmes NoSQL comme MongoDB, CouchDB, CouchBase, RethinkDB, et comme format dchange sur le Webpar dinnombrables applications, notamment celles bases sur larchitecture REST que nous verrons bientt.

    La syntaxe est trs simple et a dj t en grande partie introduite prcdemment. Elle est prsente ci-dessous, maisvous pouvez aussi vous rfrer des sites comme http://www.json.org/.

    Valeurs simples

    La structure de base est la paire (cl, valeur) (key-value pair).

    "title": "The Social network"

    Quest-ce quune valeur? On distingue les valeurs atomiques et les valeurs complexes (construites). Les valeurs ato-miques sont :

    les chanes de caractres (entoures par les classiques apostrophes doubles anglais (droits)), les nombres (entiers, flottants) les valeurs boolennes (true ou false).

    Voici une paire (cl, valeur) o la valeur est un entier (NB : pas dapostrophes).

    "year": 2010

    Et une autre avec un Boolen (toujours pas dapostrophes).

    "oscar": false

    Valeurs complexes

    Les valeurs complexes sont soit des objets (agrgats de paires cl-valeur) soit des listes (squences de valeurs). Unobjet est un ensemble de paires cl-valeur dans lequel chaque cl napparat quune fois. Cest ce que nous avonsappel agrgat dans un contexte plus gnral.

    {"last_name": "Fincher", "first_name": "David", "oscar": true}

    Un objet est une valeur complexe et peut tre utilis comme valeur dans une paire cl-valeur.

    "director": {"last_name": "Fincher","first_name": "David",

    3.1. S1 : documents structurs 25

    http://www.json.org/

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    "birth_date": 1962,"oscar": true

    }

    Une liste (array) est une squence de valeurs dont les types peuvent varier : Javascript est un langage non typ et lestableaux peuvent contenir des lments htrognes, mme si ce nest sans doute pas recommand. Une liste est unevaleur complexe, utilisable dans une paire cl-valeur.

    "actors": ["Eisenberg", "Mara", "Garfield", "Timberlake"]

    La liste suivante est valide, bien que contenant des valeurs htrognes.

    "bricabrac": ["Eisenberg", 1948, {"prenom", "Philippe", "nom": "Rigaux"}, true, [1,2, 3]]

    Ici, on peut commencer rflchir : imaginez que vous criviez une application qui doit traiter un document come celuici-dessus. Vous savez que cest une liste (du moins vous le supposez), mais vous ne savez pas du tout priori quellesvaleurs elle contient. Pendant le parcours de la liste, vous allez donc devoir multiplier les tests pour savoir si vousavez affaire un entier, une chane de caractres, ou mme une valeur complexe, liste, ou objet. Bref, vous devez,dans votre application, effectuer le nettoyage et les contrles qui nont pas t faits au moment de la constitution dudocument. Ce point est un aspect trs ngatif de la production incontrole de documents (faiblement) structurs, et delabsence de contraintes (et de schma) qui est lune des caractristiques (ngatives) commune aux systme NoSQL.Il est dvelopp dans la prochaine section.

    Limbrication est sans limite : on peut avoir des tableaux de tableaux, des tableaux dobjets contenant eux-mmes destableaux, etc. Pour reprsenter un document avec JSON, nous adopterons simplement la contrainte que le constructeurde plus haut niveau soit un objet (en bref, document et objet sont synonymes).

    {"title": "The Social network","summary": "On a fall night in 2003, Harvard undergrad and \n

    programming genius Mark Zuckerberg sits down at his \ncomputer and heatedly begins working on a new idea. (...)",

    "year": 2010,"director": {"last_name": "Fincher",

    "first_name": "David"},"actors": [{"first_name": "Jesse", "last_name": "Eisenberg"},{"first_name": "Rooney", "last_name": "Mara"}

    ]}

    Les exercices ci-dessous vous invitent commencer rcuprer des documents JSON.

    3.1.4 Exercices

    Exercice Ex-S1-1 : validation dun document JSON

    Comment savoir quun document JSON est bien form (cest--dire syntaxiquement correct) ? Il existe des validateursen ligne, bien utiles pour dtecter les fautes.

    Essayez par exemple http://jsonlint.com/ : copiez-collez les documents JSON donns prcdemment dans le validateuret vrifiez quils sont correct (ou pas...).

    Savez-vous quel est le jeu de caractres utilis pour JSON? Cherchez sur le Web. Savez-vous comment on peutreprsenter de longues chanes de caractres (comme le rsum du film)? Cherchez (aide : regardez en particulier

    26 Chapitre 3. Modlisation de bases NoSQL

    http://jsonlint.com/

  • Bases de donnes documentaires et distribues, Version 2017-201 1.0

    comment grer les sauts de ligne).

    Le document suivant contient (beaucoup) derreurs, vous de les corriger. Cherchez-les visuellement, puis aidez-vousdu validateur.

    {"title": "Taxi driver","year": 1976,"genre": "drama","summary": 'Vtran de la Guerre du Vietnam, Travis Bickle est chauffeur de

    taxi dans la ville de New York. La violence quotidienne l'affecte peu peu.',"country": "USA",

    "director": {"last_name": "Scorcese",first_name: "Martin","birth_date": "1962"},

    "actors": [{first_name: "Jodie","last_name": "Foster","birth_date": null,"role": "1962"}{first_name: "Robert","last_name": "De Niro","birth_date": "1943","role": "Travis Bickle ",}

    }

    Exercice Ex-S1-2 : nos bases de testNous allons rcuprer aux formats JSON le contenu dune base de donnes relationnelle pour disposer dedocuments structure forte. Pour cela, rendez-vous sur le site http://webscope.bdpedia.fr (il sagit dunsite illustrant le dveloppement MySQL/PHP, rdig par Philippe Rigaux). Sur ce site vous trouverez unmenu Export : vous pouvez slectionner des films et exporter leur reprsentation en JSON ou XML.La fonctionnalit dexport illustre plusieurs possibilits et permet de les combiner, ce qui vous permetdapprcier concrtement les caractristiques de la modlisation semi-structure. export en format XML ou JSON; sous forme de documents totalements indpendants les uns des autres, ou de documents lis par des

    rfrences ; sous forme dun seul fichier/document reprsentant lensemble de la base, ou avec un fichier/document

    par entit.Votre objectif est de crer une hirarchie de rpertoires sur votre ordinateur local, dont la racine est unrpertoire movies, avec le contenu suivant un fichier movies.xml contenant tous les films, sans rfrences, en XML; un fichier movies.json contenant tous les films, sans rfrences, en JSON; un rpertoire movies-xml, avec un fichier XML pour chaque film; un rpertoire movies-json, avec un fichier JSON pour chaque film; un rpertoire refs-xml, avec

    un fichier movies-refs.xml, contenant les films et des rfrences vers les