class: center, middle, inverse # Cours NoSQL ## Haïkel Guémar - haikel.guemar@gmail.com --- class: center, middle, inverse # NoSQL: Introduction --- class: middle ## Law of Hammer ![Law of Hammer](img/law-of-hammer.jpg) --- class: middle ## Loi des SGBDR ![loi des SGBDR](img/law-of-sgbr.jpg) --- class: middle ## Nouveaux besoins en gestion de données * L'essor du Big Data: Volume, Variété, Vélocité, Variabilité * Contexte fortement distribué * Généralisation du "commodity hardware" dans les datacenters --- class: middle ## Limites des SGBDR * Systèmes transactionnels (ACID: Atomicity/Consistency/Isolation/Durability) * difficilement conciliable avec de bonnes performances dans un système distribué --- class: middle ## Théorème de CAP (ou de Brewer, 2000) 3 propriétés essentielles pour un système distribué: * Consistency * Availability * Partition tolerance => __Impossible d'avoir ces 3 propriétés simultanément__ --- class: middle ## Théorème de CAP
* Les SGBDR sont des systèmes AC * Les bases NoSQL: AP (Cassandra, CouchDB, Riak) ou CP (MongoDB, Redis, Memcached) --- class: center, middle, inverse # Not Only SQL --- class: middle ## NoSQL entre en jeu * À l'origine: No SQL * Maintenant: Not Only SQL * Popularisé dans les années 2010 par les géants du Web --- class: middle ## NoSQL: caractéristiques 1/2 * Représentation des données non-relationnelles * Meilleures performances avec des volumétries plus importantes * Distribution des données * Compromis sur ACID pour plus de scalabilité horizontale * Compléte les SGBDR --- class: middle ## NoSQL: caractéristiques 2/2 * Schéma-less * Structures de données complexes et imbriqués * Distribution des données: partitionnement horizontal sur plusieurs noeuds * Réplication des données * Disponibilité > Cohérence (l'aspect transactionnel est optionnel) * Peu d'écriture, Beaucoup de lecture --- class: middle ## Partitionnement horizontal aka sharding * Partitionnement en fonction d'un clé (fonction de hachage) * Partitionnement en fonction de la charge, optimisation des accès * Partitionnement parfois vertical (par colonnes) où les données d'un même objet sont sur plusieurs noeuds --- class: middle ## Map/Reduce * Modèle de programmation parallèle pour le traitement de larges volumes de données. * [Développé par Google](http://www.google.com/patents/US7650331) * Caractèristiques: * Répartition de la charge sur un grand nb de noeuds * Abstraction du matériel (gére la distribution des données, répartition de la charge, tolérance aux pannes) * Scalabilité * Utilisé par les géants du web: Google (indexation du web), Data mining (Facebook), etc. --- class: middle ## Map/Reduce ![mapreduce](img/mapreduce.png) --- class: middle ## Multi Version Concurrency Control (MVVC) * Méthode de contrôle de concurrence couramment utilisé dans les SGBDR pour gérer les accès concurrents * Dans une base NoSQL, les mises à jours sont gérés: * on ne remplace pas les données modifiés * on versionne les données et on marque obsolètes les anciennes * nettoyage périodique des versions obsolètes --- class: middle ## Horloges vectorielles (vector clocks) Comment assurer des modifications concurrentes sans transactions ? * solution: horloges vectorielles * vecteur d'horloge: un n-uplet * chaque noeud maintient son vecteur d'horloge * les valeurs d'horloge peuvent être des timestamps --- class: middle ## Typologie des bases NoSQL * Orienté clés/valeurs * Orienté colonnes * Orienté documents * Orienté graphes --- class: center, middle, inverse # Clés/valeurs --- class: middle ## Bases clés/valeurs (1/3) * Données stockés sous forme
* Aucune structure ou typage * Implémentation: Redis, Amazon Dynamo, Riak, TokyoCabinet * Exploitation: modèle CRUD * API REST * Excellente performances et scalabilité horizontale --- class: middle ## Bases clés/valeurs (2/3) * Avantages * Modèle de données simples * Mise à l'échelle horizontale * Aucune maintenance * Inconvénients * Pas de langage de requêtes (uniquement sur clés) * Complexité déportée vers l'applicatif --- class: middle ## Bases clés/valeurs (3/3) Utilisations principales * cache * profils * paniers d'achats * logs * etc. --- class: center, middle, inverse # Orienté colonnes --- class: middle ## Bases orienté colonnes (1/3) * Les données sont stockés par colonne * Facile d'ajouter une colonne, il est couteux d'ajouter une ligne * Possibilité de compresser les données d'une colonne * Proche d'un SGBDR mais avec un nb de colonnes dynamique * Nb de colonnes variables par enregistrement * ex: Cassandra, HBase --- class: middle ## Bases orienté colonnes (2/3) * Avantages * Données semi-structurés * Indexation incluses (colonnes) * Scalabilité horizontale * Map/Reduce * Requêtage en temps Réel * Inconvénients * Peu adapté aux données interconnectés ou complexes * Maintenance lors de l'ajout/suppression de colonnes * Pas de requêtes ad-hoc --- class: middle ## Bases orienté colonnes (3/3) Utilisation principales * Logs (netflix) * BI (Adobe) * Optimisation de la recherche (eBay) --- class: center, middle, inverse # Orienté documents --- class: middle ## Bases orienté documents * Stockage de documents * Modèle clé/valeur ou la valeur est une donnée semi-structuré (JSON/XML) * Pas de schéma mais une structure arborescente * API REST et requêtage complexe * ex: MongoDB, CouchDB --- class: middle ## Le document * Structure composé de champs et de valeurs associées * Valeurs scalaires ou composés requêtables * Structurés mais pas de schéma prédéfini * Documents hétérogénes au sein d'une même base --- class: middle ## Bases orienté documents * Avantages * modèle simple mais puissant * Passage à l'échelle (sharding) * Pas de maintenance pour ajouter/supprimer des colonnes * langage de requêtage complexe * Inconvénients * Peu adapté aux données interconnectées * Lent pour les grandes requêtes --- class: middle ## Bases orienté documents Usage * Enregistrement d'événements * Catalogue de produits * CMS * etc. --- class: center, middle, inverse # Orienté graphes --- class: middle ## Bases orienté graphes (1/3) * Modélisation/Indexation/manipulation de données liés par des relations complexes * Basé sur la théorie des graphes * Notions de noeuds/relations/propriétés * Construites autour d'un moteur de stockage de données et d'un mécanisme de descriptions d'arc * ex: Neo4j --- class: middle ## Bases orienté graphes (2/3) * Avantages * Modèle de données puissant * Rapide pour les données liées * Modèle d'interrogations standardisés et performants: SPARQL * Inconvénients * Fragmentation --- class: middle ## Bases orienté graphes (3/3) * BI * Moteur de recommandation * Semantic Web * Généalogie * Données spatiales --- class: middle ## Web Sémantique * Store de triplets RDF * fondation du web sémantique * sérialisé en langage RDF (dialecte XML) * chaque ligne a une stucture "noeud-lien-noeud" * possibilité de joindre les graphes ensembles * possibilité de fusion automatique de 2 graphes * requêtage des données RDF avec le langage SPARQL --- class: middle, center, inverse # Q/A