Pessimistic vs Optimistic Locking (Khóa bi quan vs lạc quan)
Hai cơ chế xử lý xung đột khi nhiều giao dịch cùng truy cập một tài nguyên. Khác nhau ở giả định: xung đột nhiều hay hiếm.
So sánh
| Pessimistic Locking (bi quan) | Optimistic Locking (lạc quan) | |
|---|---|---|
| Giả định | Có xung đột → khóa trước | Ít xung đột → cho chạy song song, kiểm tra khi commit |
| Cách làm | Khóa tài nguyên suốt giao dịch (SELECT ... FOR UPDATE) | Thêm cột version/timestamp; khi ghi so version (UPDATE ... WHERE id=? AND version=?) |
| Ưu điểm | Dữ liệu luôn nhất quán, an toàn, rõ ràng | Không khóa cứng, đồng thời cao, hiệu năng tốt khi xung đột hiếm |
| Nhược điểm | Chờ đợi, tắc nghẽn, có thể deadlock | Xung đột → rollback/retry, phức tạp code hơn |
Khi nào dùng
- Pessimistic: xung đột cao, giao dịch dài, cần chính xác tuyệt đối → ngân hàng, chuyển tiền, đặt chỗ.
- Optimistic: đồng thời cao, xung đột thấp, workload đọc nhiều ghi ít → hầu hết ứng dụng web (vd tăng lượt xem).
Trong phỏng vấn: chọn optimistic khi mức độ đồng thời cao + xung đột thấp; chọn pessimistic khi nhất quán dữ liệu là ưu tiên hàng đầu.
Liên quan
- Idempotency - cùng nhóm xử lý an toàn trong hệ phân tán
- Consistency Models - locking bảo vệ nhất quán
- SQL vs NoSQL -
SELECT ... FOR UPDATEtrong SQL