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
- Data Model and Encoding Choice — The decision about how application data is structured (relational, document, graph), encoded for storage and transmission, and how its schema is allowed to evolve.
- Storage Engine Design — The internal mechanism by which a database stores data on disk and retrieves it, including index structures and optimization for transactional or analytic workloads.
- Replication Strategy — The architectural approach to maintaining copies of data on multiple nodes and propagating changes, including leadership model and synchrony.
- Partitioning Strategy — The method of dividing a dataset across nodes to distribute load and storage, including key distribution scheme and rebalancing approach.
- Transaction and Isolation Guarantee Level — The strength of safety guarantees provided for grouped operations, spanning isolation levels and atomic commit across nodes.
- Distributed Environment Unreliability — The degree to which the operating environment exhibits unreliable networks, unsynchronized clocks, and unpredictable process pauses producing partial failures.
- Workload Load — The volume and pattern of demand placed on a data system, including request rate, data volume, read/write ratio, and access patterns.
- Consensus and Ordering Mechanism — The mechanisms used to get nodes to agree and to establish a consistent ordering of events, including linearizability, total order broadcast, and consensus algorithms.