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).

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.
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ểm | Ví dụ |
|---|---|---|
| Document | Lưu dạng tài liệu; trực quan, linh hoạt, dễ scale ngang. Đa dụng. | MongoDB, CouchDB, DocumentDB |
| Key-value | Cặp khóa-giá trị; đơn giản, hiệu năng cao; tốt cho session/lookup. | Redis, DynamoDB, Memcached |
| Graph | Node/edge/property; tốt cho quan hệ phức tạp. | Neo4j, ArangoDB, Neptune |
| Time series | Tối ưu dữ liệu gắn mốc thời gian. | InfluxDB, Apache Druid |
| Wide column | Lưu theo column family; scale cực lớn (petabytes). | Cassandra, BigTable, ScyllaDB |
| Multi-model | Kế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ạnh | SQL | NoSQL |
|---|---|---|
| Lưu trữ | Bảng (hàng = entity, cột = thuộc tính). | Đa dạng: key-value, document, graph... |
| Schema | Cố định; đổi cần migration. | Động; thêm field tùy ý. |
| Query | Ngôn ngữ SQL (rất mạnh). | Tùy DB, thường theo collection. |
| Scaling | Thườ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. |
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.
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.