Library Discover Ideas My library Paths Compare Shelves Collections Method
Designing Data-Intensive ApplicationsMartin KleppmannCover of Designing Data-Intensive Applications by Martin Kleppmann
4 min read

Technology & AI

Designing Data-Intensive Applications

The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

Martin Kleppmann

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
Level
Deep
ISBN-13
9789352135240
distributed-systemsdataarchitecture

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
Your shelf

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.
01

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
02

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.

03

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.

04

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.

05

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.

06

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
07

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.

08

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.

09

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.

10

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

  1. 01Teach trade-offs, not toolsThe systems change; the reasons one class of system cannot do a thing do not.
  2. 02Talk in percentilesAverage latency hides the tail, which is where the actual user experience lives.
  3. 03Consistency anomalies have user-visible namesNot seeing your own comment, or time appearing to run backwards, are specific named guarantees failing.
  4. 04Know what your isolation level really preventsWrite skew survives snapshot isolation, which is what most databases mean by 'repeatable read'.
  5. 05Never order events by wall clock across machinesTime-of-day clocks jump, drift and lie; distributed ordering needs something else.

Reading journey

A route through this idea

This book is not on a curated path, so the route below is derived from the catalogue: what comes before it, what goes further, and what approaches the same ground differently.

  1. Start hereA Philosophy of Software DesignComputing, and it assumes less before you start.
  2. You are hereDesigning Data-Intensive Applications
  3. A different angleRefactoringAlso about Computing, but it reads as reference where that one is technical.
  4. Somewhere else entirelyAn Elegant PuzzleManagement and Computing travel together in this library, and this comes at it from the other side.

Nearby on the shelves

Related reading

↑↓ to move↵ to openesc to close