Concurrency Control 算法分类
TwoPhaseLocking
悲观算法,访问资源必须获取一把锁,否则一直等待资源释放,因此有可能导致死锁的发生。
- 2PLwithdeadlockdetection.(通过一个 dead lock detector 来检查死锁的发生,并决定 abort 哪个事务)
- 2PL with non-waiting deadlock prevention. (更加保守的算法,在获取锁之前便决定是否有可能发生死锁,如果有,则abort响应事务)
- 2PL with wait-and-die deadlock prevention. (每一个事务都有一个时间戳,代表该事务的年龄。如果一个『年轻的』事务申请一个由『年老的』事务所拥有的资源时,『年轻的』事务立马被abort。
TimestampOrderingProtocols
乐观算法,通过时间戳来保证事务的一致性
- BasicT/Oalgorithm.(最基本的 TO 算法)
- Multi-version T/O.(每写一个 tuple,数据库便会为该 tuple 保存一个版本,当事务有读的请求时,数据库会决定返回哪个版本。主要是通过时间戳来保证事务在order上的一致性罢)
- Optimistic concurrency control. (所有数据都在事务自己的 workspace里面读写,当事务提交时,检测是否有冲突发生,并且决定该怎么办)
- T/O with partition-level locking. (将数据分成一个个的 partition,然后又很多的线程,有且仅有一个线程可以访问这些partition,当事务需要访问某一个partition时,便会向相应的线程申请资源。线程会将事务的申请放进一个队列里面,然后每次都从队列里面获取『最老』的申请,让它来访问partition的内容)