🟡 Trung cấp · Bài 6 / 14

Databases: SQL vs NoSQL

Database & DBMS, sự khác biệt giữa cơ sở dữ liệu quan hệ (SQL) và phi quan hệ (NoSQL), các loại NoSQL, và khi nào nên chọn cái nào.

Database & DBMS

Một database là tập hợp dữ liệu được tổ chức, lưu điện tử. DBMS (Database Management System) là phần mềm điều khiển database — làm cầu nối giữa database với người dùng/chương trình, cho phép truy xuất, cập nhật, quản lý, sao lưu & phục hồi dữ liệu.

Thành phần: Schema (định nghĩa cấu trúc), Table (bảng), Column (cột — một loại dữ liệu), Row (hàng — một bản ghi).

Các loại database
Tổng quan các loại database: SQL và các họ NoSQL

SQL databases (quan hệ)

  • Tổ chức thành bảng với quan hệ định nghĩa trước; mỗi hàng có primary key, liên kết bảng qua foreign key.
  • Theo mô hình nhất quán ACID.
  • Ưu: đơn giản & chính xác, dễ truy cập, nhất quán dữ liệu, linh hoạt query. Nhược: đắt bảo trì, đổi schema khó (cần migration), khó scale ngang.
  • Ví dụ: PostgreSQL, MySQL, MariaDB, Amazon Aurora.
ℹ️ Khái niệm liên quan

Materialized view: tập dữ liệu được tính sẵn & lưu lại → query nhanh hơn (dùng cho hiệu năng & replication). N+1 query problem: chạy thừa N câu lệnh đáng ra gộp được một (hay gặp ở GraphQL & ORM) — khắc phục bằng tối ưu query hoặc dataloader (gộp batch).

NoSQL databases (phi quan hệ)

Bất kỳ DB nào không dùng SQL làm ngôn ngữ truy cập chính. Dữ liệu không bắt buộc theo schema định trước, theo mô hình nhất quán BASE.

Loại NoSQLĐặc điểmVí dụ
DocumentLưu dạng tài liệu; trực quan, linh hoạt, dễ scale ngang. Đa dụng.MongoDB, CouchDB, DocumentDB
Key-valueCặp khóa-giá trị; đơn giản, hiệu năng cao; tốt cho session/lookup.Redis, DynamoDB, Memcached
GraphNode/edge/property; tốt cho quan hệ phức tạp.Neo4j, ArangoDB, Neptune
Time seriesTối ưu dữ liệu gắn mốc thời gian.InfluxDB, Apache Druid
Wide columnLưu theo column family; scale cực lớn (petabytes).Cassandra, BigTable, ScyllaDB
Multi-modelKết hợp nhiều mô hình trong một backend.ArangoDB, Cosmos DB, Couchbase

Use cases tiêu biểu: Graph → phát hiện gian lận, gợi ý, mạng xã hội. Time series → IoT, metrics, giám sát ứng dụng. Wide column → big data, phân tích real-time.

SQL vs NoSQL ⭐

Khía cạnhSQLNoSQL
Lưu trữBảng (hàng = entity, cột = thuộc tính).Đa dạng: key-value, document, graph...
SchemaCố định; đổi cần migration.Động; thêm field tùy ý.
QueryNgôn ngữ SQL (rất mạnh).Tùy DB, thường theo collection.
ScalingThường scale dọc (đắt).Scale ngang (commodity hardware, rẻ).
Độ tin cậyĐa số ACID.Thường hi sinh ACID để lấy hiệu năng/scale.
💡 Khi nào chọn cái nào?

Chọn SQL khi: dữ liệu có cấu trúc & schema chặt, dữ liệu quan hệ, cần join phức tạp, cần transaction. Chọn NoSQL khi: schema linh hoạt, dữ liệu phi quan hệ, không cần join phức tạp, workload cực lớn, cần throughput IOPS rất cao.

✅ Tóm tắt bài 6

SQL = quan hệ, schema cố định, ACID, join mạnh, scale dọc. NoSQL = phi quan hệ, schema động, BASE, scale ngang, nhiều loại (document/key-value/graph/time-series/wide-column/multi-model). Chọn theo cấu trúc dữ liệu & nhu cầu scale/transaction.