STACKJAVA

Locking trong Hibernate, so sánh Optimistic lock với Pessimistic lock

Locking trong Hibernate, so sánh Optimistic lock với Pessimistic lock

1. Locking trong Hibernate

Trong cơ sở dữ liệu quan hệ (Relation Database), locking là chỉ các hành động tránh việc dữ liệu bị thay đổi giữa thời gian đọc và thời gian sử dụng.

Ví dụ:

Bạn có một tài khoản ngân hàng, giả sử tài khoản của bạn có 1 triệu

Bây giờ bạn vừa nhờ 1 người thực hiện rút tiền 1 triệu đồng ở cây ATM còn mình thì đồng thời thực hiện chuyển khoản trên Internet Bank với giá trị 1 triệu.

Cả hai hành động trên đều diễn ra đồng thời => bạn có 1 triệu đồng mà rút được 1 triệu lại còn chuyển khoản được 1 triệu => lời 1 triệu rồi, đơn giản quá

Stop, ngừng ảo tưởng, locking chính là giải quyết tình huống này.

Có 2 loại locking trong Hibernate là Optimistic lock và Pessimstic lock.

2. Optimistic lock

Optimistic lock đảm bảo nhiều giao dịch (transaction) có thể hoàn thành mà không ảnh hưởng tới nhau, các transaction tiến hành mà không cần khóa các tài nguyên lại.

Trước khi commit, mỗi transaction sẽ kiểm tra lại xem dữ liệu của nó có bị transaction khác làm thay đổi không, nếu có thì sẽ quay trở lại trạng thái lúc đầu (rollback).

 

(Xem thêm: Code ví dụ Hibernate annotation @Version)

3. Pessimistic lock

Trái với Optimistic lock, khi bắt đầu một transaction, pessimistic lock sẽ khóa dữ liệu mà nó sử dụng lại và chỉ mở khóa khi nó đã sử dụng xong.

 

References:

https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/locking/Locking.html

https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html