Software Engineering Professional

Book Profile

Designing Data-Intensive Applications

Martin Kleppmann · 2017

A deep, principles-first guide to the architecture of reliable, scalable, and maintainable data systems, explaining the trade-offs behind databases, distributed systems, and data processing.

Get the book →

Behind the dizzying array of buzzwords—NoSQL, Big Data, eventual consistency, CAP theorem, MapReduce, stream processing—lie a small set of enduring principles that govern how data systems behave. Martin Kleppmann's Designing Data-Intensive Applications strips away the marketing to give software engineers and architects a technically precise understanding of how databases store and retrieve data, how replication and partitioning work, what guarantees transactions and consensus can and cannot provide, and how batch and stream processing fit together. Rather than tutoring you on one tool, it teaches you to reason about the fundamental trade-offs—reliability vs. cost, consistency vs. availability, timeliness vs. integrity—so you can choose, combine, and operate the right tools for any data-intensive application and design systems that survive the messy realities of hardware faults, network failures, and human error.

What it argues

A causal framework expressing how design levers (data model, storage engine, replication, partitioning, transaction guarantees, dataflow integration) and contextual conditions (faults, load, network/clock unreliability) influence psychological/behavioral states of the system and engineering team (consistency guarantees, fault tolerance, complexity) which in turn drive outcomes of reliability, scalability, and maintainability.

Key ideas it contributes