Obsidian

Search

Search IconIcon to open search

Designing Data-Intensive Applications

Last updated Jan 17, 2023

# Outline

“Designing Data-Intensive Applications” by Martin Kleppmann covers a wide range of topics related to data-intensive systems design, but some of the main sections and chapters include:

  1. Introduction

    • Overview of data-intensive systems and the challenges they pose
    • The importance of data storage, data processing, and data transportation
  2. Data Models and Query Languages

    • Relational data models and SQL
    • Document data models and query languages
    • Graph data models and query languages
  3. Storage and Retrieval

    • File storage and the filesystem
    • Block storage and the storage stack
    • Column-family storage and NoSQL databases
    • Time-series databases
  4. Data Processing

    • Batch processing: MapReduce, Hadoop, and Spark
    • Stream processing: Kafka, Storm, and Flink
    • Event-time and watermarks
    • Dataflow and directed acyclic graphs
  5. Data Integration

    • Data replication: one-to-one, one-to-many, and many-to-many
    • Data federation and data sharding
    • Data warehousing and data lakes
    • Change data capture and event sourcing
  6. Transactions and Consistency

    • Atomicity, consistency, isolation, and durability
    • Two-phase commit and three-phase commit
    • Distributed transactions and consensus
    • Eventual consistency and conflict resolution
  7. Replication and Partitioning

  8. Conclusion

    • Summary of key concepts and best practices
    • Future directions for data-intensive systems

This book is a comprehensive guide that covers the most important topics in data-intensive systems design. It provides a deep understanding of the principles and techniques for designing scalable and fault-tolerant systems.