数据库学习笔记_15_交易原子性和持久性详解

本篇对于交易的原子性和持久性做一个详解。

交易有5个阶段,

image

    活动(active) 部分递交(partially committed) 失败(failed) 弹出(aborted) 递交(committed)

  一个中途失败的交易被称为弹出交易(aborted) 所有弹出交易必须被回滚 数据回滚的机制我们称为回复方案(recover scheme),主要是通过系统日志实现的,在记录中我们记录操作的ID,被修改数据的ID,其原值和其修改值。记录以后才轮到数据库本身的修改。这样的设计能满足durability的需求。

  一个成功的交易被称为committed transaction,这个数据被写入以后就难以回滚,唯一的回滚方法是通过抵消操作,即递交另外一个相反的操作,但是有些操作是不能回滚的,所以这部分的锅我们交给了用户。

    活动的交易即为正在进行的交易。

    部分递交的交易,书上并没有说得很详细,于是我谷歌了一下,得到了一个还算满意的结果:

image

大概意思就是说,部分提交就是程序把逻辑内容执行完了,但是可恢复性数据库管理系统还没有把这个结果生成永久性数据,所以先在那里晾着。

失败:即是因为外部错误或者内部逻辑错误导致程序无法继续运行,在这个时候开始执行回滚

  对于一个弹出的交易,在弹出执行完毕以后,有两种选择,一种是重启(restart)一种是终结(kill),重启的情况适用于外部非逻辑性原因改变导致的失败,终结适用于程序内部逻辑执行出错误。

  这里值得一提的是有一个可观察外部写数据,就是说,银行可能用过email给你发账户余额,或者把账户余额写在atm机上,因为这种数据显示是外部的,所以不能执行回滚。一个比较好的方法就是直到递交后才把执行外部显示操作。

posted @ 2017-06-14 10:01  duskcloudxu  阅读(677)  评论(0编辑  收藏  举报