~/VibeHandbook
PDF miễn phí

Chương 14 · 01

Ba hình dạng của lưu trữ dữ liệu

Hầu hết các cơ sở dữ liệu thuộc về ba nhóm chính. Bạn không cần ghi nhớ sản phẩm cụ thể — bạn cần nhận ra hình dạng nào phù hợp với vấn đề của mình.

LoạiVí dụPhù hợp nhất choĐánh đổi
Quan hệ ()PostgreSQL, MySQL, SQLiteDữ liệu có cấu trúc với các mối quan hệ; bất cứ thứ gì liên quan đến tiền bạc hoặc đòi hỏi độ chính xácBạn phải thiết kế schema (lược đồ) ngay từ đầu; mở rộng khối lượng ghi rất lớn khó hơn
Tài liệu / MongoDB, Firestore, DynamoDBDữ liệu linh hoạt hoặc lồng nhau, lặp nhanh, các bản ghi có hình dạng đa dạngDễ tạo ra dữ liệu không nhất quán; các mối quan hệ và báo cáo trở nên vụng về
Khóa-Giá trị (Key-Value)Redis, Memcached, Cloudflare KVBộ nhớ đệm (caching), phiên làm việc (), bộ đếm, tra cứu nhanh theo khóa đã biếtKhông thể truy vấn theo nội dung; thường không phải là nguồn dữ liệu gốc (source of truth) của bạn

Ba hình dạng này lưu trữ dữ liệu theo những cách thực sự khác nhau. Hãy hình dung chúng cạnh nhau:

  RELATIONAL (SQL)          DOCUMENT (NoSQL)         KEY-VALUE
  rows + columns            self-contained blobs     one key → one value
  ┌────┬───────┬──────┐     ┌──────────────────┐     ┌─────────┬─────────┐
  │ id │ email │ name │     │ {                │     │ key     │ value   │
  ├────┼───────┼──────┤     │   id, email,     │     ├─────────┼─────────┤
  │ 1  │ a@... │ Ana  │     │   name,          │     │ session │ "x9f2"  │
  │ 2  │ b@... │ Bob  │     │   posts: [ ... ] │     │ count   │ "42"    │
  └────┴───────┴──────┘     │ }                │     └─────────┴─────────┘
  tables reference          └──────────────────┘     no querying inside —
  each other                everything nested        look up by key only

Hãy nghĩ về cơ sở dữ liệu quan hệ như một tập hợp các bảng tính biết cách tham chiếu lẫn nhau. Ngôn ngữ bạn dùng để giao tiếp với nó là SQL (Structured Query Language — Ngôn ngữ truy vấn có cấu trúc). Một lựa chọn mặc định tốt cho 90% dự án: hãy bắt đầu với cơ sở dữ liệu quan hệ (Postgres). Nó trưởng thành, dễ dự đoán, ép buộc cấu trúc, và xử lý được các mối quan hệ mà mọi ứng dụng thực sự đều sẽ phát sinh theo thời gian. Hãy chọn kho lưu trữ tài liệu khi dữ liệu của bạn thực sự không có hình dạng cố định, và kho khóa-giá trị như một tầng hỗ trợ (caching), không phải kho lưu trữ chính.

Cái bẫy cần tránh là chọn theo cảm tính. Câu "NoSQL (các cơ sở dữ liệu không dùng bảng SQL — chúng lưu trữ các bản ghi linh hoạt, tự do) mở rộng tốt hơn" chỉ đúng với một tập hợp hẹp các vấn đề mà hầu hết ứng dụng không bao giờ gặp phải, và ngay cả khi đó, cái giá phải trả là từ bỏ những đảm bảo tính nhất quán khiến dữ liệu đáng tin cậy. Hãy chọn hình dạng phù hợp với dữ liệu của bạn, chứ không phải hình dạng nghe có vẻ ấn tượng nhất trong một video thiết kế hệ thống. Khi bạn không chắc chắn, quan hệ là lựa chọn an toàn — bạn luôn có thể thêm một lớp hoặc kho tài liệu sau này, nhưng gỡ rối một mô hình dữ liệu NoSQL rối rắm thì rất đau đầu.

Muốn bản ngoại tuyến?

Tải trọn cuốn sách dưới dạng PDF hoặc EPUB — miễn phí.