SQL/Relational DB là gì?
-
Là Database quan hệ (RDBMS) sử dụng SQL để quản lý và truy vấn dữ liệu.
-
Dữ liệu được lưu trong bảng (tables) và quan hệ (relationships) giữa các bảng được định nghĩa rõ.
-
Tuân theo schema cố định và hỗ trợ ACID transactions (Atomicity, Consistency, Isolation, Durability).
-
Dữ liệu dạng có cấu trúc và quan hệ phức tạp thường đúng nhất với SQL.
Đặc điểm chính
-
Schema cố định: phải định nghĩa cấu trúc trước khi dùng.
-
Query phức tạp: JOINs, aggregations… rất mạnh.
-
ACID: đảm bảo tính chính xác + an toàn dữ liệu.
-
Vertical scaling: tăng hiệu năng bằng nâng cấp phần cứng.
-
Ví dụ: MySQL, PostgreSQL, Oracle, SQL Server.
Khi dùng SQL?
-
Hệ thống transactional (billing/payments).
-
Dữ liệu có quan hệ phức tạp.
-
Bảo toàn tính nhất quán dữ liệu là ưu tiên.
-
Doanh nghiệp lớn, ERP/CRM/Finance.
NoSQL/Non-Relational DB là gì?
-
Là database không quan hệ, không bắt buộc schema cố định.
-
Lưu dữ liệu dưới nhiều dạng khác nhau:
-
Thiết kế để scale horizontal, xử lý lượng lớn dữ liệu.
Đặc điểm chính
-
Schema linh hoạt: dễ thay đổi theo yêu cầu dữ liệu.
-
Scalability ngang: mở rộng bằng thêm node/cluster rất dễ.
-
CAP theorem: trade-off giữa Consistency / Availability / Partition tolerance.
-
Query language khác nhau: không chuẩn SQL.
-
Ví dụ: MongoDB, Cassandra, Redis, CouchDB.
Khi dùng NoSQL?
-
Dữ liệu semi-struktur hoặc unstructured (JSON docs…).
-
Scale lớn, cần performance cao.
-
Khi flexible schema hữu ích.
-
Ứng dụng real-time analytics, user activity logs, social graphs.
SQL vs NoSQL
| Tiêu chí | SQL | NoSQL |
| Mô hình | Relational | Non-relational |
| Schema | Cố định | Linh hoạt |
| Cấu trúc | Bảng, rows/cols | Docs, key-value, graph… |
| Query | SQL chuẩn | Nhiều dạng query khác nhau |
| ACID | Hỗ trợ mạnh | Có thể hỗ trợ hạn chế |
| Scalability | Vertical | Horizontal |
| Joins | Có | Thường không |
| Tính nhất quán | Strong | Eventual (thường) |
| Use cases | Banking, transactional | Big data, web scale |
Schema
-
SQL yêu cầu schema rõ ràng trước → bảo đảm dữ liệu nhất quán.
-
NoSQL schema-less → thêm field mới dễ dàng, dữ liệu khác biệt giữa records không gây lỗi.
Scaling
-
SQL: scale bằng nâng cấp máy chủ → hiệu quả nhưng đắt và giới hạn.
-
NoSQL: scale bằng thêm nodes → phù hợp hệ thống lớn/ứng dụng phân tán.
Complex queries
-
SQL mạnh mẽ với JOINs & analytics.
-
NoSQL có thể phức tạp nếu cần quan hệ giữa nhiều nhóm dữ liệu.
Database Structure:
SQL:
-
Dữ liệu có cấu trúc, nhiều liên kết → rõ ràng.
-
Transactions quan trọng → ưu tiên.
-
Dữ liệu không cố định, thay đổi nhanh → linh hoạt.
-
Load cao, ít joins → phù hợp
Khi chọn SQL
-
Dữ liệu quan hệ rõ rệt giữa entities.
-
Cần transaction guarantee (money, inventory…).
Khi chọn NoSQL
-
Schema thay đổi thường xuyên.
-
Ứng dụng phân tán/scale lớn.
-
Lưu trữ document, logs, analytics data,
Khi chọn một database cho bussiness hãy tự hỏi:
-
Cần ACID không?
-
Dữ liệu có rõ structure không?
-
Volume và dạng truy vấn ra sao?