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, cependant, toutes les bases de données ne sont pas construites de la même manière. Différents types de bases de données sont optimisés pour différents types de données, modèles de requêtes, exigences de scalabilité et besoins de cohérence.
Dans cette leçon, nous allons examiner les types de bases de données les plus courants, leurs différences clés, leurs cas d'usage typiques et des exemples concrets. Nous porterons également une attention particulière aux bases de données relationnelles, car elles resteront le principal focus de ce cours.
Un seul modèle de base de données n'est pas 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, applications web | MongoDB, Couchbase, Firestore |
| À colonnes larges | Lignes avec colonnes flexibles regroupées en familles | Haut débit d'écriture, scalabilité horizontale | Journalisation d'événements, IoT, charges distribuées à grande échelle | Apache Cassandra, HBase, ScyllaDB |
| Graphe | Noeuds et arêtes | Requêtes centrées sur les relations | Réseaux sociaux, détection de fraude, moteurs de recommandation | 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 plutôt que par ligne | Analyses et agrégations rapides | BI, tableaux de bord, entreposage de données, OLAP | ClickHouse, DuckDB, Amazon Redshift, BigQuery |
| En mémoire | Données stocké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é
Les bases de données relationnelles exigent généralement un schéma clairement défini. Avant de stocker les données, on définit les tables, les colonnes, les types de données, les contraintes et les relations.
Cela rend la structure prévisible et plus facile à valider.
2. Relations entre les tables
L'une des grandes forces des systèmes relationnels est la capacité à modéliser explicitement les relations.
Par exemple :
customers peut être liée à une table orders.orders peut être liée à une table order_items.Cela rend les bases relationnelles particulièrement adaptées aux systèmes métiers où les entités sont interconnectées.
3. Prise en charge de SQL
Les bases de données relationnelles sont généralement interrogées avec SQL (Structured Query Language). SQL fournit une manière standard de filtrer, joindre, agréger, trier et modifier des données structurées.
4. Transactions ACID
Les bases de données relationnelles sont bien connues pour prendre en charge les propriétés ACID :
Ces propriétés sont essentielles dans des systèmes comme la banque, la facturation, les réservations et la gestion des stocks.
5. Contraintes d'intégrité des données
Les bases de données relationnelles peuvent appliquer directement des règles au niveau de la base de données, par exemple :
NOT NULLCHECKCes fonctionnalités aident à empêcher les données invalides ou incohérentes.
6. Jointures puissantes et reporting
Les bases de données relationnelles excellent lorsqu'il faut combiner des informations provenant de plusieurs tables. C'est l'une des raisons pour lesquelles elles restent centrales pour le reporting, l'analytique, la finance, les opérations et de nombreux systèmes transactionnels.
7. Normalisation et réduction de la redondance
La conception relationnelle utilise souvent la normalisation, c'est-à-dire l'organisation des données dans des tables liées afin de réduire la duplication et d'améliorer la cohérence.
Par exemple, les informations d'un client peuvent être stockées une seule fois dans une table customers au lieu d'être répétées dans chaque enregistrement de commande.
Les bases de données relationnelles sont généralement le meilleur choix lorsque :
Les bases de données clé-valeur stockent les données sous la forme d'une paire simple : une clé et la valeur qui lui est associée.
La clé agit comme un identifiant unique, et la base récupère la valeur directement à partir de cette clé. Ce modèle est très simple et très rapide.
Les bases de données documentaires stockent les données sous forme de documents, généralement dans un format proche de JSON. Chaque document peut contenir des champs, des tableaux et des objets imbriqués.
Contrairement aux bases de données relationnelles, tous les documents n'ont pas besoin d'avoir exactement la même structure.
Les bases de données à colonnes larges, parfois appelées bases de données en familles de colonnes, stockent les données en lignes, mais chaque ligne peut contenir un très grand nombre de colonnes flexibles. Elles sont conçues pour être distribuées sur de nombreux serveurs et pour offrir un haut débit d'écriture.
Une base de données colonnaire stocke ensemble sur disque les valeurs d'une même colonne au lieu de stocker une ligne complète. Cela est différent d'une base de données à colonnes larges.
Le stockage colonnaire est particulièrement efficace pour les requêtes analytiques qui lisent quelques colonnes dans un très grand jeu de données.
Les bases de données graphe sont conçues pour les données où les relations constituent la partie la plus importante du modèle. Elles stockent des noeuds (entités) et des arêtes (relations).
Les bases de données de séries temporelles sont spécialisées pour les points de données associés au temps. Elles sont optimisées pour des taux d'ingestion élevés, des politiques de rétention, la compression et l'agrégation basée sur le temps.
Les bases de données en mémoire stockent la plupart ou la totalité des données en RAM plutôt que sur disque. Cela les rend extrêmement rapides, même si la mémoire coûte plus cher que le stockage sur disque.
Certaines bases en mémoire sont utilisées uniquement comme caches temporaires, tandis que d'autres peuvent également persister les données sur disque.
Lorsqu'on choisit une base de données, il faut se poser des questions comme :
Dans de nombreux systèmes réels, les organisations utilisent plus d'un type de base de données. Par exemple :
On appelle souvent cela la persistance polyglotte.
Les principales différences entre les types de bases de données portent généralement sur :
Dans la prochaine leçon, nous approfondirons la structure interne des bases de données relationnelles, notamment les tables, lignes, colonnes, clés et contraintes d'intégrité.