DDIA · Martin Kleppmann · Bản đồ toàn cuốnDDIA · Martin Kleppmann · Bản đồ cả cuốnDDIA · Martin Kleppmann · Whole-book map
Bản đồ toàn cuốn · 12 chương · 3 phầnBản đồ cả cuốn sáchWhole-book map · 12 chapters · 3 parts

Cả cuốn sách trên một trangCả cuốn sách vẽ thành một bản đồThe whole book on one page

Mười hai chương của DDIA không phải mười hai chủ đề rời. Chúng là một lập luận kéo dài: Chương 1 dựng thước đo, chín chương giữa cho thấy cái giá phải trả khi dữ liệu rời khỏi một máy, và ba chương cuối ghép mọi thứ lại quanh dòng chảy dữ liệu12. Trang này bày cả lập luận đó ra cùng lúc — và gọi tên những sợi chỉ chạy xuyên nhiều chương mà đọc tuần tự dễ bỏ sót.

Cuốn sách có mười hai chương, nhưng chúng nối vào nhau thành một câu chuyện. Trang này vẽ cả câu chuyện ra một lần. Nhớ nhé: xem rừng trước, rồi hãy bước vào từng cây.

The twelve chapters of DDIA are not twelve separate topics. They are one sustained argument: Chapter 1 sets the yardstick, the nine middle chapters show what it costs when data leaves a single machine, and the last three reassemble everything around dataflow12. This page lays that argument out at once — and names the threads running across chapters that sequential reading tends to miss.

Sợi chỉSợi chỉThe thread

Chương 1 không phải chương mở đầu, nó là thước đoChương 1 cho ta ba câu hỏi để hỏi mọi chương sauChapter 1 is not an introduction, it is the yardstick

Kleppmann mở sách bằng ba phẩm chất — tin cậy, mở rộng, bảo trì — rồi dùng chúng làm bộ từ vựng để chấm mọi lựa chọn kỹ thuật ở mười một chương còn lại1. Đọc theo cách đó thì mỗi chương sau trở thành một câu trả lời cho cùng ba câu hỏi, chứ không phải một chủ đề mới.

Chương 1 cho ba câu hỏi: hỏng thì sao, đông người dùng thì sao, sửa về sau có dễ không. Nhớ nhé: mười một chương còn lại đều đang trả lời ba câu đó.

Kleppmann opens with three qualities — reliability, scalability, maintainability — then uses them as the vocabulary for judging every technical choice in the remaining eleven chapters1. Read that way, each later chapter becomes an answer to the same three questions rather than a new subject.

Cách dùng trang này: mỗi thẻ chương bên dưới mở thẳng vào từng mục của chương đó. Nếu bạn đang tìm một khái niệm cụ thể, mục Sợi chỉ xuyên suốt chỉ ra nó xuất hiện ở những chương nào — vì phần lớn khái niệm quan trọng của cuốn sách xuất hiện nhiều hơn một lần, dưới nhiều tên khác nhau1.

Bấm tên chương để đọc cả chương, bấm dòng nhỏ bên dưới để nhảy thẳng tới đúng mục. Nhớ nhé: không cần đọc theo thứ tự.

How to use this page: each chapter card below opens directly into that chapter's sections. If you are hunting a specific idea, the through-lines section names every chapter it appears in — because most of the book's important ideas appear more than once, under more than one name1.

Phần I · Chương 1–4Phần IPart I · Chapters 1–4

Nền tảng của hệ thống dữ liệuNền tảng của hệ thống dữ liệuFoundations of Data Systems

Bốn chương này ở trên một máy. Chúng quyết định hình dạng dữ liệu trước khi có bất kỳ máy thứ hai nào: dùng mô hình nào, cất trên đĩa ra sao, và mã hóa thế nào để code hôm nay còn đọc được dữ liệu của năm ngoái12.

Bốn chương đầu nói về một máy thôi: dữ liệu trông thế nào, cất ở đâu, và viết ra sao để sau này còn đọc được. Nhớ nhé: chưa có máy thứ hai nào cả.

These four chapters live on a single machine. They decide the shape of the data before any second machine exists: which model to use, how to lay it out on disk, and how to encode it so today's code can still read last year's data12.

Phần II · Chương 5–9Phần IIPart II · Chapters 5–9

Dữ liệu phân tánDữ liệu phân tánDistributed Data

Năm chương nặng nhất cuốn sách. Mỗi chương thêm một máy và cho thấy cái giá: bản sao lệch nhau, dữ liệu phải chia nhỏ, giao dịch phải chống được đồng thời, mạng và đồng hồ không đáng tin, và cuối cùng là câu hỏi làm sao nhiều máy cùng chốt được một sự thật12.

Năm chương này nói về nhiều máy cùng làm việc. Nhớ nhé: thêm máy thì thêm sức, nhưng cũng thêm cách hỏng.

The heaviest five chapters. Each adds a machine and shows the price: replicas drift apart, data must be split, transactions must withstand concurrency, networks and clocks cannot be trusted, and finally — how do many machines agree on one truth12?

05

Giữ cùng một dữ liệu trên nhiều máyKeeping the same data on several machines

08

Hệ phân tán hỏng theo kiểu bộ phận và bất địnhDistributed systems fail in partial, nondeterministic

Phần III · Chương 10–12Phần IIIPart III · Chapters 10–12

Dữ liệu phái sinhDữ liệu phái sinhDerived Data

Ba chương cuối không thêm máy nữa mà đổi góc nhìn: xem hệ như một dòng chảy dữ liệu. Xử lý theo lô và xử lý luồng là hai nhịp của cùng một ý tưởng, và chương kết ghép chúng lại thành một lập luận về cách xây hệ — rồi hỏi hệ ấy nên được dùng thế nào12.

Ba chương cuối nhìn cả hệ như dòng nước chảy. Nhớ nhé: dữ liệu đi từ chỗ này sang chỗ khác, và ta xây quanh dòng chảy đó.

The last three chapters add no machines; they change the viewpoint, seeing a system as dataflow. Batch and stream are two tempos of one idea, and the closing chapter assembles them into an argument about how to build such systems — then asks how they ought to be used12.

12

Ghép các mảnh, rồi hỏi hệ này nênCompose the pieces, then ask what the system ought

Sợi chỉ xuyên suốtNhững ý quay lạiThrough-lines

Tám khái niệm xuất hiện nhiều hơn một lầnTám ý lặp lại khắp cuốn sáchEight ideas that appear more than once

Đọc tuần tự dễ khiến mỗi chương trông như một chủ đề riêng. Nhưng phần lớn khái niệm nặng ký của cuốn sách quay lại nhiều lần, thường dưới một cái tên khác1. Nhận ra chúng là chỗ cuốn sách chuyển từ một tập hợp kỹ thuật thành một lập luận.

Nhiều ý trong sách xuất hiện đi xuất hiện lại ở các chương khác nhau, mỗi lần một tên. Nhớ nhé: thấy được chúng thì cả cuốn sách nối lại thành một mạch.

Read in sequence, each chapter can look like its own topic. But most of the book's load-bearing ideas return several times, usually under a different name1. Noticing them is where the book turns from a collection of techniques into an argument.

Nhật ký nối đuôiNhật ký nối đuôiThe append-only log

Cùng một cấu trúc xuất hiện bốn lần dưới bốn cái tên. Chương 3 gọi nó là engine lưu trữ log-structured; Chương 5 gọi là nhật ký nhân bản; Chương 11 gọi là nhật ký phân mảnh; Chương 12 lấy chính nó làm trục để tháo rời cơ sở dữ liệu1. Nhận ra sợi chỉ này là nhận ra vì sao Phần III không phải chủ đề mới, mà là hệ quả.

Cùng một ý tưởng "chỉ ghi thêm vào cuối" xuất hiện đi xuất hiện lại, mỗi lần một tên khác. Nhớ nhé: học một lần, dùng được ở bốn chương.

The same structure appears four times under four names. Chapter 3 calls it a log-structured storage engine; Chapter 5, a replication log; Chapter 11, a partitioned log; Chapter 12 makes it the axis for unbundling the database1. Seeing this thread is seeing why Part III is not a new topic but a consequence.

Dữ liệu phái sinhDữ liệu phái sinhDerived data

Chỉ mục là dữ liệu phái sinh — dựng lại được từ nguồn, nên mất cũng không sao. Chương 3 nói điều đó về chỉ mục; Chương 10 và 11 nói điều đó về đầu ra của quy trình lô và luồng; Chương 12 nâng nó thành nguyên tắc kiến trúc: tách hệ ghi-gốc khỏi mọi thứ suy ra từ nó1.

Có thứ dữ liệu gốc, và thứ tính ra được từ gốc. Nhớ nhé: mất cái thứ hai thì dựng lại được, mất cái thứ nhất thì không.

An index is derived data — rebuildable from the source, so losing it is survivable. Chapter 3 says this of indexes; Chapters 10 and 11 say it of batch and stream outputs; Chapter 12 raises it into an architectural principle: separate the system of record from everything derived from it1.

Đa số phán xửĐa số phán xửThe majority decides

Không node nào tự biết mình còn sống dưới mắt người khác. Chương 5 dựng quorum đọc–ghi; Chương 8 nói thẳng rằng sự thật do đa số định nghĩa chứ không phải do node tự tin nhất, và đưa ra fencing token; Chương 9 cho thấy đồng thuận chính là hình thức hóa của cùng ý tưởng đó1.

Một máy không tự quyết được nó đúng hay sai. Nhớ nhé: phải hỏi số đông mới biết.

No node knows on its own whether the others still consider it alive. Chapter 5 builds read/write quorums; Chapter 8 states plainly that truth is defined by the majority rather than by the most confident node, and introduces fencing tokens; Chapter 9 shows consensus to be the formalisation of that same idea1.

Chạy qua: Chương 5 Chương 8 Chương 9Runs through: Ch 5 Ch 8 Ch 9

Đồng hồ và thứ tựĐồng hồ và thứ tựClocks and ordering

Chương 5 dùng dấu thời gian để hóa giải xung đột và chỉ ra LWW làm mất dữ liệu; Chương 8 giải thích vì sao đồng hồ không đáng tin đến thế; Chương 9 thay đồng hồ vật lý bằng thứ tự nhân quả và phát sóng theo thứ tự toàn phần; Chương 11 gặp lại đúng vấn đề dưới tên thời gian sự kiện và thời gian xử lý1.

Các máy không thống nhất được "lúc nào". Nhớ nhé: muốn xếp thứ tự thì đừng chỉ dựa vào đồng hồ.

Chapter 5 resolves conflicts with timestamps and shows that LWW discards data; Chapter 8 explains why clocks are so untrustworthy; Chapter 9 replaces physical clocks with causal ordering and total order broadcast; Chapter 11 meets the same problem again as event time versus processing time1.

Hai chiều tương thíchHai chiều tương thíchCompatibility in both directions

Chương 4 đặt ra cặp tương thích ngược và xuôi vì nâng cấp luôn cuốn chiếu — code mới phải đọc được dữ liệu cũ, và code cũ không được làm hỏng dữ liệu mới. Chương 5 cho thấy chính ràng buộc đó buộc nhân bản phải chịu được hai phiên bản code chạy song song trong suốt quá trình nâng cấp1.

Code mới phải đọc được dữ liệu cũ, và code cũ không được làm hỏng dữ liệu mới. Nhớ nhé: lúc nâng cấp, hai bên cùng chạy.

Chapter 4 sets up backward and forward compatibility because upgrades always roll — new code must read old data, and old code must not corrupt new data. Chapter 5 shows the same constraint forcing replication to tolerate two code versions at once throughout the upgrade1.

Chạy qua: Chương 4 Chương 5Runs through: Ch 4 Ch 5

Lũy đẳngLũy đẳngIdempotence

Khi việc gửi lại là không tránh khỏi, cách duy nhất để kết quả đúng là làm cho việc lặp lại vô hại. Chương 11 dùng nó để đạt hiệu ứng đúng một lần; Chương 12 nâng lên thành lập luận đầu-cuối: chỉ hai đầu mới bảo đảm được tính đúng đắn, tầng giữa không làm thay được1.

Làm lại một việc mà kết quả không đổi. Nhớ nhé: đó là cách sống chung với việc phải gửi lại.

When retries are unavoidable, the only way to keep results correct is to make repetition harmless. Chapter 11 uses it to achieve effectively-once; Chapter 12 raises it into the end-to-end argument: only the endpoints can guarantee correctness, and no middle layer can do it for them1.

Chạy qua: Chương 11 Chương 12Runs through: Ch 11 Ch 12

Cái nhãn không phải bảo đảmCái nhãn không phải bảo đảmThe label is not the guarantee

Sợi chỉ khó chịu nhất của cuốn sách. Chương 7 cho thấy tên mức cô lập nghĩa khác nhau giữa các cơ sở dữ liệu — cái Oracle gọi là serializable thực ra là snapshot isolation. Chương 9 cho thấy CAP bị dùng sai đến mức gần như vô nghĩa, và khả tuyến tính hóa không phải khả tuần tự hóa. Chương 11 cho thấy exactly-once không có nghĩa như chữ nghĩa của nó1. Mỗi lần, bài học giống nhau: hỏi hệ chặn được tình huống nào, đừng hỏi nó tự gọi mình là gì.

Đừng tin cái tên người ta dán lên. Nhớ nhé: hỏi xem nó thật sự chặn được chuyện gì.

The book's most uncomfortable thread. Chapter 7 shows isolation-level names meaning different things across databases — what Oracle calls serializable is really snapshot isolation. Chapter 9 shows CAP misused almost past meaning, and linearizability not being serializability. Chapter 11 shows exactly-once not meaning what its words say1. Each time the lesson is the same: ask which situations a system actually prevents, not what it calls itself.

Chạy qua: Chương 7 Chương 9 Chương 11Runs through: Ch 7 Ch 9 Ch 11

Phân mảnh vọng lạiPhân mảnh vọng lạiPartitioning echoes

Chương 6 chia dữ liệu ra nhiều máy. Cái giá của quyết định đó vọng lại khắp nơi: Chương 7 cho thấy giao dịch chạm nhiều mảnh chậm hơn hẳn; Chương 10 cho thấy join và lệch tải đều là bài toán đưa dữ liệu liên quan về cùng một chỗ; Chương 11 phân mảnh chính nhật ký1.

Chia nhỏ dữ liệu ra nhiều máy làm mọi việc khác khó lên một chút. Nhớ nhé: cái giá đó trả dần ở các chương sau.

Chapter 6 splits data across machines. The price of that decision echoes everywhere: Chapter 7 shows cross-partition transactions being markedly slower; Chapter 10 frames joins and skew as the problem of bringing related data together; Chapter 11 partitions the log itself1.

Cuốn sách không hứa cho bạn một kiến trúc đúng. Nó cho bạn bộ từ vựng để hỏi đúng câu, và đủ chi tiết để biết mình đang trả giá bằng gì.

Sách không chỉ cho bạn một cách làm đúng duy nhất. Nhớ nhé: nó dạy bạn hỏi câu đúng trước khi chọn.

The book does not promise you a correct architecture. It gives you the vocabulary to ask the right question, and enough detail to know what you are paying with.