数据库理论笔记_18_可恢复性调度-非瀑布性调度-调度独立等级
不想写博客啊不想写博客啊不想写博客
可恢复性调度(recoverable schedules),是指这个调度是可以回滚的——也就是说,在需要回滚的步骤之间不能存在任何的commit。
举例说明:
在这个例子中,T7读取T6的数据进行运算(这里讲一下我理解的读取过程:若内存中没有对应数据,则从硬盘中读取,若有,则拿来直接用)然后在读一遍以后立即commit,这会带来一个问题,如果在T7commit了以后程序崩了,那么根据原子性法则,T6就要回滚,但是T7已经把数据放到硬盘里了,committed的数据是无法回滚的,这就造成了一个系统错误。
故我们规定,对于一个recoverable的schedule来说,如果一个调度从另外一个调度的结果中读取数据,那么它必须在另外以后调度的commit之后commit。
非瀑布性调度(cascadeless Schedules)
就算满足了可恢复性的限制,仍然有个问题需要解决:
如图,假设此处在T10执行完以后出现了abort,那么我们就得先回滚T10,再回滚T9,再回滚T8,在实际的操作来说,这个是一个很长的过程,而且也非常的浪费,假设我在T8写完以后直接commit,就可以省下很多事情了,这种回滚被成为瀑布回滚(回调地狱)是要避免的一种结构。实际操作中,推荐写完以后commit一次(所以这是暗示顺序执行是最吼的么)
调度独立等级,到现在为止对于我的理解来说还是一种比较迷的东西。
可串行化:对于一个transaction来说必须遵照前文提到的所有规范,即在递交之前所有数据被锁死,在commit之前无法更新
可重复读:这个transaction在进行的时候允许插入数据,但不允许任何的数据修改。
已递交读:这个隔离度可以允许读任何一个已经递交了的数据,但是不会对这个数据做任何的限制。
未提交读:即允许脏读,可以查看到未被提交的数据。