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ả địnhCó xung đột → khóa trướcÍt xung đột → cho chạy song song, kiểm tra khi commit
Cách làmKhó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ểmDữ liệu luôn nhất quán, an toàn, rõ ràngKhông khóa cứng, đồng thời cao, hiệu năng tốt khi xung đột hiếm
Nhược điểmChờ đợi, tắc nghẽn, có thể deadlockXung độ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