BASES DE

DONNÉES
RELATIONNELLES & NOSQL
CédricVilla - @zestprod - 18/09/2015 DevelopR6 - CNRS
HISTOIRE
DIFFERENCES
STRUCTURELLES
BASES DE DONNÉES
RELATIONNELLES
SCHÉMA
RELATIONNEL
Fortement normalisé
SCHÉMA
RELATIONNEL
Extraction précise
Métaphore
bibliothécaire pointilleux
SCHÉMA
RELATIONNEL
« Documented by design »
SQL
ACID
Atomicité
Cohérence
Isolation
Durabilité
NOSQL
NOT ONLY SQL
Structure imbriquée
DOCUMENT
BASED
DATABASE
DOCUMENT
BASED
DATABASE
Structure imbriquée
Web 2.0 JSON (REST)
Ergonomie
DOCUMENT
BASED
DATABASE
Structure imbriquée
Structure imbriquée
Pas de relations
dans le SGBD
Pas ACID
DOCUMENT
BASED
DATABASE
Système de cache
Construire et retourner

un format adapté

(ex. elastic search)
Plus difficile à débogguer
DOCUMENT
BASED
DATABASE
SCHEMA
LESSDATABASES
BDD sans schéma
SCHEMALESS +
• Agilité (liberté lors du développement)
• Productivité
SCHEMALESS -
• Extraction de l’information
• Métaphore du tiroir de bureau
• Difficulté de migration
MODÈLES CLÉS /VALEURS
Redis, (virtuellement n’importe quel NoSQL), etc.



SET foo bar

GET foo => bar
HYBRIDES
Ex: Postgres et le type « hstore »
BDD CÔTÉ CLIENT
HTML5 - Web SQL Database + Web Storage
DÉVELOPPEMENT
ET AGILITÉ
DEVELOPPER AVEC UNE BDD
• Abondance de doc, frameworks, etc.
• Tous les langages
OBJECT
RELATIONAL
MAPPING
Mapping objet relationnel
MAPPING OBJET
MAPPING OBJET
• On manipule des objets
• Object.create(attribute: « value », etc.)
• Objet.find(name: « john »)
• Les requêtes sont générées

dans le language du SGDB
MAPPING OBJET
• + Documentation: Dans le modèle
• + On peut ignorer le SGDB derrière

(différences entre développement et production)
MAPPING OBJET
• NoSQL

Idem que pour BDD relationnelles
• Avantages
• ++ Documentation: dans le modèle
• + Encore moins de gestion de la BDD
MAPPING OBJET
• Semble simple
• Ce n’est pas « fool-proof »
• boucle for + modification en base
PERFORMANCES
PERFORMANCES
• Dépendent:
• De la RAM
• Des entrées/sorties du stockage (I/O)
• Du CPU
AVANT D’ENVISAGER
UN PLUS GROS SERVEUR
• Mise en cache
• D’une page complète (ou 304)
• D’un fragment HTML
• Du résultat d’une requête
BASES DE
DONNÉES
RAPIDES
Redis
Memcached
BDD RAPIDES
• En RAM
• Pas d’écriture disque

(systématique)
• Cluster
BDD RAPIDES
• Mise en cache
• Données extraites
• Fragments HTML
• Sessions
• Files d’attentes
BDD RAPIDES
• Pas de persistence / ACID



sinon:

pas mieux que BDD
relationnelle
SCALING
(MISE À L’ÉCHELLE)
VERTICAL SCALING
VERTICAL SCALING
4 Go RAM
2 CPU
1 HDD 5400 RPM
VERTICAL SCALING
16 Go RAM
8 CPU
1 SSD (x100)
SI GOOGLE FAISAIT ÇA
• Connait 30 trillions de documents
• Crawle 20 milliards de pages / jour
RETOUR À LA RÉALITÉ
• 2 millions d’ordinateurs répartis
• dans +60 data centers
• sur le globe
HORIZONTAL SCALING
PETVS CATTLE
HORIZONTAL SCALING
HORIZONTAL SCALING
HORIZONTAL SCALING
HORIZONTAL SCALING
MISE À L’ÉCHELLE
Méthode (ex.) Technologie Mise en oeuvre
Code
Déploiement /
Provisionning
Puppet, Docker,
etc.
Trivial
Stockage
File System en
réseau
AWS-S3, NFS,
etc.
Trivial
BDD ? ? ?
load balancer
SQL: MASTER / MASTER
load balancer
Résultat
✓ Cohérence (ACID)
✓ Disponibilité
• Limitation par I/O
load balancer
Méthode adaptée pour
• Garantir la disponibilité d’une base
Pas adaptée pour
• Scaling horizontal
THÉORÈME CAP
• Dans un système distribué,

impossible de garantir en même temps:
• Cohérence

(tous les clients partagent la même vue des données)
• Disponibilité

(lecture / écriture pour tous les clients)
• Tolérance au partionnement

(le système fonctionne malgré la séparation physique des données)
load balancer
MongoDB, partitionnement
load balancer
Théorème de CAP
✓ Cohérence
• Disponibilité
✓ Tolérance au partionnement
CAP - COMPROMIS

(QUELQUES EXEMPLES)
Availability
(disponibilité)
Consistency

(cohérence)
Partition
Tolerance
Data Models
MySQL /
Postgres
oui oui - Relationnel
MongoDB - oui oui Document
Redis - oui oui Key-Value
Cassandra oui - oui
Orienté
Colonne
CouchDB oui - oui Document
* utilisation du SGBD par défaut
BASE
Basically Available
Soft state
Eventual consistency
•Les données
•sont temporaires

et pas à jour
•doivent être
« réconciliée »
•vont finir par être
cohérentes
•Elastic Search
•Cassandra
(Facebook)
•Dynamo

(Amazon)
•Oracle NoSQL
Database
•Riak
QUELLE BDD
UTILISER POUR
MON APPLICATION ?
PROBLEMES
• Abondance de solutions
• Contradictions
• Buzz / Hype et évolutions
THE RIGHT
TOOL

FORTHE RIGHT
JOB
Le bon outil 

pour le bon usage.
CHOIX D’UNE BASE DE
DONNÉE
• Attention au « One size fits all »
• 1 marteau = tous les problèmes sont des clous
• Pas optimal
• Arrachage de cheveux
DIVISER LE PROBLÈME EN
SOUS PROBLÈMES
• Plusieurs technologies de BDD
• ex: Redis + Postgres + MongoDB
• Microservices / machines virtuelles
• Chaque techno est adaptée à un sous-problème
CONNAITRE PLUSIEURS
TECHNOLOGIES
• Forces, faiblesses
• Les essayer, se familiariser
• Identifier un problème

qui nécessite une BDD en particulier
SE POSER LES BONNES
QUESTIONS
• Ex pour Google
• Est-ce que c’est ok d’afficher une donnée pas à jour ?
• Est-ce que je dois réduire:
• Le temps de crawling ?
• Ou le temps de traitement des requêtes ?
EX: CRAIGSLIST

(PETITES ANNONCES)
• MySQL
• Memcached
• Redis
• MongoDB
• Sphinx
• Filesystem
EX: CRAIGSLIST

(PETITES ANNONCES)
• SQL (MySQL)
• Vertical (SSD) + RAM
• Horizontal
• Cache

(consultation 99%)
EX: CRAIGSLIST

(PETITES ANNONCES)
• NoSQL (MongoDB)
• Utilisé pour les archives
• Schemaless
• Scaling
• http://instagram-engineering.tumblr.com/post/40781627982/handling-
growth-with-postgres-5-tips-from

Scaling Postgres (Instagram)
• https://muut.com/blog/technology/redis-as-primary-datastore-wtf.html

Un mec qui a détourné Redis pour son forum
• http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-
use-mongodb/

Titre « troll » mais très instructif (Diaspora, problèmes de MongoDB
dans la vraie vie)
• https://www.percona.com/live/mysql-conference-2012/sessions/living-
sql-and-nosql-craigslist-pragmatic-approach

Craigslist - Cohabitation de SQL et de NoSQL

Relational databases & NoSQL databases