La carte complète des systèmes de données : SQL, NoSQL, réplication, streaming. Le must-read absolu.
Pourquoi ce livre
Tout développeur web vit au-dessus d'une pile qu'il n'a pas construite : une base SQL derrière un ORM, un cache Redis, une file de messages, un index de recherche. Tant que tout va bien, cette pile est invisible. Le jour où un réplica MySQL renvoie une donnée périmée, où deux requêtes concurrentes écrasent silencieusement un compteur, où un timeout réseau laisse le système dans un état incohérent, on découvre qu'on ne comprend pas vraiment ses propres fondations.
Martin Kleppmann a écrit le livre qui comble ce trou. Presque quatre ans d'écriture, plus de 800 références, et une promesse tenue de bout en bout : expliquer non pas comment utiliser tel outil, mais pourquoi chaque outil fonctionne comme il fonctionne, et quelles questions poser avant d'en choisir un. Depuis 2017, « DDIA » est probablement le livre le plus recommandé de toute l'ingénierie backend. Il le mérite.
Les idées qui restent
1Vous êtes déjà un concepteur de systèmes de données
Les catégories d'outils ont fusionné sans prévenir personne : Redis est un datastore qui sert de file de messages, Kafka est une file de messages avec des garanties de durabilité de base de données. Dès que votre application combine une base, un cache et un index de recherche synchronisés par votre code, Kleppmann est formel : « vous n'êtes plus seulement développeur d'application, vous êtes aussi concepteur de systèmes de données » (p. 5). Le titre n'est pas honorifique, il vient avec les responsabilités : c'est votre code applicatif qui garantit (ou pas) que le cache est invalidé au bon moment. Le livre entier découle de ce constat : puisque vous assemblez des systèmes de données, autant comprendre ce qu'il y a dedans.
2Décrire la charge avant de la subir : le fan-out de Twitter
« X est scalable » ne veut rien dire ; la vraie question est « si la charge grandit de telle façon, quelles sont nos options ? ». L'exemple fil rouge du livre : Twitter en 2012, 4 600 tweets postés par seconde, mais 300 000 lectures de timeline par seconde. Pré-calculer chaque timeline à l'écriture transforme 4 600 tweets/s en 345 000 écritures/s, et un compte à 30 millions de followers déclenche 30 millions d'écritures pour un seul tweet (p. 11-13). La solution finale est hybride : fan-out pour tout le monde, sauf les célébrités, fusionnées à la lecture. La leçon dépasse Twitter : identifiez votre « load parameter » (ici, la distribution des followers) avant de choisir une architecture. Et mesurez en percentiles, pas en moyennes : Amazon spécifie ses services au 99,9e percentile parce que les requêtes les plus lentes frappent les clients aux comptes les plus remplis, donc les plus précieux (p. 15).
3La base de données la plus simple du monde tient en deux fonctions bash
db_set () { echo "$1,$2" >> database } db_get () { grep "^$1," database | sed -e "s/^$1,//" | tail -n 1 }
Écriture en temps constant (on ajoute à la fin du fichier), lecture catastrophique (on relit tout). C'est l'ouverture du chapitre 3, et tout moteur de stockage réel n'est qu'une réponse à ce déséquilibre, résumée en une loi : « des index bien choisis accélèrent les lectures, mais chaque index ralentit les écritures » (p. 71). De là, deux familles : les LSM-trees (Cassandra, RocksDB), qui gardent l'esprit append-only et compactent en arrière-plan, rapides en écriture ; les B-trees (PostgreSQL, MySQL), qui écrasent des pages en place, rapides et prévisibles en lecture. Kleppmann refuse de trancher à votre place : « il n'y a pas de règle simple et rapide […] ça vaut la peine de tester empiriquement » (p. 85).
4NoSQL est un remake : le match s'est déjà joué en 1970
IMS, la base de données d'IBM développée à l'origine pour la gestion de stock du programme Apollo (1968), rangeait les données en arbres imbriqués qui ressemblent étrangement au JSON des bases documentaires modernes. Mêmes forces (le one-to-many est naturel), mêmes impasses : les relations many-to-many sont pénibles et les jointures inexistantes. « Ces problèmes des années 1960-70 ressemblent furieusement à ceux que les développeurs rencontrent aujourd'hui avec les bases documentaires » (p. 36). Le modèle relationnel de Codd a gagné le « grand débat » des années 70 précisément en cachant l'implémentation derrière une interface propre. Quant au « schemaless », Kleppmann le démonte en une analogie : schema-on-read, c'est du typage dynamique ; schema-on-write, du typage statique. Le schéma existe toujours, la seule question est qui le fait respecter.
5Répliquer, c'est facile. Répliquer ce qui change, c'est tout le problème
« Toute la difficulté de la réplication tient dans la gestion des changements apportés aux données répliquées » (p. 151). Un leader reçoit les écritures, des followers le suivent avec un retard variable : ce « replication lag » fabrique des anomalies que le chapitre nomme une par une. Vous postez un commentaire, vous rechargez, il a disparu (lecture sur un follower en retard : read-your-own-writes). Une réponse apparaît avant sa question (violation de causalité : consistent prefix reads, illustrée par un dialogue digne de Pratchett entre Mr. Poons et Mrs. Cake, p. 165). Et le failover n'est pas gratuit : chez GitHub, un follower MySQL en retard promu leader a réutilisé des clés primaires déjà distribuées, et comme ces clés indexaient aussi un store Redis, des données privées sont parties chez les mauvais utilisateurs (p. 157). Chaque garantie supplémentaire a un coût ; faire semblant que la réplication asynchrone est synchrone, c'est « la recette assurée de problèmes futurs » (p. 167).
6« ACID est malheureusement devenu surtout un terme marketing »
La phrase est de Kleppmann (p. 223), et il la documente : le C de Consistency a été « ajouté pour que l'acronyme fonctionne » selon Joe Hellerstein, et c'est de toute façon une propriété de votre application, pas de la base. Pire, les niveaux d'isolation portent les mêmes noms partout en désignant des choses différentes : le « serializable » d'Oracle est en réalité de la snapshot isolation, si bien que « personne ne sait vraiment ce que repeatable read signifie » (p. 242). Le chapitre 7 vaut à lui seul le livre pour sa galerie d'anomalies nommées. La plus sournoise : le write skew. Alice et Bob, médecins de garde, consultent chacun le planning, voient « 2 médecins de garde », et se désinscrivent tous les deux en même temps. Aucun conflit détecté, deux transactions valides, zéro médecin de garde (p. 246-248). Seule l'isolation sérialisable l'empêche, et presque aucune base ne l'active par défaut.
7Le réseau ment, l'horloge ment, et votre process aussi
Le chapitre 8 est le plus célèbre du livre, et le plus contre-intuitif. Dans un système distribué, une requête sans réponse ne dit pas si la requête s'est perdue, si le serveur est mort, ou s'il est juste en pause garbage collector (des pauses « stop-the-world » qui peuvent durer plusieurs minutes, p. 296). Les horloges dérivent : Google budgète 200 ppm pour ses serveurs, soit 17 secondes d'écart par jour sans resynchronisation (p. 289). Un thread peut vérifier qu'il détient un verrou, se figer 15 secondes, puis écrire en croyant être encore leader ; la parade, le fencing token, est un simple compteur croissant que le stockage vérifie. La litanie des pannes réelles citées va des requins qui mordent les câbles sous-marins au conducteur en hypoglycémie qui encastre son pickup dans la climatisation d'un datacenter (p. 275, 279). D'où la devise du chapitre : « dans les systèmes distribués, la suspicion, le pessimisme et la paranoïa paient » (p. 277).
8Oubliez le théorème CAP, apprenez le mot « linéarisable »
Le CAP façon « cohérence, disponibilité, tolérance aux partitions : choisissez-en deux » est trompeur, dit Kleppmann : une partition réseau n'est pas un choix d'architecte, c'est une panne qui vous arrivera de toute façon. Son verdict est sec : « mieux vaut éviter CAP » (p. 337). Le concept utile à la place : la linéarisabilité, l'illusion qu'il n'existe qu'une seule copie de la donnée. L'exemple du livre est limpide : Alice et Bob regardent la finale de la Coupe du monde 2014, Alice rafraîchit et annonce le score final ; Bob rafraîchit après l'avoir entendue et son téléphone, tombé sur un réplica en retard, affiche encore « match en cours » (p. 325). Cette garantie de fraîcheur coûte cher en latence ; le livre vous apprend à savoir quand vous en avez vraiment besoin, et quand la cohérence causale suffit.
9L'état de votre application est l'intégrale de son flux d'événements
La plus belle idée de la fin du livre se formule en une phrase : l'état, c'est ce qu'on obtient en intégrant un flux d'événements dans le temps ; le flux de changements, c'est la dérivée de l'état (p. 460). Concrètement : au lieu d'écrire dans la base ET dans le cache ET dans l'index (trois écritures qui peuvent se contredire), on écrit dans un log ordonné (Kafka), et tout le reste en dérive dans le même ordre. C'est le Change Data Capture, et c'est l'idée que Kleppmann a baptisée « database inside-out ». Son rêve inachevé : pouvoir écrire mysql | elasticsearch comme un pipe Unix, l'équivalent « unbundled » de CREATE INDEX (p. 503). Aujourd'hui, des produits entiers (Debezium, Materialize) vivent de cette idée.
Trois choses que je ne savais pas avant de le lire
- Chaque chapitre s'ouvre sur une carte illustrée, dessinée comme une carte au trésor du territoire du chapitre (par Shabbir Diwan et Edie Freedman). Kleppmann les remercie d'avoir accepté « l'idée non conventionnelle de créer des cartes » (p. xix).
- Mrs. Cake, la médium qui répond aux questions avant qu'on les pose dans le chapitre réplication, est une référence Terry Pratchett officielle : Reaper Man est la citation [25] du chapitre 5.
- La référence [14] du chapitre partitioning est un article Mashable intitulé « 3% of Twitter's Servers Dedicated to Justin Bieber » (2010). Les hot spots de célébrités ne sont pas un problème théorique.
Mon avis, honnêtement
C'est le meilleur livre d'ingénierie backend que j'ai lu, et l'opinion est banale : tout le monde le dit depuis 2017. Ce qui le rend intemporel n'est pas son catalogue de technos, c'est sa méthode : chaque concept arrive avec le problème qu'il résout, un exemple nommé qu'on n'oublie plus (les médecins de garde, le score de la Coupe du monde, le pickup dans la clim), et le trade-off assumé. Kleppmann est d'une honnêteté rare : il écrit « il n'y a pas de règle simple, testez empiriquement » là où d'autres vendraient une méthode, et il passe à la première personne au chapitre 12 pour bien séparer les faits de ses opinions.
Les défauts sont réels. C'est long, dense, et inégalement utile : un dev web passera un excellent moment dans les chapitres 1 à 8, mais le batch processing version Hadoop (chapitre 10) se lit aujourd'hui comme de l'histoire ancienne : MapReduce est mort et enterré. Les technos citées ont pris dix ans : Riak a disparu, Kafka n'a plus besoin de ZooKeeper. Les principes, eux, n'ont pas bougé d'un millimètre : LSM vs B-tree, le replication lag, le write skew et les fencing tokens sont exactement les mêmes en 2026.
Et puis il y a le dernier chapitre, que presque personne ne mentionne. Le livre est dédié « à tous ceux qui œuvrent pour le bien », et sa section finale propose une expérience de pensée glaçante : remplacez « data » par « surveillance » dans vos phrases (« notre warehouse de surveillance », « nos data scientists de la surveillance ») et écoutez comme ça sonne (p. 537). Écrit avant le RGPD et avant les LLM, ce chapitre a mieux vieilli que tout le reste. Un livre de bases de données qui se termine sur la dignité des utilisateurs, je n'en connais pas d'autre.
Odilon
Toujours valable en 2026 ?
Les principes, oui, intégralement : ils avaient déjà vingt ans à la sortie du livre. La photographie des technos est millésimée 2017, et ça se voit par endroits (Riak, MapReduce, ZooKeeper). Notez que cette fiche couvre la première édition : une deuxième édition coécrite avec Chris Riccomini est sortie fin 2025. Si vous l'achetez aujourd'hui, prenez celle-là ; la colonne vertébrale du livre est la même.
Pour qui ?
Lisez-le si
- Vous faites du backend depuis 2-3 ans et vous voulez comprendre ce qui se passe sous l'ORM, le réplica et la file de messages que vous utilisez déjà
- Vous choisissez des briques d'infrastructure (SQL vs NoSQL, file vs log) et vous voulez des critères, pas des modes
- Vous avez déjà perdu une journée sur un bug de concurrence ou de donnée périmée que vous ne saviez pas nommer
- Vous préparez des entretiens system design : c'est LE livre de référence du domaine
Passez si
- Vous débutez : sans pratique préalable de SQL et d'une appli en production, les trade-offs resteront abstraits
- Vous ne faites que du frontend : la moitié du livre parle de problèmes que vous ne rencontrerez jamais directement
- Vous cherchez un tutoriel : il n'y a pas une ligne de « comment installer PostgreSQL » dans tout le livre, et c'est voulu
Pour aller plus loin
Les concepts de stockage et de transactions se pratiquent dans le cours SQL de ce site. L'état d'esprit concurrence du chapitre 8 se travaille les mains dans le code avec le cours Go (goroutines, channels, race conditions). Et le trajet d'une requête du client au serveur est cartographié dans le cours HTTP.
Commentaires (0)