MIT 6.830 Database System 数据库系统 Lab 5 实验报告

引言:

MIT 6.830的数据库管理课程内容一直在互联网上被我们所青睐,自身也是很早的Mark出来,囤在网址收藏夹里吃灰。新冠疫情期内企业规定在家里防护14天才可以返工,因此无趣之时阴错阳差打开了6.830的课程内容网页页面,打开了自个的数据库学习之行。

自身在进行6.830课程内容的每一个Lab以后会做一个总结,写一份实验数据,期待趁着汇报的方式,回望并加强自身的了解,与此同时也保证开诚布公的功效。若是能给一样学习培训6.830数据库管理课程内容的大伙儿给予一点点的协助,那也是求而不得。

另小编仅仅一个工作中三年的初级工程师,数据库查询行业又是一门要花一辈子深入分析的行业,一定有了解有误差或不正确的地区,还请大伙儿狠狠地的拍砖并丝毫没有留情的进行讽刺,以鼓励我继续前行……

Lab 5的纪录

Lab5逐渐于5月10日,一开始也是首先看《数据库系统概念》这本书,在基本上搞懂了回滚和修复的基础理论以后,逐渐开始开展Lab 5 RollBack and Recover的完成。大概于5月20日进行本试验,本实验难度系数和编码量低于数据库索引和事务这两个Lab,等于Lab3,难以Lab1和2。

SimpleDB自身完成了一套日志管理体系,对比于工业生产级数据库查询的日志系统软件要简洁一些,不显式的区别UndoLog和RedoLog(更沒有binLog这种日志了。。。),反而是简洁的将数据库查询的全部变动有关操作都纪录其相应的事务Id和操作日志。那样在数据库查询必须回滚或是常见故障修复时,只必须正方向或反方向重放事务的操作日志(在于事务成功实行完递交了、或是实行到一半、或是立即实行失败了),便可以完成回滚和修复的总体目标。

一开始花了一些時间写了一个打印出操作日志的方式 LogFile.print(),虽然离开了一些弯道,但根据这一日志打印出方式 ,搞懂了SimpleDB的日志管理体系。与此同时由于把任何的数据库查询操作日志给打印出出来(运作效果的确会遭到危害哈),后边的装维、调节、剖析全是人眼看得见的,提升了工作效率和速率,所说磨刀不误砍柴工。

试验前期由于构思没理清,有点儿脚踩西瓜皮,想起哪儿写到哪里,编码挺乱的。之后5月13/14日上下吧,自身在稿纸上手动式推了一把全部修复和回滚的基本原理,把构思理清了,与此同时把能合拼的反复编码给整顿了。以后对着原稿纸上的递归算法来,一气呵成,通过所有检测,那叫一个爽~~~。

回滚和修复的实质,可以简易抽象化成“日志扫描”和“数据信息重设”两一部分。在其中日志扫描无论你是正方向扫描或是反方向扫描,全是为了能获得相匹配事务的一串操作水流;数据信息重设一部分则在日志扫描获得的操作纪录基本上,依据事务最后的运作状况,开展Redo或是Undo操作来确保数据库查询的一致性。

日志扫描一部分一开始被RandomAccessFile这一类给坑了,这货有一个游标和长短,不留意非常容易弄搞混,随后入读飞走了~。(顺带备注名称一下,日志扫描一部分有一个CheckPoint检查点,这方面非常值得深入分析下来)。试验中的数据信息重设一部分,每一个page都内置了一个oldData字段名,那样page变更前后左右的信息就都是有纪录了。只要依据是undo或是redo,挑选应用老数据信息或是新数据就可以。(立即储存oldData感觉粗鲁了,假如精细化管理粒度分布得话,日志中应当只是纪录被变动的数值数据而不是全部页)。

训练一部分:

Exercise 1. Rollback

Rollback是一个事务显式实行不成功后,回滚的全过程。

因此没有什么好说的,拿着这一事务的Id,扫描操作日志,获得该事务的操作编码序列,反方向重放(由于是Rollback)并撤消有关操作就可以(用oldData遮盖现阶段Data字段名)。

常见问题是,数据恢复时还记得标识为dirty并地刷分布式锁。

Exercise 2. Recovery

完成数据库查询奔溃后的恢复功能。构思也不会太难,寻找全新的那一个检测点,逐渐扫描日志,获得必须undo和redo的事务目录(在其中redo目录还能够细分化为abort和commit两大类,多讲一句实际上redo_Abort和undo很像)。

随后各自对undoList中的事务进行变更日志反方向重放的undo操作;redoCommitList中的事务进行变更日志正方向重放的redo操作;redoAbortList中的事务进行变更日志反方向重放的redo操作。

最终:

回滚与修复这方面一样有可以深入分析的一部分:

1、checkPoint检查点这方面

2、能不能只扫描一遍日志便区别出undo redo事务及其相对应的操作(现阶段是扫描二遍)

3、日志中应当可以只纪录变动的行,现阶段是纪录了全部页Page的转变前后左右

4、工业生产级的数据库查询会出现undoLog, redoLog和binLog等,可以参考认真贯彻下

时间轴2020/5/10 逐渐集中学习2020/5/14 进行集中学习逐渐编码撰写2020/5/20 进行试验编码撰写2020/6/25 进行实验数据原稿2020/7/20 改动实验数据并公布

扫码免费用

源码支持二开

申请免费使用

在线咨询