Leçon 1.2 · Temps de lecture : ~15 min
Il existe de nombreux types de bases de données, chacun optimisé pour un type de données, un modèle de requête ou des exigences de scalabilité spécifiques. Dans cette leçon, vous découvrirez les principaux modèles de bases de données — relationnelles, clé-valeur, documentaires, à colonnes larges, graphes, séries temporelles et colonnaires — avec leurs différences clés, leurs cas d'usage typiques et des exemples de systèmes réels.
Dans la leçon précédente, nous avons introduit l'idée générale d'une base de données et d'un SGBD. En pratique, toutes les bases de données ne sont pas construites de la même manière. Différents types sont optimisés pour différents types de données, modèles de requêtes, exigences de scalabilité et besoins de cohérence.
Nous porterons également une attention particulière aux bases de données relationnelles, car elles resteront le principal focus de ce cours.
Aucun modèle de base de données n'est parfait pour toutes les applications.
Par exemple :
Parce que différents systèmes résolvent différents problèmes, plusieurs modèles de bases de données ont émergé au fil du temps.
Voici une comparaison rapide avant d'examiner chaque type plus en détail :
| Type | Modèle de données | Forces | Cas d'usage courants | Exemples |
|---|---|---|---|---|
| Relationnelle | Tables avec lignes et colonnes | Cohérence forte, SQL, jointures, données structurées | Banque, ERP, CRM, e-commerce, reporting | PostgreSQL, MySQL, MariaDB, SQLite, Oracle |
| Clé-valeur | Clé associée à une valeur | Recherches très rapides, scalabilité simple | Cache, sessions, feature flags, paniers d'achat | Redis, Amazon DynamoDB, Riak |
| Documentaire | Documents de type JSON | Schéma flexible, données imbriquées | Gestion de contenu, profils utilisateurs, catalogues | MongoDB, Couchbase, Firestore |
| À colonnes larges | Lignes avec colonnes flexibles en familles | Haut débit d'écriture, scalabilité horizontale | Journalisation, IoT, charges distribuées à grande échelle | Apache Cassandra, HBase, ScyllaDB |
| Graphe | Nœuds et arêtes | Requêtes centrées sur les relations | Réseaux sociaux, détection de fraude, recommandations | Neo4j, Amazon Neptune, ArangoDB |
| Séries temporelles | Enregistrements horodatés | Ingestion et agrégation efficaces dans le temps | Supervision, métriques, capteurs, données financières | InfluxDB, TimescaleDB, OpenTSDB |
| Colonnaire analytique | Données stockées par colonne | Analyses et agrégations rapides | BI, tableaux de bord, data warehousing, OLAP | ClickHouse, DuckDB, Amazon Redshift, BigQuery |
| En mémoire | Données principalement en RAM | Latence extrêmement faible | Cache, classements, compteurs en temps réel | Redis, Memcached, SAP HANA |
Les bases de données relationnelles stockent les données dans des tables composées de lignes et de colonnes. Les tables peuvent être liées entre elles par des relations, généralement à l'aide de clés primaires et de clés étrangères.
Ce modèle est particulièrement adapté lorsque les données sont bien structurées et que l'exactitude, la cohérence et les requêtes complexes sont importantes.
1. Schéma structuré — exige un schéma clairement défini avec tables, colonnes, types de données, contraintes et relations. La structure est prévisible et facile à valider.
2. Relations entre les tables — capacité à modéliser explicitement les relations entre entités (ex. customers → orders → order_items). Idéal pour les systèmes métiers.
3. Prise en charge de SQL — standard pour filtrer, joindre, agréger, trier et modifier des données structurées.
4. Transactions ACID :
5. Contraintes d'intégrité — clés primaires, clés étrangères, unicité, NOT NULL, CHECK pour prévenir les données invalides.
6. Jointures puissantes — idéales pour combiner des données de plusieurs tables en reporting et analytique.
7. Normalisation — réduction de la duplication via des tables liées.
Les bases relationnelles sont le meilleur choix quand les données sont structurées, les relations importantes, les transactions fiables requises et les requêtes complexes nécessaires.
Stockent les données comme une paire clé + valeur. Accès direct par clé — modèle très simple et très rapide.
Cas d'usage : cache, sessions, paniers, feature flags, classements.
Exemples : Redis, Amazon DynamoDB, Riak
Stockent les données sous forme de documents JSON. Chaque document peut avoir une structure différente.
Cas d'usage : gestion de contenu, catalogues produits, profils utilisateurs, applications web et mobiles.
Exemples : MongoDB, Couchbase, Google Firestore
Stockent les données en lignes avec un ensemble flexible de colonnes. Conçues pour la distribution sur de nombreux serveurs et un haut débit d'écriture.
Cas d'usage : journalisation d'événements, IoT, messagerie, systèmes distribués géographiquement.
Exemples : Apache Cassandra, Apache HBase, ScyllaDB
Stockent les valeurs d'une même colonne ensemble sur disque — différent des bases à colonnes larges. Efficaces pour les requêtes analytiques lisant peu de colonnes sur de très grands volumes.
Cas d'usage : business intelligence, data warehousing, dashboards, analyses de logs.
Exemples : ClickHouse, DuckDB, Amazon Redshift, Google BigQuery
Conçues pour les données où les relations sont la partie la plus importante. Stockent des nœuds (entités) et des arêtes (relations). Parcours des relations rapide et naturel.
Cas d'usage : réseaux sociaux, détection de fraude, recommandations, graphes de connaissances.
Exemples : Neo4j, Amazon Neptune, ArangoDB
Spécialisées pour les données associées au temps, optimisées pour l'ingestion, la rétention et l'agrégation temporelle.
Cas d'usage : supervision de serveurs, métriques, données de capteurs, données boursières.
Exemples : InfluxDB, TimescaleDB, OpenTSDB
Stockent la plupart des données en RAM plutôt que sur disque — extrêmement rapides, mais mémoire plus coûteuse.
Cas d'usage : cache, sessions, compteurs en temps réel, classements de jeux.
Exemples : Redis, Memcached, SAP HANA
Questions à se poser :
Dans de nombreux systèmes réels, on utilise plusieurs types de bases de données — c'est la persistance polyglotte : relationnelle pour les données métier, Redis pour le cache, documentaire pour le contenu flexible, colonnaire pour l'analytique.
Points clés :
Les bases relationnelles utilisent un schéma fixe, des transactions ACID et SQL. NoSQL est un terme générique pour les modèles clé-valeur, documentaires, à colonnes larges et graphes — ils échangent certaines garanties de cohérence contre flexibilité ou scalabilité. Le bon choix dépend de vos données et de votre charge.
Utilisez une base documentaire quand les données ont une structure imbriquée variable et que les jointures entre collections sont rares. Utilisez une base relationnelle quand les données sont structurées, les entités interreliées, et que vous avez besoin de transactions fiables et de requêtes multi-tables complexes.
Oui — c'est la persistance polyglotte. C'est courant en production : PostgreSQL pour les données transactionnelles, Redis pour le cache, ClickHouse pour l'analytique. Chaque type est utilisé là où il excelle.
Partez de la charge et des contraintes : structure des données, besoins de cohérence, type de requêtes, objectifs de latence et échelle. Par exemple, choisissez une base relationnelle pour des transactions ACID, une base documentaire pour des enregistrements JSON flexibles, et une base de séries temporelles pour des métriques horodatées.
Chaque modèle implique des compromis. Les bases relationnelles offrent une forte cohérence, les jointures et un écosystème SQL mature, mais les changements de schéma peuvent être plus contraignants à grande échelle. Les modèles NoSQL apportent souvent plus de flexibilité ou de scalabilité horizontale, mais peuvent limiter les jointures ou demander une conception plus fine de la cohérence.
Oui. C'est la persistance polyglotte : utiliser plusieurs bases, chacune pour la charge qu'elle gère le mieux. Un schéma fréquent est PostgreSQL pour les transactions, Redis pour le cache et ClickHouse (ou un autre système colonnaire) pour l'analytique.