1 of 52

MongoDB introduction

Michel Buffa

29/09/2020

1

2 of 52

MongoDB c’est quoi ?

2

3 of 52

“Enorme BD ?”

  • Le nom vient de “Humongous” (énorme) et de DB
  • Ecrit en C++, developppé en 2007-2009
  • Créé par la société 10gen, devenue depuis MongoDB Inc. Partenariat en 2019 avec Ali Baba (MongoDB Cloud)

3

4 of 52

MongoDB: objectifs

  • Combler le fossé entre les “stores” orientés clé-valeur (qui sont rapides et évolutifs) et les bases de données relationnelles (qui ont de riches fonctionnalités).

4

5 of 52

Alors MongoDB ?

  • Définition: MongoDB est une base de données open source, orientée-document, conçue en tenant compte à la fois de l'évolutivité et de l'agilité (pour les développeurs).
  • Au lieu de stocker les données dans des tables et lignes comme dans une base relationelle, MongoDB stocke des documents “JSON-like” autorisant des schémas dynamiques (on parle de BD “schema-free” ou de “schemaless”).

5

6 of 52

Alors MongoDB ?

  • BD orientée documents ?
    • La donnée unitaire est un objet JSON,
    • Pas une ligne comme dans

les BDs relationnelles

6

7 of 52

Performant ?

  • Pour les relations semi-structurées et complexes : Oui

7

8 of 52

Adoption ?

8

9 of 52

Intégration ?

9

10 of 52

BDs NoSQL ???

10

11 of 52

NoSQL: Catégories

11

12 of 52

Qu’est-ce que NoSQL ?

  • Signifie Not Only SQL !

  • Une classe de BDs non relationnelles

  • En général, n'exigent pas un schéma de table fixe et n'utilisent pas le concept de jointures
    • Systèmes de stockage de données distribués

  • Toutes les offres NoSQL relâchent une ou plusieurs des propriétés d'ACID (Atomicité, Consistence, Isolation, Durabilité)
    • Nous parlerons rapidement du théorème CAP

12

13 of 52

La famille “orientée colonne”�(ex: Hbase)

13

APIs: get(key), put(key, value), delete(key), …

MongoDB a un modèle de données plus flexible et des requêtes plus puissantes

14 of 52

Theorème CAP (ou CDP)

  • Parmi ces trois propriétés
    • Coherence (toutes les copies ont la même valeur)
    • Availability (toutes les requêtes ont une réponse)
    • Partition Tolerance (aucune panne moins importante qu'une coupure totale du réseau ne doit empêcher le système de répondre correctement)
  • Théorème CAP :
    • Vous pouvez avoir au maximum deux de ces trois propriétés vérifiées pour n'importe quel système
    • Alors on va en choisir deux :-)

14

15 of 52

Theorème CAP

15

16 of 52

Exemple

16

Network Failure

  • Si on choisit Availability, on perd Consistency (choix AP)

  • Si on choisit Consistency, on perd Availability (choix CP)

Dans les systèmes distribués, AC n'est pas un choix

On prend AP ou CP

17 of 52

  • En général on imagine un serveur qui suit les “cinq neufs” en disponibilité (99.999 % du temps fonctionnel).
    • Les pannes sont rares

  • Dans un système distribué moderne :
    • On veut un système qui résiste aux perturbations du réseau
    • On utilise la réplication

Availability

18 of 52

  • Lorsqu'aucun UPDATEn'est effectuée pendant une longue période :
    • Toutes les mises à jour finiront par se propager dans le système et tous les nœuds seront cohérents (éventuellement)
  • Pour un UPDATE donné sur un nœud donné du système:
    • La mise à jour finira par atteindre le nœud ou le nœud sera retiré du service

Consistency (éventuelle)

19 of 52

  • Concept “BASE
    • Basically Available, Soft state, Eventual consistency�(Fondamentalement disponible, état “mou”, cohérence éventuelle)
    • Opposé du concept ACID in RDBMS
    • Etat “mou”: des copies de même données peuvent être inconsistantes sur plusieurs noeuds du système
    • Cohérence éventuelle : les copies deviennent cohérentes à un moment ultérieur s'il n'y a plus de mises à jour de cette donnée

Consistency (éventuelle)

20 of 52

Ce que NoSQL ne propose pas !

  • Pas de jointures

  • Pas de transactions ACID

  • Pas de SQL (mais il y’a des ponts…)

20

est une base...

Qui suit...

21 of 52

Modèle de données

21

22 of 52

Modèle de données

  • Format BSON (“binary JSON”)

  • Les développeurs peuvent facilement adapter les données vers les langages de programmation modernes orientés objet sans avoir à recourir à une couche ORM compliquée.

  • Léger, simple, efficace (JSON est LA norme actuelle de transfert de données dans les WebServices)

22

23 of 52

Correspondances des termes (Relationnel vs. MongoDB)

23

24 of 52

JSON

  • Valeur possibles d’un champ
    • Un scalaire (Int, Boolean, String, Date, …)

    • Un document (objet “embeddé”)

    • Un tableau d’objets JSON

24

Un document

No d’un champ (propriété)

Valeur d’un champ (propriété)

25 of 52

Autre exemple

25

Rappelez-vous que le JSON est stocké en binaire (BSON)

26 of 52

Le modèle MongoDB

26

Un document (similaire à un tuple dans un RDBMS)

Une Collection (similaire à une Table dans un RDBMS)

  • Une Collection est un groupe de documents similaires

  • Dans une collection, chaque document doit avoir un Id unique

Contrairement aux RDBMS:

pas de contrainte d’intégrité dans MongoDB

27 of 52

Le modèle MongoDB

27

  • Les noms de champs ne peuvent pas commencer avec le caractère $

  • Les noms de champs ne peuvent pas contenir le caractère .

  • La taille maximale d’un document est 16MB

Un document (similaire à un tuple dans un RDBMS)

Une Collection (similaire à une Table dans un RDBMS)

28 of 52

Exemple d’un document MongoDB

28

  • _id est un champ spécial dans chaque document

  • Il doit être unique dans chaque collection

  • _id est l’équivalent de la clé primaire dans un RDBMS

  • _id fait 12 Bytes :
    • 1st 4 bytes : timestamp
    • Next 3 bytes : machine id
    • Next 2 bytes : Process id
    • Last 3 bytes : valeur incrémentale

29 of 52

Pas de schéma prédéfini �(Schema-free ou Schema-less)

29

30 of 52

Comparaison des modèles de données�Relationnel vs. NoSQL

30

31 of 52

31

  • Si relations complexes
  • Et environnement dynamique

ALORS : BD relationnelles : pas le meilleur choix

32 of 52

32

33 of 52

Modèle de données Clé-Valeur

33

34 of 52

Modèle relationnel

34

35 of 52

Modèle orienté document

35

36 of 52

Document vs. Modèle relationnel

  • Relationnel
    • Accent sur le stockage des données
    • Au moment de la requête : on construit les objets (ex: EJBs, instances Java/C#/PHP)
  • Document
    • Accent sur l’utilisation des données
    • Ce sont les objets “buisness”, �directement.

36

37 of 52

Compromis: Normalization vs. Utilisation simple

37

38 of 52

Requêtes avec jointures

BDs relationnelles :

38

39 of 52

Pas de jointures avec MongoDB

39

40 of 52

Requêtes

40

41 of 52

CRUD

  • Create
    • db.collection.insert( <document> )
    • db.collection.save( <document> )
    • db.collection.update( <query>, <update>, { upsert: true } )
  • Read
    • db.collection.find( <query>, <projection> )
    • db.collection.findOne( <query>, <projection> )
  • Update
    • db.collection.update( <query>, <update>, <options> )
  • Delete
    • db.collection.remove( <query>, <justOne> )

41

42 of 52

Exemples CRUD

42

43 of 52

Exemples

43

Avec RDBMS

Avec MongoDB

Soit on insère un premier document

Ou bien on crée la collection “Users” de manière explicite :

44 of 52

Insertion

  • La collection “users” est crée automatiquement Si elle n’existe pas...

44

45 of 52

Insertion Multi-Documents�(Arrays)

45

Tous les documents sont insérés d’un coup

46 of 52

Insertion Multi-Documents�(Bulk Operation)

  • On crée un objet temporaire en mémoire (un Bulk)
  • Prépare les insertions et les exécutent immédiatement

46

Il existe aussi Bulk Ordered object

La colonne _id est ajoutée automatiquement

47 of 52

Suppression�(Remove Operation)

  • On peut donner des conditions sur n’importe quels champs des objets (même _id)

47

db.users.remove ( )

Supprime tous les documents de la collection users

48 of 52

Update

48

Sinon, seul le premier document qui correspond aux conditions sera mis à jour

Equivalent SQL :

49 of 52

Update

49

Deux opérateurs

50 of 52

Remplacer un document

50

Pour le document dont le champ item vaut “BE10”, le remplacer par le document fourni

Condition de requête

Nouveau document

51 of 52

Insérer ou remplacer

51

Si le document dont le champ item vaut “TBD1” est dans la BD, il sera remplacé, sinon on insère le nouveau document

Option upsert !

52 of 52

Pour aller plus loin

Lire la documentation

Suivre le(s) MOOC(s) proposé par MongoDB University (créateurs de MongoDB)

Lien dans la page du cours

Regarder les exemples fournis en TPs

52