Rails Transaction

Pessimistic Locking vs Optimistic Locking: Mencegah Lost Updates [Ferry Suhandri]

Solution :

Timeout transaction, rollback

select * from accounts where id in (‘A’,’B’) for Update

for update nowait

Pessimistic Locking

Pessimistic Locking adalah proses penguncian data terhadap perubahan dari sesi lain yang dilakukan dari sisi Database.

ActiveRecord::Base.transaction do
# SELECT * FROM INVOICES WHERE id=? FOR UPDATE
invoice = Invoice.lock.find(invoice_id)

return unless invoice.status == 'new'

invoice.create_payment
invoice.update(status: 'paid')
end

Or

invoice = Invoice.lock("FOR UPDATE NOWAIT").find(invoice_id)

Or

invoice = Invoice.find(invoice_id)
invoice.with_lock do
(..)
end

Optimistic Locking

Optimistic Locking adalah proses penguncian data terhadap perubahan dari sesi lain yang dilakukan dari sisi algoritma aplikasi

using locking_column

--

--