Designing Data-Intensive Applications — Nền tảng hệ thống dữ liệu
Martin Kleppmann
Martin Kleppmann giải thích các khái niệm cốt lõi về database, distributed systems và data processing từ gốc rễ.
Mục lục
Cuốn sách “thánh kinh” của backend engineer
Nếu chỉ được chọn một cuốn sách về hệ thống phân tán, mình sẽ chọn DDIA. Martin Kleppmann không chỉ liệt kê technology — ông giải thích tại sao mọi thứ được thiết kế như vậy, trade-off là gì, và khi nào nên dùng cái gì.
Ba phần chính
Phần 1: Foundations of Data Systems
Kleppmann bắt đầu từ những thứ tưởng đơn giản: data model, storage engine, encoding format. Nhưng ông đi sâu đến mức bạn hiểu được tại sao B-tree và LSM-tree tồn tại song song.
Một insight quan trọng: không có database nào tốt nhất cho mọi trường hợp. Mỗi loại được tối ưu cho một pattern truy cập cụ thể.
OLTP workload → Row-oriented storage (PostgreSQL, MySQL)
OLAP workload → Column-oriented storage (ClickHouse, BigQuery)
Document model → Flexible schema, nested data (MongoDB)
Graph model → Many-to-many relationships (Neo4j)
Phần 2: Distributed Data
Đây là phần hay nhất. Kleppmann giải thích rõ ràng:
- Replication: Leader-follower, multi-leader, leaderless — mỗi loại giải quyết vấn đề gì
- Partitioning: Hash vs range partitioning, và cách handle hot spots
- Transactions: ACID thực sự nghĩa là gì (spoiler: mỗi database implement khác nhau)
- Consistency models: Linearizability, causal consistency, eventual consistency
Ông cũng giải thích CAP theorem đúng cách — không phải “chọn 2 trong 3” như mọi người hay nói sai.
Phần 3: Derived Data
Batch processing (MapReduce, Spark) vs stream processing (Kafka, Flink). Kleppmann giới thiệu khái niệm “unbundling the database” — thay vì dùng một monolithic database cho mọi thứ, hãy compose nhiều tool chuyên biệt.
Tại sao cuốn này đặc biệt?
Không vendor-specific
Sách không quảng cáo cho bất kỳ technology nào. Nó dạy nguyên lý, để bạn tự đánh giá bất kỳ tool nào trong tương lai.
Trade-off thinking
Mỗi quyết định thiết kế đều có trade-off. Kleppmann luôn trình bày cả hai mặt, giúp bạn hiểu khi nào nên chọn consistency over availability, hay ngược lại.
Đọc được nhiều lần
Lần đầu đọc: hiểu tổng quan. Lần hai: nắm được chi tiết. Lần ba: bắt đầu thấy connections giữa các chương. Mỗi lần đọc lại sau khi có thêm kinh nghiệm thực tế, bạn sẽ hiểu sâu hơn.
Kết luận
DDIA không phải sách để đọc nhanh. Mỗi chương cần thời gian ngấm. Nhưng sau khi đọc xong, bạn sẽ tự tin hơn rất nhiều khi design hệ thống hoặc thảo luận architecture với team.