一、樂(lè)觀鎖和MVCC的區(qū)別
樂(lè)觀鎖(Optimistic Locking)和多版本并發(fā)控制(Multiversion Concurrency Control,MVCC)是并發(fā)控制的兩種不同策略,用于處理并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí)的數(shù)據(jù)一致性問(wèn)題。
1、實(shí)現(xiàn)機(jī)制不同
樂(lè)觀鎖假設(shè)在大多數(shù)情況下,并發(fā)訪問(wèn)的事務(wù)之間不會(huì)發(fā)生沖突。因此,它不會(huì)在事務(wù)開(kāi)始時(shí)對(duì)數(shù)據(jù)進(jìn)行加鎖,而是在提交時(shí)檢查數(shù)據(jù)是否被其他事務(wù)修改。MVCC通過(guò)為每個(gè)事務(wù)創(chuàng)建數(shù)據(jù)的不同版本來(lái)處理并發(fā)訪問(wèn)。當(dāng)事務(wù)開(kāi)始時(shí),它會(huì)讀取數(shù)據(jù)庫(kù)中的當(dāng)前有效版本,并在事務(wù)執(zhí)行期間保持該版本的一致性。同時(shí),其他事務(wù)可以并發(fā)地讀取和修改其他版本的數(shù)據(jù)。
2、多版本并發(fā)控制不同
如果檢測(cè)到數(shù)據(jù)沖突(即其他事務(wù)已經(jīng)修改了相同的數(shù)據(jù)),樂(lè)觀鎖會(huì)中止當(dāng)前事務(wù)并引發(fā)沖突處理機(jī)制。典型的處理方式是回滾事務(wù)或重新嘗試事務(wù)。如果多個(gè)事務(wù)試圖修改同一版本的數(shù)據(jù),MVCC會(huì)檢測(cè)到?jīng)_突并采取適當(dāng)?shù)拇胧3R?jiàn)的處理方式是阻塞等待或選擇其中一個(gè)事務(wù)作為勝者,并中止其他事務(wù)。