0% ont trouvé ce document utile (0 vote)
4 vues82 pages

Bases de données orientées colonnes NoSQL

Le document présente les bases de données orientées colonnes, en se concentrant sur HBase et Cassandra, qui sont des implémentations de la technologie BigTable de Google. Il décrit leur architecture, leurs cas d'utilisation, ainsi que leurs avantages et inconvénients, notamment en termes de gestion de données massives et de tolérance aux pannes. Le document aborde également les opérations CRUD et les meilleures pratiques pour la modélisation des données dans ces systèmes.

Transféré par

Stephane Tchinda
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues82 pages

Bases de données orientées colonnes NoSQL

Le document présente les bases de données orientées colonnes, en se concentrant sur HBase et Cassandra, qui sont des implémentations de la technologie BigTable de Google. Il décrit leur architecture, leurs cas d'utilisation, ainsi que leurs avantages et inconvénients, notamment en termes de gestion de données massives et de tolérance aux pannes. Le document aborde également les opérations CRUD et les meilleures pratiques pour la modélisation des données dans ces systèmes.

Transféré par

Stephane Tchinda
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Modèle colonne

▪ Principes
▪ HBase
▪ Cassandra

©Maude Manouvrier - Univ. Paris-Dauphine 340


Base de données colonnes
▪ Proches des bases de données relationnelles
▪ Données logiquement structurées en tables, lignes et colonnes
▪ Nombre de colonnes dynamique et pouvant varier d’un
enregistrement à un autre
▪ Pas de stockage des valeurs NULL
▪ Stockage uniquement des données avec de valeurs
▪ Suit l’approche BigTable apportée par Google dont HBase est une
implémentation open source

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 341


Colonnes et familles de colonnes
▪ Colonne
• Couple clé/valeur
• Représentation d’un champ de données
• Super Colonne : colonne contenant d’autres colonnes
▪ Famille de colonnes
• Regroupement de plusieurs colonnes ou super-colonnes
• Colonnes sont regroupées en lignes
• Identifiant unique pour chaque ligne

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de de [Link]/rchiky/nosql/[Link] et de [Link] 342


Base de données colonnes : cas d’utilisation
▪ Cas d’utilisation :
• Journalisation d’évènements ou comptage et catégorisation des visiteurs d’une page
web
• Utile pour les données éparses
• Utile pour les tâches d’analyses sur des colonnes et dans les traitements massifs (via
des opérations de MapReduce)
▪ Non applicable aux:
• Applications avec des besoins de transactions ACID
• Données interconnectés (distance, trajectoire)
• Agrégation (effectuée par l’application client)

©Maude Manouvrier - Univ. Paris Dauphine - Adapté de [Link]/rchiky/nosql/[Link] 343


Principaux moteurs orientés colonne

©Maude Manouvrier - Univ. Paris-Dauphine - [Link] 344


BigTable
▪ Base de données propriétaire gérée en interne chez Google
▪ Accessible au public uniquement via Google App Engine
▪ Ecrite en C++
▪ Cohérence forte (strong consistency)
▪ Stockage de données basé sur le système de fichiers distribués GFS
(Google File Systems)
▪ Site officiel : [Link]
▪ Article d’origine : [Link]
[Link]

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]/rchiky/nosql/[Link] 345


BigTable : concepts de base

▪ Map multi-dimensionnelle
▪ Row key : clé unique d'une entité (string de 64KB)
▪ Column family : groupe d'attributs (colonnes) reliés
▪ Column : comporte différentes versions de la donnée (ordonnées par
timestamp décroissant)
▪ Accès à une donnée : Row key → column family → column →
timestamp

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]/rchiky/nosql/[Link] 346


BigTable : modèle de données (clés et estampilles)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 347


BigTable : modèle de données (famille de colonnes et qualifier)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 348


HBase

▪ Implémentation libre du moteur BigTable de Google


▪ Partie du projet Hadoop de Apache
▪ Écrit en Java
▪ Architecture Maître/Esclave
▪ Utilise HDFS (Hadoop Distributed File System) et
ZooKeeper (système open-source de synchronisation et de
coordination des systèmes distribués)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 349


HBase : liens utiles

▪ Site officiel : [Link]


▪ Tutoriels et cours en ligne :
• [Link]
travailler-hbase
• [Link]
• [Link]
hbase?autoplay=true&u=74606242

©Maude Manouvrier - Univ. Paris Dauphine 350


Hbase : Architecture
Stockage de chaque famille de colonnes dans un HFile

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 351


Hbase : Modèle de données

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 352


Hbase : Exemple de table

▪ 2 familles : Personnel (de colonnes Prénom et Age) et Contact (de colonnes Téléphone et Ville)
▪ Pour la clé 0001 : 3 versions (suite au changement d'âge et de ville du contact)
©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 353
Hbase : Modèle de données

Stockage des
données sous forme
de HFiles, par
colonnes, dans
HDFS.

une column
family particulière
par HFile

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 354


Hbase : gestion des données
▪ Plusieurs étapes d’écriture :
• Ecriture dans un WAL (Write-Ahead Log)
• Placement des données dans un buffer nommé memstore
▪ Memstore écrit dans un HFile sur le HDFS lorsque trop gros
▪ Suppression :
• Gérées à l’aide d’un marqueur tombstone
• Réelle au moment d’un compactage

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 355


Hbase : HMaster et RegionServers
▪ HMaster : nœud maître
▪ RegionsServers : nœuds esclaves
▪ Stockage des données distribué sur
les RegionsServers gérés par le
Hmaster
▪ Tables HBase rendues persistantes
sur le disque sous forme de fichiers
HDFS appelés HFiles

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 356


Hbase : partition d’une table

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 357


Hbase : que se passe-t-il lors d’une
demande de données ?

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 358


Hbase : Les bonnes questions à se poser pour la
modélisation
▪ Quelle est la structure des valeurs de la row key ?
▪ Combien de familles de colonnes la table doit-elle avoir ?
▪ Quelles données vont dans quelle famille de colonnes ?
▪ Combien de colonnes y'a t-il dans chaque famille ?
▪ Quel est le label ou titre de chaque colonne ?
▪ Quelles données seront stockées dans les cellules ?
▪ Combien de versions de chaque cellule HBase devra-t-elle historiser ?
©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 359
Hbase : "Best practices" pour la modélisation
▪ Regrouper les colonnes utilisées selon le même schéma dans la même
famille de colonnes
▪ Limiter autant que possible à 10 ou 15 le nombre de familles de
colonnes par table
▪ Donner le nom de toutes les colonnes à la création de la table même si
les colonnes elles-mêmes n'existent pas encore
▪ Dénormaliser au maximum les tables modélisées

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 360


Hbase : opérations CRUD (création d’une table)
Création d’une nouvelle table : commande create

©Maude Manouvrier - Univ. Paris Dauphine - - Repris de [Link] 361


Hbase : opérations CRUD (get et put)
▪ get : équivalent à SELECT en SQL
▪ put : équivalent à INSERT en SQL

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 362


Hbase : exemples de get et put

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 363


Hbase : opérations CRUD (scan et delete)
▪ scan : lecture séquentielle
▪ delete : équivalent à DELETE en SQL mais création par HBase de
marqueurs sur chaque valeur à supprimer et suppression de celles-ci
massivement lorsqu'HBase effectue un compactage de la table
▪ Possibilité d’utiliser un langage d'abstraction comme HiveQL ou Pig
Latin, pour créer et manipuler les tables HBase

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 364


HBase : avantages et inconvénients
▪ Tolérance aux pannes
▪ Gestion de gros volumes de données
▪ Ecosystème Hadoop

▪ Pas de support pour les jointures (à faire au niveau applicatif)


▪ Single-row ACID
▪ Ecosystème Hadoop

©Maude Manouvrier - Univ. Paris Dauphine 365


HBase vs relationnel

©Maude Manouvrier - Univ. Paris Dauphine – repris de [Link] 366


Cassandra
▪ Conçu à l’origine par Facebook
▪ Actuellement projet de la fondation Apache (2008)
▪ Distribué par la société Datastax
▪ Initialement basé sur le système BigTable de Google (stockage orienté
colonnes)
▪ Maintenant basé sur le système DynamoDB (hachage) ⇒ stockage
orienté ”clé/valeur”
▪ Un des rares systèmes NoSQL à proposer un typage fort
▪ Ecrit en Java
©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 367
Cassandra : modèle relationnel étendu
▪ Evolution vers un modèle relationnel étendu
▪ Langage d’interrogation : Cassandra Query Language (CQL)
▪ Pas d'architecture maître/esclave – Architecture pair à pair
▪ Système scalable et distribué :
• Méthodes de passage à l’échelle inspirées du système Dynamo
(Amazon)
• Distribution par hachage (consistent hashing)
• Tolérance aux pannes par réplication en mode multi-nœuds
• Cohérence réglable (tunable consistency)
©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] et Repris de [Link] 368
Cassandra : liens utiles
▪ Site officiel : [Link]
▪ Documentation en ligne :
[Link]

▪ Version entreprise : Datasax AstraDB (multi-cloud DBaaS based on Apache


Cassandra) [Link]
▪ Cours en ligne :
• [Link]
• [Link]
• [Link]
• [Link]
©Maude Manouvrier - Univ. Paris Dauphine 369
Cassandra : modèle de données
▪ Bases de données : Keyspace
▪ Tables : Table ou Column Family (lignes organisées en partition)
▪ Partition : regroupement de lignes stockées sur le même nœud
▪ Lignes : Row (valeurs simples ou complexes)
▪ Relationnel étendu en rompant la première règle de normalisation (type
atomique).
▪ Ligne (row) : document structuré (imbrication) avec identifiant (row key) associé
à un ensemble de paires (clé, valeur).
▪ Lignes typées par un schéma, y compris les données imbriquées
▪ Pas d’insertion de données ne respectant pas le schéma

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] et Repris de [Link] 370
Cassandra : nombre de colonnes flexible

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 371


Cassandra : clé de partition

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 372


Cassandra : répartition des données selon la clé de
partition

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 373


Cassandra : exemple de table

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 374


Cassandra : pas de stockage des valeurs null

Affiché null sous cqlsh

Ce qui est réellement stocké :

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 375


Cassandra : principes
▪ Pas de jointure : duplication
▪ Dénormalisation et possibilité de gérer des vues matérialisées au dessus d’une
même table
▪ Pas d’intégrité référentielle (pas de clé étrangère)
▪ Modélisation orientée requêtes (Query-first design)
▪ Prise en compte du stockage : stockage de chaque table dans un fichier séparé –
nécessité de conserver les colonnes allant ensemble au sein d’une même table et
de minimiser le nombre de partitions
▪ Pas de requête de tri – gestion du tri par l’ordre ascendant ou descendant des clés
de regroupement (clustering columns)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 376


Cassandra : dénormalisation
▪ Jointures inexistante  dénormalisation du modèle
▪ Regrouper des données le plus possible dans des lignes
▪ Conception orientée sur les requêtes les plus fréquentes de
l’application
▪ Dimension la plus grande souvent favorisée (meilleure distribution)
!▪  redondance et possibilités d’incohérence

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 377


Cassandra : exemple de dénormalisation
Jointures inexistante  dénormalisation du modèle

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 378


Cassandra : une table par requête
Jointures inexistante  dénormalisation du modèle

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 379


Cassandra : exemple de la documentation

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 380


Cassandra : modèle relationnel de l’exemple de la
documentation

Modèle relationnel
orienté donnée

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 381


Cassandra : Modèle orienté par les requêtes (1/3)

Chebotko logical diagram


©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 382
Cassandra : Modèle orienté par les requêtes (2/3)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 383


Cassandra : Modèle orienté par les requêtes (3/3)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 384


Cassandra : langage CQL (création)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 385


Cassandra : langage CQL (insertion)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 386


Cassandra : langage CQL (sélection)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 387


Cassandra : langage CQL (utilisation des estampilles)
▪ Toute valeur est associée à un TIMESTAMP
▪ Estampillage automatique (ms) lors de la mise à jour
▪ Possible de spécifier l’estampille dans les requêtes

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 388


Cassandra : exemples de requêtes CQL

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 389


Cassandra : Exemple (1/5)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 390


Cassandra : Exemple (2/5)
On ne souhaite pas faire des requêtes sur les utilisateurs mais on souhaite :
▪ Connaître les vidéos insérées par un utilisateur dont on connaît le login
▪ Accéder à toutes les informations d’une vidéo
▪ Connaître les commentaires par vidéo et par utilisateur

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 391


Cassandra : Exemple (3/5)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 392


Cassandra : Exemple (4/5)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 393


Cassandra : Exemple (5/5)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 394


Cassandra : Clé de partition et de regroupement
Table avec une clé de partition à 1 attribut Table avec une clé de partition à 2 attributs

Table avec une clé de partition à 1 attribut Table avec une clé de partition à 2 attributs
et une clé de regroupement à 2 attributs et une clé de regroupement à 2 attributs

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 395


Cassandra : attributs complexes
Pour un attribut peut être associé à un type complexe :
▪ SET : ensemble valeurs (non ordonnées)
▪ LIST : liste de valeurs (ordonnées)
▪ MAP : hashMap clé/valeur
▪ SubType : ligne imbriquée

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 396


Cassandra : attribut de type SET

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 397


Cassandra : attribut de type LIST

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 398


Cassandra : attribut de type MAP

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 399


Cassandra : attribut d’un type imbriqué

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 400


Cassandra : architecture
▪ Base de donnée contenue dans un cluster ou ensemble de data-centers (ensemble
de nœuds qui sont dans un environnement géographique proche)
▪ Données réparties sur plusieurs nœuds et éventuellement répliquées sur 1 à N
nœuds
▪ Possibilité pour un utilisateur de se connecter sur n'importe quel nœud et accéder
à l'ensemble des données.

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 401


Cassandra : memtable, commitlog et SSTable

(pour assurer Sorted String Table


de la durabilité)

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 402


Cassandra : contenu d’un nœud

©Maude Manouvrier - Univ. Paris Dauphine - - Repris de [Link] 403


Cassandra : nœud coordinateur

©Maude Manouvrier - Univ. Paris Dauphine - - Repris de [Link] 404


Cassandra : cohérence
▪ Extension de la notion de cohérence éventuelle à une cohérence ajustable
▪ Choix du niveau de cohérence défini par requête : clause USING CONSISTENCY
(niveau ONE par défaut)
▪ Ecriture :
• Niveau ONE : écriture effectuée sur au moins un nœud
• Niveau ALL : écriture effectuée sur tous les N nœuds (avec N=ReplicationFactor)
• Niveau QUORUM : écriture effectuée sur M nœuds (avec M=|ReplicationFactor/ 2| + 1)
▪ Lecture :
• Niveau ONE : enregistrement retourné par le premier nœud qui répond
• Niveau ALL : Requête sur tous les nœuds et sélection de l'enregistrement avec
l’estampille (timestamp)la plus récente (Si un nœud ne répond pas, l'opération échoue)
• Niveau QUORUM :Requête sur M nœuds et sélection de l'enregistrement avec le
l’estampille (timestamp) la plus récents retournée par la majorité des nœuds

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]/rchiky/nosql/[Link] 405


Cassandra : niveau de cohérence ONE en écriture avec
un facteur de réplication de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 406


Cassandra : niveau de cohérence QUORUM en écriture avec
un facteur de réplication de 2

M=|ReplicationFactor/ 2| + 1 = 2

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 407


Cassandra : niveau de cohérence QUORUM
Exemple d’échec en écriture avec un facteur de rép. de 2

M=|ReplicationFactor/ 2| + 1 = 2

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 408


Cassandra niveau de cohérence QUORUM en écriture avec
un facteur de réplication de 3

M=|ReplicationFactor/ 2| + 1 = 2

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 409


Cassandra : niveau de cohérence QUORUM
Exemple d’échec en écriture avec un facteur de rép. de 3

M=|ReplicationFactor/ 2| + 1 = 2

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 410


Cassandra niveau de cohérence ALL en écriture avec
un facteur de réplication de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 411


Cassandra : niveau de cohérence ALL
Exemple d’échec en écriture avec un facteur de rép. de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 412


Cassandra : niveau de cohérence ONE en lecture avec un
facteur de réplication de 3 - lecture sur n’importe quel nœud

Le client ne sait
où la donnée
sera lue.

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 413


Cassandra : niveau de cohérence ONE en lecture
avec un facteur de réplication de 3 – possibilité de
« réparer » la lecture

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 414


Cassandra : niveau de cohérence ONE en lecture avec
un facteur de réplication de 3 – réussite même en cas de
panne d’un ou plusieurs nœuds

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 415


Cassandra : niveau de cohérence QUORUM en
lecture avec un facteur de réplication de 3

M=|ReplicationFactor/ 2| + 1 = 2

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 416


Cassandra : niveau de cohérence ALL en lecture
avec un facteur de réplication de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 417


Cassandra : niveau de cohérence ALL en lecture Exemple
d’échec en écriture avec un facteur de rép. de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 418


Cassandra : Moduler le niveau de cohérence
Exemple avec un facteur de réplication de 3

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link] 419


Cassandra : conclusion
▪ Rapidité d’écriture
▪ Haute performance, Décentralisation, Support de réplication
▪ Cohérence réglable

▪ Performances de lecture dépendant du modèles de données


▪ Pas d'intégrité référentielle
▪ Limitation des tailles des colonnes et des super-colonnes

©Maude Manouvrier - Univ. Paris Dauphine - Repris de [Link]/rchiky/nosql/[Link] et de [Link] 420


Exemple
d’applications
polyglottes
utilisant
Cassandra et
Redis

©Maude Manouvrier - Univ. Paris Dauphine – repris de [Link] 421

Vous aimerez peut-être aussi