Concurrency Control 算法分類
TwoPhaseLocking
悲觀算法,訪問(wèn)資源必須獲取一把鎖,否則一直等待資源釋放,因此有可能導(dǎo)致死鎖的發(fā)生。
- 2PLwithdeadlockdetection.(通過(guò)一個(gè) dead lock detector 來(lái)檢查死鎖的發(fā)生,并決定 abort 哪個(gè)事務(wù))
- 2PL with non-waiting deadlock prevention. (更加保守的算法,在獲取鎖之前便決定是否有可能發(fā)生死鎖,如果有,則abort響應(yīng)事務(wù))
- 2PL with wait-and-die deadlock prevention. (每一個(gè)事務(wù)都有一個(gè)時(shí)間戳,代表該事務(wù)的年齡。如果一個(gè)『年輕的』事務(wù)申請(qǐng)一個(gè)由『年老的』事務(wù)所擁有的資源時(shí),『年輕的』事務(wù)立馬被abort。
TimestampOrderingProtocols
樂觀算法,通過(guò)時(shí)間戳來(lái)保證事務(wù)的一致性
- BasicT/Oalgorithm.(最基本的 TO 算法)
- Multi-version T/O.(每寫一個(gè) tuple,數(shù)據(jù)庫(kù)便會(huì)為該 tuple 保存一個(gè)版本,當(dāng)事務(wù)有讀的請(qǐng)求時(shí),數(shù)據(jù)庫(kù)會(huì)決定返回哪個(gè)版本。主要是通過(guò)時(shí)間戳來(lái)保證事務(wù)在order上的一致性罷)
- Optimistic concurrency control. (所有數(shù)據(jù)都在事務(wù)自己的 workspace里面讀寫,當(dāng)事務(wù)提交時(shí),檢測(cè)是否有沖突發(fā)生,并且決定該怎么辦)
- T/O with partition-level locking. (將數(shù)據(jù)分成一個(gè)個(gè)的 partition,然后又很多的線程,有且僅有一個(gè)線程可以訪問(wèn)這些partition,當(dāng)事務(wù)需要訪問(wèn)某一個(gè)partition時(shí),便會(huì)向相應(yīng)的線程申請(qǐng)資源。線程會(huì)將事務(wù)的申請(qǐng)放進(jìn)一個(gè)隊(duì)列里面,然后每次都從隊(duì)列里面獲取『最老』的申請(qǐng),讓它來(lái)訪問(wèn)partition的內(nèi)容)