Concurrency Control 算法分類
TwoPhaseLocking
悲觀算法工秩,訪問資源必須獲取一把鎖赴肚,否則一直等待資源釋放,因此有可能導致死鎖的發(fā)生。
- 2PLwithdeadlockdetection.(通過一個 dead lock detector 來檢查死鎖的發(fā)生采蚀,并決定 abort 哪個事務)
- 2PL with non-waiting deadlock prevention. (更加保守的算法,在獲取鎖之前便決定是否有可能發(fā)生死鎖承二,如果有榆鼠,則abort響應事務)
- 2PL with wait-and-die deadlock prevention. (每一個事務都有一個時間戳,代表該事務的年齡亥鸠。如果一個『年輕的』事務申請一個由『年老的』事務所擁有的資源時妆够,『年輕的』事務立馬被abort。
TimestampOrderingProtocols
樂觀算法负蚊,通過時間戳來保證事務的一致性
- BasicT/Oalgorithm.(最基本的 TO 算法)
- Multi-version T/O.(每寫一個 tuple神妹,數(shù)據(jù)庫便會為該 tuple 保存一個版本,當事務有讀的請求時盖桥,數(shù)據(jù)庫會決定返回哪個版本灾螃。主要是通過時間戳來保證事務在order上的一致性罷)
- Optimistic concurrency control. (所有數(shù)據(jù)都在事務自己的 workspace里面讀寫,當事務提交時揩徊,檢測是否有沖突發(fā)生腰鬼,并且決定該怎么辦)
- T/O with partition-level locking. (將數(shù)據(jù)分成一個個的 partition,然后又很多的線程塑荒,有且僅有一個線程可以訪問這些partition熄赡,當事務需要訪問某一個partition時,便會向相應的線程申請資源齿税。線程會將事務的申請放進一個隊列里面彼硫,然后每次都從隊列里面獲取『最老』的申請,讓它來訪問partition的內(nèi)容)