基于时间戳排序的并发控制

时间戳概念

另一种决定事务可串行化的方法是事先选定事务的次序,其中最常用的方法就是时间戳排序机制。

当事务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。

Last updated