01.什么是时间戳
“时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
02.用时间戳实现调度
定义
数据库给予一个事务一个时间戳(具有唯一性)
数据库两种定义时间戳的方法:
无论如何定义时间戳,都会按照时间来进行调度的串行化
每个数据项有两个重要的时间戳:
时间戳排序协定
用要访问的数据项的时间戳对事务读写方法:
这里比较的都是用的事务最开始被系统设定的时间戳
事务读方法用数据项的写的时间戳:
事务写方法用数据项的读和写的时间戳:
事务如果回滚,属于事务的时间戳会重置:
例子
可以保证调度串行化,但是由于长事务的IO时间长,会反复回滚。
改进方法:
1.保证事务写入数据项A时候,数据项A的读时间戳不大于写入成功的时间戳
2
3.这个是无级联调度
可恢复调度:先写数据的事务,先提交
无级联调度:在事务之间,读操作之前提交。
解释
Thomas写规则:
区别: