Popular Posts

Wednesday, March 7, 2012

Optimistic locking failure

There are cases like multiple threads try to modify the entries depending on the already existing row information.If one thread commits the
info after other thread reads the info,then date will get corrupted and will lead to abnormal behavior.To avoid this condition,we add one more column in database tables
so thatwhen a thread reads the row,it will increase this value in column to one and before writing the info it will recheck.If both are same,then commits the value.Otherwise
it will throw optimistic lodking failure exception.


Optimistic Locking is a strategy where you read a record, take note of a version number and check that the version hasn't changed before you write the record back. When you write the record back you filter the update on the version to make sure it's atomic. (i.e. hasn't been updated between when you check the version and write the record to the disk) and update the version in one hit.
If the record is dirty (i.e. different version to yours) you abort the transaction and the user can re-start it.
This strategy is most applicable to high-volume systems and three-tier architectures where you do not necessarily maintain a connection to the database for your session. In this situation the client cannot actually maintain database locks as the connections are taken from a pool and you may not be using the same connection from one access to the next.
Pessimistic Locking is when you lock the record for your exclusive use until you have finished with it. It has much better integrity than optimistic locking but requires you to be careful with your application design to avoidDeadlocks. To use pessimistic locking you need either a direct connection to the database (as would typically be the case in a two tier client server application) or an externally available transaction ID that can be used independently of the connection.
In the latter case you open the transaction with the TxID and then reconnect using that ID. The DBMS maintains the locks and allows you to pick the session back up through the TxID. This is how distributed transactiona using two-phase commit protocols (such as XA or COM+ Transactions) work.

No comments:

Post a Comment