用个酒店掌柜记账的例子说明 redo log的作用。
酒店掌柜有一个粉板,专门用来记录客人的赊账记录。如果赊账的人不多,那么他可以把顾客名和账目写在板上。但如果赊账的人多了,粉板总会有记不下的时候,这个时候掌柜一定还有一个专门记录赊账的账本
如果有人要赊账或者还账的话,掌柜一般有两种做法:
直接翻开账本记录(直接写磁盘)
先记在粉板(redo log)上,等空闲时再记录到账本(磁盘)上
当生意火爆时,不停有人来要赊账或者还账(更新操作),如果掌柜还是用第一种做法,由于记到账本上需要查找记录(随机读)那就会出现大量的人(更新操作)在等待,会影响工作(阻塞)。
第二种做法,先记在粉板上,空闲时再写回账本。因为记粉板的速度是很快的,就能大量处理赊账或者还账,当掌柜(MySQL)没那么忙的时候,就把粉板上的内容记到账本上。但如果粉板(redo log)写满了那这时候掌柜(MySQL)就要停下工作,先去把粉板(redo log)的内容写回账本(磁盘)。
两种做法的区别是:+
第一种是要找到记录后更新,这里涉及随时读,而随时读是很费时间的
第二种是记在日志上,这是顺序写的,而顺序写是很快的