2PL学习记录
《区块链核心算法解析》中提及2PL,最早接触2PL应该是在大三数据库原理课上,但是已经忘记了,所以重新学习一下2PL。
事务可串行性(SERIALIZABLE)
说到2PL两阶段锁,就不得不提及事务可串行性。
- 在说事务可串行性之前,先讲讲为什么数据会出错,以及冲突操作的概念。
- 为什么会出错:
那是因为多个事务访问数据库,比如A事务先读1资源,B事务后写1资源,如果出现问题先让B事务写了1资源,那么A事务就会读错了,这是并发调度产生的问题。 - 冲突操作的概念:
冲突操作是指不同的事务对同一个数据的读写操作和写写操作,还有同一个事务的读写。
Ri (x)与Wj(x) (事务Ti读x,Tj写x)
Wi(x)与Wj(x) (事务Ti写x,Tj写x)
Ri(x)与Wi(x) (事务Ti读x,Tj写x)
- 为什么会出错:
- 事务可串行性是为了保证数据库在并发操作时,数据是正确,可以看串行调度的定义:一个调度中,属于一个事务的所有操作连续执行,称之为串行调度。
简单来说,就是一次并发操作(多个事务操作数据库)得到的结果(事务执行到最后的结果(读或者写))与某一次串行调度的结果是一致的,就可以保证这次并发操作是正确的。
2PL(2阶段锁协议,two-phase locking protocol)
- 2阶段锁协议,就是给要做的数据上锁,然后执行完所有操作后再解锁,解锁时就不能有任何操作了。所以是两阶段(上锁操作+解锁),来保证数据不出错。
- 2PL内容很少,重点基本上是理解可串行性和冲突操作。