SQL vs NoSQL
Hai lựa chọn phổ biến nhất để lưu trữ dữ liệu, mỗi loại phù hợp với trường hợp khác nhau. Database là “bộ nhớ” của hệ thống.
So sánh
| SQL (Relational) | NoSQL (Non-relational) | |
|---|---|---|
| Lưu trữ | Bảng có dòng/cột cố định, khóa liên kết | Document, key-value, column-family, graph |
| Schema | Chặt chẽ, định nghĩa trước | Linh hoạt, không cần cố định |
| Tính chất | Tuân thủ ACID, nhất quán cao | Thường hy sinh phần ACID để đạt hiệu năng + mở rộng |
| Truy vấn | JOIN phức tạp giữa bảng | Hạn chế JOIN, truy vấn phức tạp khó |
| Mở rộng | Khó scale ngang, thường phải scale-up | Dễ scale-out bằng thêm máy |
| Ví dụ | MySQL, PostgreSQL, Oracle | MongoDB, Cassandra, Redis, DynamoDB |
| Hợp với | Ngân hàng, TMĐT, dữ liệu quan hệ chặt | Mạng xã hội, logging, dữ liệu lớn linh hoạt |
Khi nào chọn cái nào
- SQL: dữ liệu quan hệ chặt, schema rõ, cần transaction đảm bảo nhất quán cao (tài chính).
- NoSQL: dữ liệu linh hoạt, mở rộng nhanh, chấp nhận eventual consistency (mạng xã hội, analytics, log).
Thực tế thường kết hợp cả hai (polyglot persistence): SQL cho lõi cần chính xác, NoSQL/Redis cho phần mở rộng, cache. Ví dụ app chi tiêu: giao dịch tiền → SQL; nhật ký hoạt động → MongoDB.
Liên quan
- Chọn kiểu lưu trữ - các yếu tố cân nhắc rộng hơn (OLTP/OLAP, graph, object storage)
- Sharding - chia nhỏ DB khi vượt ngưỡng một máy
- Database Index - tối ưu truy vấn
- CAP Theorem - SQL nghiêng CP, NoSQL nghiêng AP