• Home
  • About
    • Ahmed DAMMAK photo

      Ahmed DAMMAK

      Full Stack Developer

    • Learn More
    • Twitter
    • LinkedIn
    • Github
  • All Posts
  • All Tags
  • Projects

A la découverte des Base de données

22 Apr 2022

Reading time ~6 minutes

A la découverte des base de données

Talk de Pierre Zemb @PierreZ - Spécialiste des bases de données distribuées chez Clever Cloud.

Présentation

Nous avons l’habitude en tant que développeur de traiter les bases de données comme des services capables de ranger, organiser et stocker durablement nos informations. On oublie assez facilement que ce sont des logiciels à part entière. Depuis plus de 50 ans, industriels et chercheurs développent de nouvelles architectures et techniques d’ingénierie pour les rendre plus scalables et plus performantes. Je vous propose d’ouvrir le capot et de découvrir comment fonctionne une base de données.

Dans cette université de 3 heures, vous allez pouvoir découvrir dans un premier temps comment fonctionne une base de données: de l’organisation des fichiers aux indexes, en passant par le traitement de requêtes et la gestion de transactions. Puis nous aborderons les bases de données distribuées, avec leurs lots d’enjeux comme la réplication, le consensus et la coordination.

Notes

CleverCloud est une Plateforme as a service : Récupère le code / build / deploy / Scale … et propose aussi des service managés.

Il existe 802 BDD recensées : Il y a énormément de critère pour choisir des BDD (Site : Base de données des base de données)

Une BDD est une combinaison de plusieurs paramètres :

  • OSS Or not
  • Embeeded / signle Node / Distributed ?
  • Query Language ?
  • Data Model
  • Scalability
  • Transactional
  • Indexed ?
  • Storage
    • row, column ?
    • on disk / in memory ?
  • Stored Procedure ?

Importance des bases de données

La donnée a une notion de gravité ! Les applications gravitent autour des BDD. A certains moment, on se retrouve avec une BDD bq trop chère à l’entreprise et donc virtuellement impossible à changer. La data doit être en mode galaxy avec plusieurs BDD centrés sur les uses cases/applciation.

Les nouvelles architectures sont data-intensive -> Le bottleneck sera généralement dans la BDD

On doit comprendre comment fonctionne la BDD pour mieux choisir !

Les parties qui seront discutées :

DBMS

  • Data base management system
  • La BDD est une collection de données

Ce qui peut mal se passer :

  • Intégrité des données
  • Implementation
  • Durabilité
  • Replications

Il existe plusieurs langages :

  • SQL : Structured query language. Il y a plusieurs sous-langages teqlues :
  • DML Data Manipulation language
  • DDL : Data Definition Language

NewSQL (Distributed SQL)

  • Nouvelle BDD from scratch
  • CocroachDB / Yugabyte (Open source)
  • Supporte le langage SQL

Apache Arrow

  • BDD orienté ML
  • Déporté le calcul vers le GPU

BDD presto :

  • des fichiers stockées sur le filesystem
  • Un système qui va les requêtes

Storage Management

2 questions :

  • Comment une BDD représente sa sonnées sur le disque
  • Comment on fait pour lire/écrire la données depuis le disque ?

Disk based architecture : DBMS enregistre sur des support non volatiles (hors mémoire)

L’I/O est couteux.

La BDD va stocker sa donnée dans des fichiers avec un format propre

Le fichier est adressé sous forme de bloc (avec des petites unités allouables). Un fichier est divisé en bloc de 4KO. Une page est un morceau de fichier (header + data) -> Fractionnée

Quand on stocke la donnée, on remplie bloc par bloc.

Il y a 2 familles pour le type de requetage :

  • OLTP : N’est pas adapté pour le scan par colonne
  • OLAP : analytique (lecture rapide de bq de données) - eg clickhouse

Un scan contigue est toujours optimisé. Donc, on le fais au niveau de stockage.

Snowflake (Spanner) côté google pour expliquer comment ils utilisent le format PAX.

Au niveau du stockage :

  • buffer pool : qui permet de récupérer la donnée au niveau de la mémoire. Permet de monter la donné en mémoire pour la donner au execution engine
  • Disk : qui contient un directory page

Pour la Data recovery : On stocke toutes les modifications dans un fichier a coté. (Un WAL). Si on perd la BDD, on peut rejouer l’historique

Conclusion

Il est important de bien choisir :

  • son modèle de BDD entre OLTP (Row store) et OLAP (column Store)
  • Son WAL

Query engine - Query processing

Qu’est ce qui se passe quand on envoie une requête a la BDD ?

Query engine est le Composant des BDD qui va executer la requête sur la donnée

Les étapes sont :

  • SQL request
  • validation (via le parser)
  • Générer un plan logique
  • Optimizer
  • Physical plan
  • execution engine
  • results

L’optimiseur est le coeur de la BDD. Il va chercher le meilleurs moyen moyen d’executer la requete. Les stats sont enregistrés pour optimiser les choix.

Projet apache calcite : FWK pour créer un moteur de requete. See Le repo de la dem.

Le Query engine connais comment la data est stockée (l’ordre des champs).

Les optimisation c’est un compromis entre les règles et les couts

Meme si on est sur un système distribué, on peut faire des optimisations.

Conclusion :

  • Eviter le full scan
  • Le plan logique/physique sont accessible via l’EXPLAIN

Transaction Management

Une transition = 1 unité logique ACID transactions :

  • Atomic : toutes les opérations se sont accomplies
  • Consistency : L’état de la BDD est en état consistent aprs l’opération
  • Isolation : La transaction doit se sentir toute seule (voir photo pour les niveaux d’isolation)
  • Durabilité : la transaction est enregistrée dans le temps

Il existe plusieurs niveaux d’isolation :

Serialisable : Permet de changer les exécution concurrente en une suite de transactions.

  • 1 seul thread (eg Redis) -> Mono thread : récupére l’ordre des transaction et sais après les exécuter
  • Utiliser des locks SSI Serializable Snapshot Isolation : Implémentation MVCC. Au lieu de maintenir la donné, on implémente plusieurs fois la ligne dans le stockage (Ecriture/lecture ne bloquent pas)

L’inconvénient du MVCC : il faut faire du nettoyage des anciennes versions.

Conclusion

  • utiliser les transactions
  • Attention à la concurrence / isolation

Distributed systems

Questions :

  • Replication
  • Sharding
  • Problèmes

Replication :

  • garder une copie de ma donnée sur plusieurs machines
  • Baisser la latence
  • La BDD continue de fonctionner meme s’il y a des problèmes
  • Augmenter la capacité à lire

3 algo :

  • Leader - follower :
  • Les R/W passent par la Primary
  • Le flux de modifs sera envoyé vers d’autres nous pour la lecture

Il y a 2 manière :

  • replication synchrone
  • Replication asynchrone : Le leader n’attend pas pout faire la réponse au driver

Problème de la replication leader :

  • Il y aura un lag de replication : Eventual consistency
  • Commits peuvent être perdus

Consensus :

  • Paxos (utilisé dans les clouds)
  • Raft (plus simple)
  • ZAB (utilisé par Zookeeper)

Les algo permettent :

  • election du leader
  • Replication
  • Rajout d’un membre

Découpage de données / Sharing :

  • split des dataset (partionnement) : découper les données dans une partitions (appelé aussi region / tablet / vnode …)
  • Objectif principal
    • Soit découpage par clé (apache Hbase / Spanner) et il faut avoir un annuaire pour savoir qui a la donnée (Annuaire : qui est responsable de quoi ..)
    • Soir Découpage par hash (eg Cassandra / riak) : Calculer pour savoir qui porte quoi en fonction de la clé et Les hash sont répartis sur plusieurs serveurs

Désanvantage : topology très fixe sur les machines. Rajouter des machines est complexe.

On peut avoir des topologies de machines en fonction des range des clés.

Les clés sont des bytes. On peut mettre l’infos qu’on veut dedans.

Layered stack :

  • les nouvelles architectures se basent sur un gros clé valeur
  • des layers qui permettent d’e rajouter des services

Ecirre des systeme disctribué c’est tres compliqué.

Théorie de CAP : Il faut trouver un compromis entre

  • Consistence
  • Dispo
  • Tolerence a la panne

Attention : System nano time is monotonic

Jepsen : détruire et vérifier les problèmes des BDD

La panne dans les BDD n’est pas rare :



Devoxx2022