基于时间戳排序的并发控制
Last updated
Last updated
另一种决定事务可串行化的方法是事先选定事务的次序,其中最常用的方法就是时间戳排序机制。
当事务T1发出写X项的操作,需检查:
如果X的读时间戳大于T1的时间戳,或者X的写时间戳大于T1的时间戳,则拒绝写操作,撤销并回滚T1。这说明某个时间戳大于T1的T2(比T1晚启动),在T1要写X之前,T2已经读或写了X的数据。如果是T2先写,则T1的写操作将会覆盖较晚启动的T2的写操作,即T2写操作无效。
如果是T2先读,则T2读的是未经T1修改写入的数据,但实际上较晚启动的T2读的应该是T1修改的数据。
如果成功执行T1的写操作,即将X的写时间戳设置为T1的时间戳
当事务发出读X项的操作,需检查:
若X的写时间戳大于T1的时间戳,则拒绝读操作,撤销并回滚T1。说明在T1要读X之前,比T1晚启动的T2已经修改了X的数据,所以X已经不再是T1启动时的数据值了。
如果成功执行T1的读操作,即将X的读时间戳设置为T1的时间戳和当前的X的读时间戳的最大值,这是因为T1在读X前后,其他事务都可以读X。