🗄️🧠 Database System Design
Chúng Ta Đang Học Database... Hay Chỉ Đang Học Cách Gọi Database?
Một trong những điều thú vị khi làm backend là hầu như ngày nào chúng ta cũng làm việc với database.
Viết API.
Thêm bảng.
Tạo index.
Viết query.
Thêm transaction.
Mọi thứ diễn ra quen thuộc đến mức nhiều người nghĩ rằng mình đã "hiểu database".
Nhưng rồi một ngày, hệ thống bước vào production.
Cùng một câu query hôm qua chạy trong vài mili giây, hôm nay mất vài giây.
CPU của application vẫn còn rất nhiều, nhưng database lại bắt đầu trở thành nút thắt.
Dữ liệu vừa được cập nhật, nhưng một request khác vẫn đọc thấy giá trị cũ.
Thêm index nhưng hiệu năng gần như không cải thiện.
Hai transaction đều thành công, nhưng dữ liệu cuối cùng lại không còn đúng.
Lúc đó chúng ta mới nhận ra một điều:
Biết sử dụng database không đồng nghĩa với việc hiểu database.
Và đó cũng chính là lý do Database System Design Series ra đời.
Database không chỉ là nơi lưu dữ liệu
Khi mới học backend, database thường được giới thiệu rất đơn giản.
Đó là nơi lưu dữ liệu của ứng dụng.
Ứng dụng cần dữ liệu thì SELECT.
Muốn cập nhật thì UPDATE.
Muốn thêm thì INSERT.
Muốn xóa thì DELETE.
Cách nhìn này hoàn toàn đúng.
Nhưng chỉ đúng ở quy mô nhỏ.
Khi hệ thống bắt đầu phục vụ hàng nghìn hay hàng triệu người dùng, database không còn đơn thuần là nơi lưu dữ liệu nữa.
Nó bắt đầu quyết định:
- Hệ thống phản hồi nhanh đến đâu.
- Dữ liệu có còn đúng khi nhiều request chạy đồng thời hay không.
- Khả năng mở rộng của toàn bộ backend.
- Giới hạn chịu tải của hệ thống.
- Và cuối cùng là trải nghiệm của người dùng.
Nói cách khác.
Database không chỉ là một thành phần của ứng dụng.
Nó là một phần của kiến trúc hệ thống.
Phần lớn Developer học Database theo từng mảnh rời rạc
Nếu nhìn lại hành trình học của rất nhiều Backend Developer, chúng ta thường đi theo một con đường khá giống nhau.
Đầu tiên là học SQL.
Sau đó học CRUD.
Tiếp theo là JOIN.
Rồi đến INDEX.
Cuối cùng là TRANSACTION.
Từng chủ đề đều rất quan trọng.
Nhưng chúng thường được học một cách độc lập.
Điều đó khiến nhiều người có thể biết rất nhiều kỹ thuật, nhưng lại không hiểu chúng liên kết với nhau như thế nào khi hệ thống thực sự vận hành.
Ví dụ.
Bạn có thể biết Composite Index.
Nhưng chưa chắc biết khi nào Composite Index lại làm query chậm hơn.
Bạn có thể biết Replication.
Nhưng chưa chắc hiểu vì sao Replication lại tạo ra Stale Read.
Bạn có thể biết Transaction.
Nhưng chưa chắc hiểu Isolation Level sẽ ảnh hưởng thế nào đến tính đúng đắn của dữ liệu.
Những vấn đề này không còn là câu chuyện của SQL.
Chúng là câu chuyện của System Design.
Đây không phải là một series học SQL
Series này sẽ không dạy bạn cách viết câu lệnh SQL từ đầu.
Cũng không phải một chuỗi tutorial hướng dẫn CRUD từng bước.
Bạn sẽ không thấy những bài viết kiểu:
- SELECT cơ bản.
- INSERT như thế nào.
- JOIN syntax.
- Hướng dẫn cài MySQL.
Những tài liệu như vậy đã có rất nhiều.
Điều TechCraft muốn làm khác đi là giúp bạn hiểu vì sao database lại hoạt động như vậy.
Thay vì chỉ học:
Làm thế nào để tạo Index?
Chúng ta sẽ cùng tìm hiểu:
- Database thật sự tìm dữ liệu theo cách nào?
- Vì sao B-Tree lại trở thành cấu trúc phổ biến nhất?
- Vì sao có Index nhưng query vẫn chậm?
- Vì sao Execution Plan đôi khi quan trọng hơn chính câu SQL?
Đó là góc nhìn mà một kỹ sư hệ thống cần có.
Từ Database đến System Design
Điều thú vị là càng làm backend lâu, bạn sẽ càng nhận ra rất nhiều quyết định tưởng như chỉ liên quan đến database lại thực chất là quyết định kiến trúc.
Ví dụ:
Khi chọn Replication, bạn không chỉ đang tối ưu khả năng đọc.
Bạn đang chấp nhận khả năng đọc dữ liệu cũ.
Khi chọn Sharding, bạn không chỉ chia nhỏ dữ liệu.
Bạn đang thay đổi cách toàn bộ hệ thống quản lý dữ liệu.
Khi quyết định Denormalization, bạn không chỉ thay đổi mô hình dữ liệu.
Bạn đang đánh đổi giữa hiệu năng và tính nhất quán.
Đó là lý do database luôn nằm ở trung tâm của System Design.
Chúng ta sẽ đi qua những gì?
Để giúp người học có một góc nhìn có hệ thống, toàn bộ series được chia thành 5 giai đoạn.
Phần 1 — Query Performance Foundations
Bắt đầu từ câu hỏi cơ bản nhất.
Database thực sự tìm dữ liệu như thế nào?
Vì sao có Index mà vẫn chậm?
Execution Plan nói điều gì về cách database thực thi query?
Phần 2 — Correctness & Concurrency
Sau khi hiểu cách database truy xuất dữ liệu, chúng ta sẽ chuyển sang một câu hỏi quan trọng hơn.
Làm thế nào để dữ liệu vẫn đúng khi hàng nghìn request cùng chạy một lúc?
Đây là nơi chúng ta nói về Transaction, Locking, MVCC và Isolation Level.
Phần 3 — Database Scaling
Khi traffic tăng lên, câu hỏi không còn là query chạy được hay không.
Mà là:
Database còn chịu được bao lâu?
Ở phần này chúng ta sẽ tìm hiểu Partitioning, Sharding, Replication, Read/Write Splitting và nhiều chiến lược mở rộng khác.
Phần 4 — Data Architecture
Sau khi hiểu hiệu năng và khả năng mở rộng, chúng ta mới quay lại bài toán lựa chọn kiến trúc dữ liệu.
- SQL hay NoSQL?
- Chuẩn hóa hay phi chuẩn hóa?
- Thiết kế mô hình dữ liệu như thế nào để hệ thống dễ mở rộng trong tương lai?
Phần 5 — Advanced Database Architecture
Đây là phần cuối của series.
Lúc này câu hỏi không còn là:
"Làm sao viết query nhanh hơn?"
Mà là:
"Làm sao thiết kế tầng dữ liệu để hệ thống vẫn phát triển được sau nhiều năm?"
Chúng ta sẽ cùng bàn về:
- Multi-Database Architecture
- Data Migration
- Data Duplication
- Consistency Models
Series này dành cho ai?
Nếu bạn mới bắt đầu học SQL và chưa từng viết backend, có lẽ đây chưa phải là điểm khởi đầu phù hợp.
Nhưng nếu bạn đã:
- Viết backend một thời gian.
- Sử dụng database gần như mỗi ngày.
- Từng gặp những vấn đề khó giải thích trong production.
- Muốn hiểu sâu hơn cách các hệ thống lớn được thiết kế.
Thì mình tin đây sẽ là một series đáng để theo dõi.
Mục tiêu của TechCraft không phải là dạy thêm một cú pháp SQL.
Mục tiêu là giúp bạn thay đổi cách nhìn về database.
Kết
Sau nhiều năm làm backend, mình nhận ra một điều.
Rất ít production incident xảy ra vì chúng ta không biết viết SQL.
Phần lớn vấn đề xuất hiện vì chúng ta chưa hiểu cách database vận hành khi hệ thống bắt đầu lớn lên.
Hy vọng Database System Design Series sẽ giúp bạn nhìn database không chỉ như một nơi lưu dữ liệu, mà như một phần trung tâm của kiến trúc hệ thống.
Trong bài viết tiếp theo, chúng ta sẽ bắt đầu từ câu hỏi nền tảng nhất:
Database thực sự là gì, và vì sao rất nhiều developer sử dụng database mỗi ngày nhưng vẫn đánh giá thấp vai trò của nó trong một hệ thống production?
📚 Database System Design Series
Đây là bài mở đầu của Database System Design Series trên TechCraft.
Series sẽ lần lượt đưa chúng ta đi qua năm chủ đề lớn:
- Query Performance
- Correctness & Concurrency
- Database Scaling
- Data Architecture
- Advanced Database Architecture
Mục tiêu không phải là giúp bạn học thêm nhiều câu lệnh SQL hơn.
Mà là giúp bạn nhìn database như một hệ thống đang vận hành trong production, hiểu được những trade-off đằng sau mỗi quyết định thiết kế và từng bước xây dựng tư duy của một System Engineer.
#TechCraft #DatabaseSystemDesign #Database #DatabaseFundamentals #Backend #SystemThinking
BÌNH LUẬN