Content deleted Content added
JeromeJerome (talk | contribs) m presentation |
{{unsourced}}, rephrase, formatting, misc |
||
Line 1:
{{unsourced}}
In [[computer science]], in the field of [[database]]s, '''optimistic concurrency control''', (OCC) is a [[concurrency control]] method used in [[relational database]]s without using [[Lock (computer science)|lock]]ing. It is commonly referred to as '''optimistic locking''', a misnomer.
Optimistic
There are three phases in an OCC transaction:
▲2. '''VALIDATION''': When the client has completed editing of the values in its sandbox or cache, it initiates the storage of the changes back to the database. During validation, an algorithm checks if the changes to the data would conflict with either
#:If a conflict exists, a
▲:* currently executing transactions in the case of ''Forward Validation Schemes''.
▲:If a conflict exists, a Conflict Resolution Algorithm must be used to resolve the conflict somehow (ideally by minimizing the number of changes made by the user) or, as a last resort, the entire transaction can be aborted (resulting in the loss of all changes made by the user).
▲3. '''WRITE''': If there is no possibility of conflict, the transaction commits.
==Web usage==
The [[
OCC is a natural choice. It is simple to implement and avoids unnecessary waiting or silently overwritten records. Typically the [[Form (web)|form]] presented to the user includes a hidden field with the record's original content, a timestamp, a sequence number, or an opaque token. On submit, this is compared against the database. If it differs, the conflict resolution algorithm is
===Examples===
Line 27:
* [[Bugzilla]] uses OCC; conflicts are called "mid-air collisions". [http://wiki.mozilla.org/Bugzilla:FAQ:Administrative_Questions#Does_Bugzilla_provide_record_locking_when_there_is_simultaneous_access_to_the_same_bug.]
* The [[Ruby on Rails]] framework has an API for OCC. [http://api.rubyonrails.com/classes/ActiveRecord/Locking.html]
* Most [[revision control]] systems support the "merge" model for concurrency, which is OCC.
[[Category:concurrency control]]
|