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.