Tomcat 接过来说:“如不雅是在第7步和第8步之间体系崩溃,旺财和小强的最新余额都写入了硬盘,然则没有提交事务, 那Undo日记看起来是如许的:
我们这个世界很大年夜, 生活着很多人,形形色色,各怀特技。然则被公认为最拽的一个倒是数据库老头儿,年纪挺大年夜,天天都要夸耀几遍他那关系型数据库, 那理论有着多么坚实的数学基本,那关系袈渌算是多么地优雅,事务治理是多么强大年夜,还有他是多么地稳定, 要不怎么他怎么能活这么久等等。
老头儿有他拽的本钱,因为我们这个体系的核心数据都是在老头儿那边存放着, 例如用户了,订单了,交易了...... 我向别人打听过, 这些数据已经在老头儿那边积聚了20多年了, 最早的时刻是Dephi, PowerBuider 这些上古的软件写的体系拜访, 后来慢慢转到互联网,先用PHP拜访, 再后来变为Java。
看来最宝贵的器械是数据, 外界体系可以变, 然则数据不克不及丢, 老头儿守着这份家当,生生地熬逝世了一代人,估计还会再熬逝世一代人。
2.事务
这一天老头儿又在那边一边喝酒,一边“吹捧” 他的事务治理,说些ACID之类我们都听不懂的外国话, 和数据库经常打交道的是年青的小伙子Tomcat, 对于老头儿,他比我们多懂得那么一点点。
Tomcat端了一杯啤酒来到老头儿桌前:“嗨,老头儿,我知道你说的事务有个重要的特点:原子性,就是说袈溱一个事务中不管有若干操作,都是要么全做,要么全不做,是如许吧!”
“那是天然!”
“我很好奇,在履行的操作过程中,如不雅还没做完体系就崩溃了,或者断电了,你怎么办啊? 你怎么包管原子性?”
听到Tomcat问了一个关键的问题,酒馆里的CPU阿甘, Ngnix, Spring, MyBatis 都围了过来,都想听听老头儿的高见 。
“如不雅我还没做完,体系就崩溃了,那体系重启今后我就得做恢复操作啊。”
“怎么恢复啊? ” Tomcat 穷追不舍。
“你举个例子,我给你分析分析 ” 老头环顾四周,看到人们都围了上来,也来了一点兴趣 , “光讲理论,这些小同慌绫乔怎么听得懂?”
[事务T1, 小强原有余额,50]
(1) 开端事务 T1 (假设T1是个事务的内部编号)
(2) 旺财余额 = 旺财余额 -100
(3) 小强余额 = 小强余额 + 100
(4) 提交事务 T1
CPU阿甘插了一嘴说: “固然这些都是我在做计算,然则这些计算结不雅都是先存在内存中的, 内存那家还峄断电啥都忘了, 如不雅第三步还没履行完就断电了, 那不就垮台了。”
数据库老头儿说: “固然数据先在内存中被计算出来, 然则我是要写入硬盘的数据库文件的,知道不? ”
“你的数据缓冲区是啥意思?” 人群里有人问道。
“老土! 连数据缓冲区都不知道! 我告诉你吧, 那个硬盘啊速度太慢了,比内存慢个几万倍,你说我能每次操作都去写竽暌共盘吗? 绝对弗成能,所以CPU阿甘计算出的数据我会放到数据缓冲区里, 我会在合适的时刻把数据缓冲区的内容写入硬盘的数据文件。 ”
“什么合适的时刻?”
“那是我的缓冲治理器要做的工作了,想听吗? 我再花两天给你讲讲!”
3.Undo 日记
1.数据库老头儿
2. [提交事务 T1] 如许的Undo日记记录必定要在所有的新余额写入硬盘之后再写入。 有了这两条的包管,我就可以高枕而卧了!, 比如说,换个操作次序也没有问题:”
“算了算了, 我们照样先假定命据缓冲区能和硬盘的数据文件同步吧, 回到刚才的问题,旺财在给小强转账, 第二步履行完了,旺财的余额变成了100块 (200-100), 假设已经写入了硬盘文件, 如今断电了, 小强的余额有没有加上,体系的钱白白消掉了100块, 数据已经不一致了, 你怎么办?” Tomcat把话题转移回来。
“宁神吧, 我会记录日记的,我有个叫做Undo的日记文件,就是为懂得决这个问题的” 老头儿喝了一口酒 ,预备开端放大年夜招 “比如你说的情况, 我会在我的日记文件中记录下事务开端之前的他俩账号余额:
[事务T1, 旺财原有余额 , 200]
[事务T1, 小强原有余额, 50 ]
如不雅事务履行到一半,就断电了,那数据库重启今后我就根据undo的日记文件来恢复。”
“嗯,那如果体系恢复的过程中又断电了,还得再次恢复,那数据岂不变得一团糟? ” CPU阿甘对断电心有余悸。
“对啊对啊”, 周边的人赞成到。
“你们这些年青人啊, 照样too simple, 你们细心想想,即使我把旺财的余额和小强的余额恢复了100次,会有什么结不雅?”
“特别是,” 老头弥补道, “ 我恢复今后, 须要在日记文件中加上一行 [回滚事务 T1] , 如许下一次恢复我就不消再推敲T1这个事务了。”
“如不雅每次都试图把旺财的余额设为200, 小强余额设为50, 做若干次都没问题, 因为他俩本来的余额就是那么多 !” Tomcat恍然大年夜悟。
“这就叫做操作的幂等性,知道不? 我可以一向做恢复,恢复过程中断电也不怕,只要把恢复做完久煨。” 老头儿看到机会一到,急速上升为理论。
“恢复数据的时刻, 那你怎么才能知道一个事务没有完成呢?” Tomcat接着问道。
数据库老头儿对这个问题似乎很知足, 专门花点时光写了几行字:
[开端事务 T1]
[事务T1, 旺财原有余额,200]
[提交事务 T1]
推荐阅读
编程大神SethBling开发AI软件 在《马里奥赛车》中获得胜利
国外的游戏编程大年夜神SethBling又推出新玩意,此前他曾经在《我的世界》中开辟了一套MOD,可以或许在MC中运行Atari 2600模仿器,并运行《大年夜金刚》《太空入侵者》等游戏;他也曾经在>>>详细阅读
本文标题:爱炫耀的数据库老头儿
地址:http://www.17bianji.com/lsqh/38576.html
1/2 1