Designing Data-Intensive Applications
The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
Martin Kleppmann's survey of the principles underlying data systems — storage, encoding, replication, partitioning, transactions and consensus — written to explain the trade-offs rather than to recommend any particular technology.
- First published
- 2017
- Publisher
- O'Reilly Media, Incorporated
- Pages
- 618
- Shelf
- Technology
- Level
- Deep
- ISBN-13
- 9789352135240
Record checked against
Only one source carried a publication date for this work, so the year is uncorroborated.
Catalogue note
- Reads as
- TechnicalAssumes and builds craft knowledge.
- Level
- Advanced / AdvancedAssumes you have read around the subject already.
- Approach
- Applied
- Written for
- Engineers, Specialists and serious readers
- Ideas
Saved in this browser only — no account, nothing sent anywhere. My library
Read this if
- You build software and want the ideas under the tools.
- You work in this area and want depth rather than an overview.
- You have read around this already and want a book that assumes it.
What the book is doing
Kleppmann's premise is that the technology landscape changes constantly but the underlying problems do not, so the useful thing to teach is the reasoning rather than the tools.
The result is a book that names almost every major system while recommending none. It explains what a class of system can and cannot do, and why, so a reader can evaluate the next one without waiting for someone to write about it.
It names the systems and recommends none. What it teaches is how to evaluate the one that does not exist yet.
Devmark’s reading — not a quotation from the book
Reliability, scalability, maintainability
The opening chapter establishes the three properties everything else is measured against, and is more careful than the familiar words suggest.
Reliability is continuing to work correctly when things go wrong, including human error, which he treats as the dominant cause. Scalability is defined as the ability to cope with growth, with the insistence that it be discussed with specific load parameters. Maintainability is broken into operability, simplicity and evolvability.
Percentiles, not averages
A small section with outsized practical value. Kleppmann argues that average response time is nearly useless and that latency should be discussed in percentiles — p50, p95, p99 — because the tail is where the experience actually lives.
He also explains head-of-line blocking and why measuring on the client side rather than the server is necessary to see queueing delay at all. This section alone changes how most teams talk about performance.
Storage engines
The chapter explaining log-structured merge trees against B-trees is the clearest treatment available. It builds an engine from first principles — an append-only log, then an index, then compaction — so the reader understands why the two families make opposite trade-offs.
The result is that a reader can reason about which workloads suit which engine rather than memorising which database uses what.
Replication and its consequences
Kleppmann covers single-leader, multi-leader and leaderless replication, and is unusually good on the consequences that leak into application code.
Read-after-write consistency, monotonic reads and consistent prefix reads are each explained through the user-visible symptom first — a user not seeing their own comment, time appearing to move backwards — which makes abstract consistency guarantees concrete in a way most treatments do not.
Transactions and isolation levels
The chapter most likely to change a reader's practice. Kleppmann works through the race conditions each isolation level does and does not prevent: dirty reads, dirty writes, read skew, lost updates, write skew and phantoms.
His treatment of write skew is particularly valuable, because it is the anomaly most developers have never heard of and it is not prevented by snapshot isolation — which is what most databases actually give you when they say "repeatable read".
Most databases do not give you the isolation level you think you asked for, and the gap has a name.
Devmark’s reading — not a quotation from the book
Distributed systems trouble
The chapter on unreliable networks, clocks and processes is the book's most sobering. Kleppmann shows that partial failure is the defining difficulty: a request that has not returned may have succeeded, failed, or be about to succeed, and there is no way to tell.
His treatment of clocks is essential — that time-of-day clocks can jump backwards, that NTP drift is real, and that using timestamps for ordering across machines is a bug waiting for a busy afternoon.
Consistency and consensus
The theoretical chapter, and the hardest. Linearizability, ordering guarantees, total order broadcast, and the equivalence between consensus and several problems that do not look like consensus.
Kleppmann's handling of the CAP theorem is a notable service: he explains why the popular "pick two of three" formulation is misleading, and what the theorem actually says. That correction alone is worth the chapter.
Batch and stream processing
The final chapters trace the lineage from MapReduce through dataflow engines to stream processing, and make the case that batch and stream are two points on one continuum rather than different disciplines.
The treatment of event sourcing, change data capture and the distinction between event time and processing time is the clearest introduction to stream semantics in general circulation.
Where it is limited and why it endures
It is long, dense, and not a tutorial — there is no code to run and no system to build. Some specific product references have dated, and the second edition has been long in preparation.
But the reasoning has not dated at all, because it is about the physics of distributed state rather than about vendors. It has become the standard reference for exactly that reason: it teaches what remains true after the tools change.
What to take away
- 01Teach trade-offs, not toolsThe systems change; the reasons one class of system cannot do a thing do not.
- 02Talk in percentilesAverage latency hides the tail, which is where the actual user experience lives.
- 03Consistency anomalies have user-visible namesNot seeing your own comment, or time appearing to run backwards, are specific named guarantees failing.
- 04Know what your isolation level really preventsWrite skew survives snapshot isolation, which is what most databases mean by 'repeatable read'.
- 05Never order events by wall clock across machinesTime-of-day clocks jump, drift and lie; distributed ordering needs something else.
