Data consistency in Rails: Understanding the different between transaction and locking
Source Tất cả bắt nguồn từ bài post này của bên Grokking VietNam. Đại ý của bài viết như sau: Một ứng dụng chuyển tiền của ngân hàng có một đoạn code như dưới đây:
1 2 3 4 5 6 7 8 9 10 |
def transfer(A, B, amount) DB.transaction do if A.balance > amount A.balance -= amount A.save! B.balance += amount B.save! end end end |
Ứng dụng chạy một thời gian thì có bug là tài khoản của một vài người dùng bị âm tiền. Vấn đề ở đây là gì và cách giải quyết. Mới đầu khi đọc bài viết tôi cũng thấy hơi khó hiểu khi đoạn code trên về…