Designing Data-Intensive Applications

About the Book

“Designing Data-Intensive Applications” is a deep dive into the principles and practice of modern data system design. Drawing on his extensive experience in distributed data systems, author Martin Kleppmann systematically introduces the core concepts and techniques needed to build data-intensive applications.

Core Topics

Data Models and Query Languages

  • Comparing the relational, document, and graph models
  • When to use SQL versus NoSQL
  • Query optimization techniques

Storage and Retrieval

  • Choosing data structures (B-trees, LSM-trees, and so on)
  • Design principles of storage engines
  • Indexing strategies

Distributed Systems

  • Data replication and consistency
  • Partitioning and sharding strategies
  • Transactions and concurrency control
  • Fault tolerance in distributed systems

Reading Notes

Part I: Foundations of Data Systems

This part introduces the basic concepts of data systems, covering data models, storage, and querying. The author stresses the importance of understanding the underlying principles rather than merely learning to use the tools.

Part II: Distributed Data

This part digs into the core challenges of distributed systems, including the trade-offs among consistency, availability, and partition tolerance (the CAP theorem).

Study Plan

  • [ ] Chapter 1: Reliable, Scalable, and Maintainable Applications
  • [ ] Chapter 2: Data Models and Query Languages
  • [ ] Chapter 3: Storage and Retrieval
  • [ ] Chapter 4: Encoding and Evolution
  • [ ] Chapter 5: Replication
  • [ ] Chapter 6: Partitioning
  • [ ] Chapter 7: Transactions
  • [ ] Chapter 8: The Trouble with Distributed Systems
  • [ ] Chapter 9: Consistency and Consensus

Practical Reflections

This book is immensely helpful for understanding and designing large-scale data systems, and its knowledge matters especially in microservice architectures and cloud-native environments.