Skip to content

DDIA · 2nd Edition (English)

Designing Data-Intensive Applications

The definitive guide to the architecture of modern data systems — from data models and storage engines to distributed consensus and streaming pipelines.

View on O’Reilly Learning

Author
Martin Kleppmann

Personal Site · GitHub

Martin Kleppmann

Distributed systems researcher at the University of Cambridge, speaker, author, and open source contributor. Formerly built data infrastructure at LinkedIn and Rapportive.

Visit Profile
Author
Chris Riccomini

Personal Site · GitHub

Chris Riccomini

Software engineer, investor, and author. Worked at PayPal, LinkedIn, and WePay. Runs Materialized View Capital and co-created Apache Samza and SlateDB.

Visit Profile

Core Philosophy

Principles and Trade-offs in Modern Data Systems

There are no solutions, there are only trade-offs. […] But you try to get the best trade-off you can get, and that’s all you can hope for.

— Thomas Sowell, Interview with Fred Barnes (2005)

Data is at the center of much application development today. In modern web and mobile apps, software as a service (SaaS), and cloud services, it has become normal to store data from many different users in shared, server-based data infrastructure.

We call an application data-intensive if data management is one of the primary challenges in developing the application. While in compute-intensive systems the challenge is parallelizing large computations, in data-intensive applications we worry more about storing and processing large data volumes, managing data evolution, ensuring consistency in the face of failures and concurrency, and making services highly available.

This book unpacks the essence of data system design from low-level data structures to top-level architecture. Whether you are an architect, backend engineer, or data specialist, this guide provides the conceptual framework needed to evaluate, combine, and design data systems effectively.