Skip to content

NoSQL

Introduction et fondements

Rappels sur les bases de données relationnelles et leurs limites

Les bases de données relationnelles

Les bases de données relationnelles (SGBDR) existent depuis les années 1970. Elles reposent sur quelques principes fondamentaux :

  • Des tables organisées en lignes et colonnes
  • Un schéma fixe défini à l'avance (DDL)
  • Le langage SQL pour interroger et manipuler les données
  • Les contraintes d'intégrité (clés primaires, clés étrangères, unicité)

Les SGBDR classiques — PostgreSQL, MySQL, Oracle, SQL Server — sont matures, bien documentés et couvrent la majorité des besoins métiers traditionnels.

Les limites face aux besoins actuels

À partir des années 2000, l'explosion du web et des données a mis en évidence plusieurs limites structurelles :

Volumétrie

Un SGBDR classique stocke ses données sur un seul serveur (architecture scale-up). Pour gérer des téraoctets voire des pétaoctets, on doit acheter des machines de plus en plus puissantes et coûteuses. Il existe une limite physique et financière à cette approche.

Scalabilité horizontale

La scalabilité horizontale consiste à ajouter des machines bon marché plutôt que d'améliorer une seule machine. Les SGBDR relationnels sont difficiles à distribuer horizontalement car :

  • Les jointures entre tables nécessitent que toutes les données soient accessibles simultanément
  • Les transactions ACID imposent une coordination forte entre nœuds
  • Le partitionnement des données (sharding) est complexe à mettre en œuvre

Données non structurées

Les SGBDR imposent un schéma rigide. Or de nombreuses données modernes résistent à cette contrainte :

  • Un produit e-commerce peut avoir des attributs très variables selon sa catégorie
  • Les données issues de capteurs IoT n'ont pas toutes le même format
  • Les contenus générés par les utilisateurs (posts, commentaires, métadonnées) évoluent constamment

Modifier le schéma d'une table de plusieurs centaines de millions de lignes est une opération coûteuse et risquée.

Contexte d'émergence du NoSQL : Big Data et applications web à grande échelle

L'essor du Big Data

Le terme Big Data désigne des volumes de données trop grands, trop rapides ou trop variés pour être traités par les outils traditionnels. On le caractérise par les 3 V :

DimensionDescriptionExemple
VolumeQuantité de données généréesDes milliards de tweets par jour
VélocitéVitesse de génération et de traitementFlux temps réel d'un réseau social
VariétéHétérogénéité des formatsTexte, images, JSON, logs, capteurs

Les pionniers du NoSQL

Face à ces défis, les grands acteurs du web ont développé leurs propres solutions :

  • Google publie en 2003 le papier MapReduce et en 2006 Bigtable, une base de données orientée colonnes pour indexer le web
  • Amazon publie en 2007 Dynamo, une base clé-valeur hautement disponible pour son infrastructure e-commerce
  • Facebook développe Cassandra en 2008 pour gérer les boîtes de messages de ses utilisateurs

Ces solutions sacrifient certaines garanties des SGBDR (notamment la cohérence stricte) pour gagner en disponibilité et en capacité de distribution.

Le terme NoSQL (Not Only SQL) est popularisé en 2009 pour désigner cet ensemble de technologies alternatives.

Applications web modernes

Les applications web à grande échelle ont des exigences particulières :

  • Haute disponibilité : un temps d'arrêt coûte de l'argent (Amazon estime qu'une seconde d'indisponibilité coûte plusieurs milliers de dollars)
  • Latence faible : les utilisateurs abandonnent une page qui met plus de 3 secondes à charger
  • Montée en charge élastique : le trafic peut multiplier par 10 lors d'un événement (soldes, lancement de produit)

Le théorème CAP et le modèle BASE vs ACID

Le théorème CAP

Formulé par Eric Brewer en 2000, le théorème CAP (aussi appelé théorème de Brewer) énonce qu'un système distribué ne peut garantir simultanément que deux des trois propriétés suivantes :

        Cohérence (C)
           /\
          /  \
         /    \
        /      \
       /________\
  Disponibilité  Tolérance au
      (A)        partitionnement (P)
  • C — Consistency (Cohérence) : tous les nœuds voient les mêmes données au même moment. Après une écriture, toute lecture renvoie la valeur la plus récente.
  • A — Availability (Disponibilité) : le système répond toujours aux requêtes, même si certains nœuds sont défaillants.
  • P — Partition tolerance (Tolérance au partitionnement) : le système continue de fonctionner même si des messages sont perdus ou si des nœuds sont déconnectés.

Dans un réseau réel, les partitions réseau sont inévitables. Un système distribué doit donc choisir entre CP ou AP :

ChoixExemplesCompromis
CPHBase, Zookeeper, MongoDB (par défaut)Refuse de répondre si non cohérent
APCouchDB, Cassandra, DynamoDBPeut renvoyer des données obsolètes
CASGBDR classiques (non distribués)Ne tolère pas les partitions

Note : Le théorème CAP a été affiné depuis sa formulation initiale. En pratique, il s'agit d'un continuum de compromis plutôt que d'un choix binaire.

ACID vs BASE

ACID est le modèle de cohérence des bases de données relationnelles :

  • Atomicité : une transaction réussit entièrement ou échoue entièrement
  • Cohérence : la base passe d'un état valide à un autre état valide
  • Isolation : les transactions concurrentes ne s'interfèrent pas
  • Durabilité : une transaction validée est persistée même en cas de panne

BASE est le modèle adopté par de nombreux systèmes NoSQL :

  • Basically Available : le système garantit la disponibilité (selon le CAP)
  • Soft state : l'état du système peut changer avec le temps, même sans nouvelles entrées
  • Eventually consistent : le système finira par être cohérent, mais pas nécessairement immédiatement
ACID                                BASE
──────────────────────────────────────────────────────
Cohérence forte     ←→    Cohérence éventuelle
Isolation           ←→    Optimistic locking
Pessimiste          ←→    Optimiste
Difficile à scaler  ←→    Scalabilité horizontale

Panorama des quatre familles NoSQL

Bases clé-valeur — Redis

Principe : les données sont stockées comme des paires clé → valeur. La clé est une chaîne, la valeur peut être n'importe quel type (chaîne, liste, ensemble, hash...).

SET user:42:name "Alice"
GET user:42:name  → "Alice"

Caractéristiques :

  • Extrêmement rapide (données en mémoire)
  • Structure simple, pas de requêtes complexes
  • Idéal pour le cache, les sessions, les files de messages

Avantages :

  • Latence sub-milliseconde grâce au stockage en mémoire
  • Très faible complexité opérationnelle
  • Supporte des structures variées (listes, sets, hash, sorted sets)

Inconvénients :

  • Capacité limitée par la RAM disponible
  • Pas de requêtes complexes ni de relations entre données
  • Persistance sur disque optionnelle (risque de perte en cas de crash)

Cas d'usage : cache applicatif, stockage de sessions, classements en temps réel, pub/sub.

Redis est le représentant le plus populaire. Il est souvent utilisé comme couche de cache devant un SGBDR.


Bases orientées documents — MongoDB

Principe : les données sont stockées sous forme de documents (JSON/BSON). Chaque document peut avoir une structure différente.

json
{
  "_id": "ObjectId('...')",
  "nom": "Alice Martin",
  "age": 28,
  "adresses": [
    { "ville": "Paris", "type": "domicile" },
    { "ville": "Lyon", "type": "travail" }
  ]
}

Caractéristiques :

  • Schéma flexible
  • Requêtes riches sur les champs et documents imbriqués
  • Scalabilité horizontale via le sharding

Avantages :

  • Schéma évolutif sans migration lourde
  • Modèle de données proche des objets métier (JSON natif)
  • Bonne expressivité des requêtes (filtres, agrégations, index)

Inconvénients :

  • Dénormalisation pouvant entraîner de la redondance de données
  • Pas de jointures natives performantes entre collections
  • La flexibilité du schéma peut devenir un risque sans gouvernance

Cas d'usage : catalogues de produits, gestion de contenu, applications avec données hétérogènes.

MongoDB est la base documentaire la plus utilisée. Nous l'étudierons en détail dans les parties suivantes.


Bases orientées colonnes — Cassandra

Principe : les données sont organisées en colonnes plutôt qu'en lignes. Les colonnes fréquemment consultées ensemble sont regroupées (column families).

Clé de partition → famille de colonnes
user_id:42 → { name: "Alice", email: "alice@...", created_at: "2024-01-01" }

Caractéristiques :

  • Excellente performance en écriture
  • Conçu pour la distribution massive (pas de SPOF)
  • Requêtes optimisées pour des patterns d'accès prédéfinis

Avantages :

  • Scalabilité horizontale quasi linéaire
  • Haute disponibilité par réplication multi-datacenter
  • Performances en écriture très élevées, même à grande échelle

Inconvénients :

  • Modèle de données rigide : le schéma dépend des requêtes prévues à l'avance
  • Cohérence éventuelle par défaut (modèle BASE)
  • Pas de jointures, pas de transactions multi-lignes complexes

Cas d'usage : séries temporelles, journaux d'événements, données IoT, analytics à grande échelle.

Apache Cassandra (initialement développé par Facebook) est utilisé par Netflix, Apple, Instagram pour des charges massives en écriture.


Bases orientées graphe — Neo4j

Principe : les données sont représentées sous forme de nœuds (entités) et de relations (arêtes), chacun pouvant porter des propriétés.

(Alice)-[:CONNAÎT {depuis: 2020}]->(Bob)
(Bob)-[:TRAVAILLE_CHEZ]->(EFREI)

Caractéristiques :

  • Exploration efficace des relations complexes
  • Traversée de graphes en temps constant
  • Langage de requête Cypher (déclaratif)

Avantages :

  • Performances constantes sur les traversées de relations, quelle que soit la taille du graphe
  • Modélisation intuitive pour les données fortement connectées
  • Cypher est lisible et expressif pour les requêtes relationnelles complexes

Inconvénients :

  • Peu adapté aux données tabulaires ou aux requêtes analytiques massives
  • Scalabilité horizontale plus difficile que les autres familles NoSQL
  • Courbe d'apprentissage si l'on ne pense pas nativement en graphes

Cas d'usage : réseaux sociaux, détection de fraude, moteurs de recommandation, graphes de connaissances.

Exemple: Three and a half degrees of separation


Tableau récapitulatif

FamilleModèleForcesExemples
Clé-valeurPaires clé → valeurRapidité, simplicitéRedis, DynamoDB
DocumentDocuments JSON/BSONFlexibilité, requêtes richesMongoDB, CouchDB
ColonneFamilles de colonnesÉcriture massive, distributionCassandra, HBase
GrapheNœuds + relationsTraversée de relationsNeo4j, Amazon Neptune